2

Я могу добавить текст к видео на моем жестком диске, прежде чем я сделаю это… с помощью команды.

ffmpeg -y -i IMG_0696.MOV -acodec libmp3lame -vcodec msmpeg4 \
-b:a 192k -b:v 1000k -ar 44100 \
-vf "drawtext=text=string1 string2 string3 string4 string5 string6 string7 :expansion=normal:fontfile=/Windows/Fonts/cambriai.ttf: y=0:x=h-(2*lh)-n: fontcolor=white: fontsize=40: box=1: boxcolor=0x00000000@1" \
-an IMG_0696.avi

Теперь я хочу добавить разные тексты в разные моменты времени. Это должно быть прочитано из файла, который имеет формат:

00:00:10 : google
00:00:20 : yahoo
00:00:30 : msft
.
.
.
00:00:60 : amzn
.
.
.
00:05:30 : java

Есть ли способ заставить ffmpeg читать файл и добавлять текст в указанное время? В конце концов, я хотел бы добавить символ тикера в видео перед его трансляцией.

1 ответ1

1

Из исходного кода фильтра drawtext (из libavfilter/vf_drawtext.c в исходном дереве) появляется параметр textfile который может указывать путь к файлу, содержащему строку для рисования (в отличие от установки параметра text как в твоем примере). Возможно, вы захотите поэкспериментировать с передачей ему пути к textfile виде текстового файла и обновлением файла при просмотре видео.

Вам также понадобится другая программа / демон, работающий параллельно для обновления файла (который будет просто содержать текущий текст для отображения), но эта программа будет довольно тривиальной, если вы сможете синхронизировать ее с системными часами.


Кроме того , вы можете изменить сам drawtext фильтр , чтобы отобразить конкретную строку , основанную на текущий таймкод (который доступен для фильтров FFmpeg). Хотя для этого потребуется изменить исходный код фильтра и перекомпилировать его с нуля, он также позволит избежать использования отдельной программы / демона, работающего параллельно (поскольку ваш собственный код будет вызываться всякий раз, когда FFmpeg пытается нарисовать строку).

Однако, если параметр textfile работает (читай: обновляется каждый кадр), это, вероятно, будет лучшим способом, так как простой демон для обновления текстового файла может быть написан на языке сценариев, таком как Python.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .