digidau commited on
Commit
faf3bcd
·
verified ·
1 Parent(s): 78fd8b4

Update renderer.py

Browse files
Files changed (1) hide show
  1. renderer.py +90 -8
renderer.py CHANGED
@@ -1,3 +1,4 @@
 
1
  import subprocess
2
 
3
 
@@ -5,14 +6,45 @@ def render_final_video(
5
  background,
6
  audio,
7
  subtitles,
8
- output
 
 
9
  ):
10
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
  cmd = [
12
  "ffmpeg",
13
 
14
  "-y",
15
 
 
16
  "-stream_loop",
17
  "-1",
18
 
@@ -23,7 +55,7 @@ def render_final_video(
23
  audio,
24
 
25
  "-vf",
26
- f"ass={subtitles}:fontsdir=fonts",
27
 
28
  "-map",
29
  "0:v",
@@ -35,10 +67,16 @@ def render_final_video(
35
  "libx264",
36
 
37
  "-preset",
38
- "medium",
39
 
40
  "-crf",
41
- "23",
 
 
 
 
 
 
42
 
43
  "-c:a",
44
  "aac",
@@ -48,12 +86,13 @@ def render_final_video(
48
 
49
  "-shortest",
50
 
51
- "-pix_fmt",
52
- "yuv420p",
53
-
54
  output
55
  ]
56
 
 
 
 
 
57
  result = subprocess.run(
58
  cmd,
59
  capture_output=True,
@@ -63,4 +102,47 @@ def render_final_video(
63
  print(result.stdout)
64
  print(result.stderr)
65
 
66
- result.check_returncode()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
  import subprocess
3
 
4
 
 
6
  background,
7
  audio,
8
  subtitles,
9
+ output,
10
+ crf=23,
11
+ preset="medium"
12
  ):
13
 
14
+ if not os.path.exists(background):
15
+ raise FileNotFoundError(
16
+ f"Background not found: {background}"
17
+ )
18
+
19
+ if not os.path.exists(audio):
20
+ raise FileNotFoundError(
21
+ f"Audio not found: {audio}"
22
+ )
23
+
24
+ if not os.path.exists(subtitles):
25
+ raise FileNotFoundError(
26
+ f"Subtitle not found: {subtitles}"
27
+ )
28
+
29
+ print("=" * 50)
30
+ print("FINAL RENDER")
31
+ print("=" * 50)
32
+
33
+ print("Background :", background)
34
+ print("Audio :", audio)
35
+ print("Subtitle :", subtitles)
36
+ print("Output :", output)
37
+
38
+ vf_filter = (
39
+ f"ass={subtitles}:fontsdir=fonts"
40
+ )
41
+
42
  cmd = [
43
  "ffmpeg",
44
 
45
  "-y",
46
 
47
+ # loop background
48
  "-stream_loop",
49
  "-1",
50
 
 
55
  audio,
56
 
57
  "-vf",
58
+ vf_filter,
59
 
60
  "-map",
61
  "0:v",
 
67
  "libx264",
68
 
69
  "-preset",
70
+ preset,
71
 
72
  "-crf",
73
+ str(crf),
74
+
75
+ "-pix_fmt",
76
+ "yuv420p",
77
+
78
+ "-movflags",
79
+ "+faststart",
80
 
81
  "-c:a",
82
  "aac",
 
86
 
87
  "-shortest",
88
 
 
 
 
89
  output
90
  ]
91
 
92
+ print("\nFFMPEG COMMAND:")
93
+ print(" ".join(cmd))
94
+ print()
95
+
96
  result = subprocess.run(
97
  cmd,
98
  capture_output=True,
 
102
  print(result.stdout)
103
  print(result.stderr)
104
 
105
+ result.check_returncode()
106
+
107
+ if not os.path.exists(output):
108
+ raise Exception(
109
+ "Final video not generated"
110
+ )
111
+
112
+ probe = subprocess.run(
113
+ [
114
+ "ffprobe",
115
+ "-v",
116
+ "error",
117
+
118
+ "-show_entries",
119
+ "format=duration",
120
+
121
+ "-of",
122
+ "default=noprint_wrappers=1:nokey=1",
123
+
124
+ output
125
+ ],
126
+ capture_output=True,
127
+ text=True
128
+ )
129
+
130
+ print("=" * 50)
131
+ print("FINAL VIDEO DURATION")
132
+ print("=" * 50)
133
+ print(probe.stdout)
134
+
135
+ size_mb = (
136
+ os.path.getsize(output)
137
+ / 1024
138
+ / 1024
139
+ )
140
+
141
+ print("=" * 50)
142
+ print("OUTPUT SIZE")
143
+ print("=" * 50)
144
+ print(
145
+ f"{size_mb:.2f} MB"
146
+ )
147
+
148
+ return output