У меня есть MP4 видео от Giphy . Это видео имеет длину 200 мс и 10 кадров в секунду, как сообщает mediainfo
. Я пытаюсь использовать ffmpeg для добавления фильтров к этому видео.
1) Следующая команда работает отлично. В выходном видео fps = 10 и длительность = 200 мс
ffmpeg3 \
-y \
-i input.mp4 \
-i watermark.jpg \
-filter_complex "[0][1]overlay=W-w-20:H-h-20" \
-c:a aac \
-preset ultrafast \
output.mp4
Но для большего количества фильтров мне нужно использовать lavfi
(например, для размещения источника текста над или под видео, bg color, et c)
2) Следующая команда с lavfi
выводит видео с частотой кадров в секунду = 25 и длительностью ~ = 520 мс
ffmpeg3 \
-y \
-i input.mp4 \
-f lavfi -i color=c=#FFFF0000@1.0:s=1022x682:d=0.5,format=rgba \
-i watermark.jpg \
-filter_complex "[0]scale=1022:682[S3];[S3][2]overlay=W-w-20:H-h-20[O4];[1][O4]overlay=0:0" \
-c:a aac \
-preset ultrafast \
output.mp4
3) Если я добавлю r=10
к lavfi
input, fps изменяется до 10, но длительность ~ 500 мс
-f lavfi -i color=c=#FFFF0000@1.0:s=1022x682:r=10:d=0.5,format=rgba \
Даже в этом случае длительность вывода неверна. И видео просто зависает на оставшуюся продолжительность. Я не могу использовать какой-либо спецификатор кадра, потому что я не знаю входную частоту кадров до этой команды. Все видеовходы от пользователя / клиента этого программного обеспечения, которое я пишу. Это не одноразовая задача.
Это происходит только тогда, когда я использую lavfi
.
. Я хочу, чтобы output.mp4
имел тот же кадр / с и длительность, что и для первого ввода (т. Е. 0
или input.mp4
). Как я могу это сделать (желательно одной командой)?