Фильтруйте и объединяйте в ffmpeg одновременно

Фильтруйте и объединяйте в ffmpeg одновременно

Я хотел бы внести несколько изменений в видеофайлы одновременно.

Мне нужно добавить фрагменты видео вступление и окончание к входному видео. Это означает объединение 3 видео. Мне нужно добавить наложенное изображение к входному видео (второй сегмент) и только это. Как мне объединить их в одну строку?

Мне удалось сделать это в два этапа. Сначала наложение:

ffmpeg -i input.mkv -i image.png -filter_complex overlay=main_w-overlay_w-0:0 output_file.mkv

Затем слияние:

ffmpeg -i intro.mp4 -i input.mkv -i outro.mp4 -filter_complex "[0:v:0][0:a:0][1:v:0][1:a:0][2:v:0][2:a:0]concat=n=3:v=1:a=1[video_out][audio_out]" -map "[video_out]" -map "[audio_out]" output_file.mkv

решение1

Мы можем использовать временное наименование [v1]для выходных данных, а overlay=main_w-overlay_w-0:0затем использовать их [v1]в качестве входных данных для concatфильтра:

ffmpeg -i intro.mp4 -i input.mkv -i outro.mp4 -i image.png -filter_complex "[1:v][3:v]overlay=main_w-overlay_w-0:0[v1];[0:v:0][0:a:0][v1][1:a:0][2:v:0][2:a:0]concat=n=3:v=1:a=1[video_out][audio_out]" -map "[video_out]" -map "[audio_out]" output_file.mkv


  • Следующая часть применяет стадию наложения:
    [1:v][3:v]overlay=main_w-overlay_w-0:0[v1]
    наложенный вывод получает временное имя [v1].
  • [0:v:0][0:a:0][v1][1:a:0][2:v:0][2:a:0]concat
    использует [v1]в качестве входных данных concat(вместо [1:v:0]).

Связанный контент