Использовать субтитры с фильтром субтитры .Это будет проще и эффективнее, чем делать снимки заранее и пытаться все рассчитать.Вы также можете контролировать шрифт, размер, цвет, стиль, положение и т. Д. Например, используя фильтр color в качестве фона:
ffmpeg -i music.mp3 -filter_complex "color=c=blue,subtitles=lyrics.srt[v]" -map "[v]" -map 0:a -c:a aac -shortest output.mp4
SRT
Это простой формат, поддерживающий базовые стили.
1
00:00:00,600 --> 00:00:02,340
Revelation, chapter 4
2
00:00:02,340 --> 00:00:04,100
<b>After</b> these <u>things</u> I <font color="green">looked</font>,
3
00:00:04,100 --> 00:00:06,410
and behold a door was opened in heaven,
ASS
С субтитрами ASS вы можете получить еще больший контроль, напримеркак отдельные слова и буквы, но этот формат гораздо сложнее:
[Script Info]
ScriptType: v4.00+
PlayResX: 384
PlayResY: 288
[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,16,&Hffffff,&Hffffff,&H0,&H0,0,0,0,0,100,100,0,0,1,1,0,2,10,10,10,0
[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:00.60,0:00:02.34,Default,,0,0,0,,Revelation, chapter 4
Dialogue: 0,0:00:02.34,0:00:04.10,Default,,0,0,0,,After these things I looked,
Dialogue: 0,0:00:04.10,0:00:06.41,Default,,0,0,0,,and behold a door was opened in heaven,
В этом примере показана только структура формата: я не добавил ни одного стиля. Aegisub можно использовать для создания субтитров ASS, если вы хотите поэкспериментировать с этим форматом.ffmpeg
может конвертировать форматы субтитров.
force_style
опция
Опция force_style
в фильтре субтитров может расширить возможности форматирования упрощенного формата SRT.Он использует параметры формата ASS, такие как Fontsize
, Fontname
, OutlineColour
и т. Д. Посмотрите на строку Format
в примере ASS выше для списка параметров.
subtitles=lyrics.srt:force_style='Fontname=DejaVu Serif,PrimaryColour=&HCCFF0000'