ffmpeg - рисование повернутого текста на видео со сложными фильтрами занимает очень много времени - PullRequest
0 голосов
/ 14 мая 2019

Я пытаюсь перекрывать разные фрагменты текста на некоторых заполнителях в видео, и я использую несколько сложных фильтров следующего типа:

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 минут). Есть ли лучший способ сделать эти несколько повернутых битов текста с большей производительностью?

1 Ответ

0 голосов
/ 14 мая 2019

Есть ли лучший способ сделать эти несколько повернутых битов текста с большей производительностью?

Использование фильтра subtitles будет быстрее и, возможно, проще. Пример ASS file:

[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

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...