-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdebug_render.py
More file actions
61 lines (54 loc) · 2.53 KB
/
Copy pathdebug_render.py
File metadata and controls
61 lines (54 loc) · 2.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
from pathlib import Path
import subprocess
from app.models.project import *
from app.services.ffmpeg_renderer import FFmpegRenderer
base = Path('tmp_render_debug4')
base.mkdir(exist_ok=True)
def write_test_image(path):
subprocess.run(['ffmpeg','-y','-f','lavfi','-i','color=c=blue:s=1920x1080:d=1','-frames:v','1',str(path)], check=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
def write_test_audio(path,duration):
subprocess.run(['ffmpeg','-y','-f','lavfi','-i', f'sine=frequency=1000:duration={duration}', str(path)], check=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
scenes=[Scene(scene_number=1,start_time=0,end_time=3,duration_seconds=3,narration='one',visual_description='scene one',on_screen_text='',visual_type='image'),Scene(scene_number=2,start_time=3,end_time=6,duration_seconds=3,narration='two',visual_description='scene two',on_screen_text='',visual_type='image')]
scene_plan = ScenePlan(scenes=scenes)
image1=base/'img_1.jpg'; image2=base/'img_2.jpg'
write_test_image(image1); write_test_image(image2)
audio = base/'narration.wav'; write_test_audio(audio,6)
subtitle = base/'subtitles.srt'; subtitle.write_text('1\n00:00:00,000 --> 00:00:03,000\none\n\n2\n00:00:03,000 --> 00:00:06,000\ntwo\n', encoding='utf-8')
project = VideoProject(
id='proj-render',
topic='Render test',
duration_seconds=6,
audience='general',
style='cinematic',
status=ProjectStatus.MEDIA_READY,
scenes=scene_plan,
media_assets=MediaAssets(
visual_assets=[
VisualAsset(scene_number=1, asset_type='image', file_path=str(image1)),
VisualAsset(scene_number=2, asset_type='image', file_path=str(image2)),
],
audio_asset=AudioAsset(file_path=str(audio), duration_seconds=6),
subtitle_file=SubtitleFile(
file_path=str(subtitle),
entries=[
SubtitleEntry(sequence_number=1, start_time=0, end_time=3, text='one'),
SubtitleEntry(sequence_number=2, start_time=3, end_time=6, text='two'),
],
),
),
)
orig_run = subprocess.run
def traced_run(cmd, **kwargs):
print('RUN', cmd)
res = orig_run(cmd, **kwargs)
print('RET', getattr(res, 'returncode', None))
if hasattr(res, 'stderr') and res.stderr:
print('STDERR', res.stderr[:300])
return res
subprocess.run = traced_run
renderer = FFmpegRenderer(base_output_dir=base)
out = renderer.render(project)
print('status', out.status)
print('error', out.error_message)
print('output', out.output_video_path)
print('info', out.render_info)