ffmpeg задерживает видео в оверлее

Я пытаюсь наложить 2 видео, и одно из них (то, что внизу), я хочу отложить начало (скажем, на 2 секунды).

Итак, либо удерживайте первый кадр на время задержки, либо используйте черные кадры на время задержки. У меня нет предпочтений относительно того, какой.

Вот что я пробовал на основе этого похожего вопроса: https://superuser.com/questions/734234/delayed-video-overlay-using-ffmpeg

ffmpeg
-i video_top
-i video_bottom
-filter_complex
"[0:v]trim=start='00\:04\:17.8':end='00\:04\:32.8',setpts=PTS-STARTPTS, scale=-1:'ih-ih*.5':eval=frame[v0];
[0:a]atrim=start='00\:04\:17.8':end='00\:04\:32.8',asetpts=PTS-STARTPTS[a0];
[1:v]setpts=PTS-STARTPTS+2/TB, format=yuva420p[v1];
[v1][v0]overlay=y=(main_h-overlay_h)*.074:format=yuv444:shortest=0:alpha='straight',format=yuv420p[out]"
-map [out] -map [a0] -vcodec libx264 testing_14.mp4

Однако результатом этого является то, что ОБА видео замораживают первый кадр на время задержки (в данном случае 2 секунды). Я пробовал кучу альтернативных вариантов, в том числе

  • Только установка PTS на одном из видеопотоков вместо обоих
  • Использование -itsoffset вместо PTS

Кажется, ничего не работает.


person Sam    schedule 03.08.2020    source источник


Ответы (1)


Используйте фильтр tpad. Во время задержки вы можете либо клонировать первый кадр, либо показать сплошной цвет. Упрощенные примеры:

Клонировать 1-й кадр:

ffmpeg -i background.mp4 -i front.mp4 -filter_complex "[0]tpad=start_duration=2:start_mode=clone[bg];[bg][1]overlay" output.mp4

Показать сплошной цвет:

ffmpeg -i background.mp4 -i front.mp4 -filter_complex "[0]tpad=start_duration=2:start_mode=add:color=black[bg];[bg][1]overlay" output.mp4
person llogan    schedule 03.08.2020
comment
Идеальный. Благодарю вас! - person Sam; 04.08.2020
comment
Можете ли вы объяснить, почему использование itsoffset и setpts не дало желаемого эффекта? - person Sam; 04.08.2020