我正在尝试在视频中的某些占位符上重叠不同的文本,并且使用了以下类型的多个复杂过滤器:
ffmpeg -i ~/Desktop/input.mp4 -filter_complex \
"color=black@0:100x100,format=yuva444p[c]; \
[c][0]scale2ref[ct][mv31]; \
[ct]setsar=1,split=1[t31];\
[t31]\
drawtext=text='text':x='main_w/2-text_w/2+70':y=210:fontsize="100":fontcolor=black,\
drawtext=text='text2':x='main_w/2-text_w/2+75':y=340:fontsize="100":fontcolor=black,\
rotate=-0.07:ow=rotw(-0.07):oh=roth(-0.07):c=black@0[txta31]; \
[mv31][txta31]overlay=enable='between(t, 0, 1.15)':x='min(0,-H*sin(-0.07))':y='min(0,W*sin(-0.07))':shortest=1" \
~/Desktop/result.mp4 -y1
我的目标是在视频中的不同时间间隔上写入不同的旋转文本。问题在于,在大约10到12个[t31]样的片段(这里仅是一个命令的示例)中,视频的渲染时间是视频的两倍,而绘制水平笔直文本大约需要10到20占视频总长度的百分比(例如,对于1分钟的视频,写水平的纯文本大约需要8-10秒,写相同数量的文本但要倾斜一个角度大约需要2分钟)。有没有更好的方法来使这些多个旋转的文本位具有更高的性能?
答案 0 :(得分:0)
有没有更好的方法来使这些多个旋转的文本位具有更高的性能?
使用subtitles过滤器将更快,更简单。示例ASS文件:
[Script Info]
; Script generated by Aegisub 3.2.2
; http://www.aegisub.org/
Title: Default Aegisub file
ScriptType: v4.00+
WrapStyle: 0
ScaledBorderAndShadow: yes
YCbCr Matrix: None
PlayResX: 640
PlayResY: 480
[Aegisub Project Garbage]
Last Style Storage: Default
Video File: ?dummy:23.976000:40000:640:480:47:163:254:
Video AR Value: 1.333333
Active Line: 1
[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,100,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,2,2,10,10,10,1
[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:00.00,0:00:01.15,Default,,0,0,0,,{\pos(400,180),\frz10}text
Dialogue: 0,0:00:00.00,0:00:01.15,Default,,0,0,0,,{\pos(400,260),\frz10}text2
示例命令:
ffmpeg -i input -filter_complex "subtitles=rotate.ass[v]" -map "[v]" -map 0:a? -c:a copy output