Фильтр scale
может сделать это:
если вы хотите изменить размер входного видео до определенного размера, например 640x480, независимо от его размера и формата изображения, то:ffmpeg -i INPUT -filter_complex [0:v]scale=640:480[Scaled] -map [Scaled] OUTPUT
.
но не сохранение формата изображения может привести к появлению неприглядных видеороликов. поэтому, если вы хотите изменить размер входного видео и сохранить соотношение сторон, укажите одно из измерений и укажите -2
для другого:ffmpeg -i INPUT -filter_complex [0:v]scale=-2:480[Scaled] -map [Scaled] OUTPUT
.
(и 3.) Объединить несколько потоков можно с помощью фильтра concat
:
Команда ниже объединит три видеопотока (отбросит аудиопотоки, если они существуют):ffmpeg -i INPUT1 -i INPUT2 -i INPUT3 -filter_complex [0:v][1:v][2:v]concat=n=3:v=1:a=0[Merged] -map [Merged] OUTPUT
.
Вся команда, которая сделает для вас, будет примерно такой:
ffmpeg -i VideoBefore.mp4 -i MainVideo.mp4 -i VideoAfter.mp4 -i Audio.mp3 -filter_complex [1:v]scale=-2:480,setsar=sar=1[Scaled];[0:v][Scaled][2:v]concat=n=3:v=1:a=0[Merged] -map [Merged] -map 3:a OUTPUT.mp4
Важное примечание : документация фильтра concat
гласит: все соответствующие потоки должны иметь одинаковые параметры во всех сегментах; система фильтрации автоматически выберет общий формат пикселей для видеопотоков, а также общий формат выборки, частоту дискретизации и разметку канала для аудиопотоков, но другие параметры, такие как разрешение, должны быть явно преобразованы пользователем. Атрибут SAR
(примерное соотношение сторон) часто составляет 1: 1. но фильтр scale
изменит это. и нам нужно изменить это снова, чтобы быть равным другим потокам. фильтр setsar
делает это.