Только видео
Вы можете использовать один filtergraph для всей фильтрации.
ffmpeg -loop 1 -i image0.png -i video1.m4v -i video2.m4v -filter_complex \
"[0:v]scale=1280:-2[bg]; \
[1:v]scale=140:-1,setpts=PTS-STARTPTS[fg1]; \
[2:v]scale=100:-1,setpts=PTS-STARTPTS[fg2]; \
[bg][fg1]overlay=70:70:shortest=1[ol]; \
[ol][fg2]overlay=300:70,format=yuv420p[v]" \
-map "[v]" -movflags +faststart output.mp4
Фильтр мультимедийного источника movie
не требуется.
setpts
сбрасывает метку времени, поэтому она лучше работает с overlay
.
Обратите внимание на самое shortest=1
в одном из оверлейных фильтров. В противном случае входное изображение будет зациклено навсегда. В качестве альтернативы вы можете использовать фильтр trim
на входе изображения.
Действие overlay
"конец файла" можно изменить с помощью eof_action
.
Фильтр format
установит совместимую выборку цветности для QuickTime и других дрянных плееров.
Когда кодирование закончено -movflags +faststart
переместит некоторые данные в начало файла. Это полезно, например, если вы выводите на MP4, и ваши зрители будут смотреть через прогрессивную загрузку, например, из браузера.
С аудио
Предполагая, что оба видео имеют стереозвук, и вы хотите объединить звук из каждого видео в один стереофонический выход.
Пример 1
Этот пример поместит оба входных левых канала в выходной левый канал, а оба входных правых канала - в выходной правый канал.
ffmpeg -loop 1 -i image0.png -i video1.m4v -i video2.m4v -filter_complex \
"[0:v]scale=1280:-2[bg]; \
[1:v]scale=140:-1,setpts=PTS-STARTPTS[fg1]; \
[2:v]scale=100:-1,setpts=PTS-STARTPTS[fg2]; \
[bg][fg1]overlay=70:70:shortest=1[ol]; \
[ol][fg2]overlay=300:70,format=yuv420p[v]; \
[1:a][2:a]amerge[a]" \
-map "[v]" -map "[a]" -ac 2 -movflags +faststart output.mp4
Пример 2
Этот пример поместит оба канала от первого входа в левый канал выхода, и оба канала от второго входа в правый канал выхода.
ffmpeg -loop 1 -i image0.png -i video1.m4v -i video2.m4v -filter_complex \
"[0:v]scale=1280:-2[bg]; \
[1:v]scale=140:-1,setpts=PTS-STARTPTS[fg1]; \
[2:v]scale=100:-1,setpts=PTS-STARTPTS[fg2]; \
[bg][fg1]overlay=70:70:shortest=1[ol]; \
[ol][fg2]overlay=300:70,format=yuv420p[v]; \
[1:a][2:a]amerge,pan=stereo|c0<c0+c2|c1<c1+c3[a]" \
-map "[v]" -map "[a]" -movflags +faststart output.mp4
Пример 3
Если вы просто хотите получить звук с одного входа, просто добавьте опцию -map
в приведенный выше пример видео (не нужно использовать amerge
и pan
):
-map 1:a -c:a copy
Также см