
Я пытаюсь воспроизвести видео background.mp4, пока другое видео overlay.mp4 накладывается в небольшом прямоугольнике поверх фонового видео. Наложенное видео должно задерживаться.
Посмотрев ffmpeg, я создал следующую команду:
ffmpeg -i background.mp4
-i overlay.mp4
-filter_complex "[1]setpts=PTS-STARTPTS+162/TB, scale=512:288 [over];
[0][over] overlay=748:412 [outv];
[1:a]adelay=162000|162000 [audio];
[0:a][audio] amix [outa]"
-map "[outv]"
-map "[outa]"
-codec:v libx264
-crf 21
-bf 2
-flags +cgop
-pix_fmt yuv420p
output.mp4
Это успешно объединяет видео так, как я хочу. Однако наложенное видео заикаетсямного(как в 30-секундных заморозках), тогда как фоновое видео воспроизводится нормально.
Консоль выдает много сообщений типа: "Буферная очередь переполнена, отбрасывается".
Я искал это в интернете и обнаружил, что мне нужно добавить буфер fifo. Поэтому я попытался:
ffmpeg -i background.mp4
-i overlay.mp4
-filter_complex "[1]fifo, setpts=PTS-STARTPTS+162/TB, scale=512:288 [over];
[0][over] overlay=748:412 [outv];
[1:a]adelay=162000|162000 [audio];
[0:a][audio] amix [outa]"
-map "[outv]"
-map "[outa]"
-codec:v libx264
-crf 21
-bf 2
-flags +cgop
-pix_fmt yuv420p
output.mp4
Однако эта команда никогда не завершается успешно. После прохождения примерно 60 секунд видео она прерывается с сообщением "Killed".
Я предполагаю, что это из-за нехватки памяти, хотя я в этом не уверен. Что мне теперь делать? Есть идеи, как успешно наложить видео, чтобы наложенное видео имело (хотя бы приблизительно) ту же частоту кадров, что и фоновое видео?