FFMPEG 2 Видео перекодировано и бок о бок в 1 кадре?
У меня есть 2 видео: HEADSHOT.MOV и SCREEN.MOV. Оба файла представляют собой большие файлы, и я рассчитываю уменьшить их размер (размер, битрейт и т. Д.) И поместить эти два рядом друг с другом в один и тот же очень широкий видеокадр. Конечным результатом будет то, что при воспроизведении output_video.mp4 у вас будет очень широкий кадр с синхронизированными видео и воспроизведением с одинаковой скоростью.
Вот синтетически неверная версия того, что я пытаюсь сделать:
ffmpeg -i HEADSHOT.MOV -t 00:02:00 -acodec libfaac -ab 64k -vcodec libx264 -r 30 -pass 1 -s 374x210 -vf "movie=SCREEN.MOV [small]; [in][small] -an -r 30 -pass 1 -s 374x210 overlay=10:10 -t 00:02:00 [out]" -threads 0 output_movie.mp4
В приведенном выше примере я также попытался установить длительность тестового фильма на 2 минуты, что поднимает другой вопрос: как лучше всего обрабатывать 2 фильма различной длины (если они близки)?
Ресурсы, которые я нашел полезными до сих пор:
Несколько источников видео объединены в один и
Любая помощь / совет с благодарностью. У меня проблемы с синтаксисом FFMPEG! Спасибо!
2 ответа
Результат может быть достигнут с помощью комбинации фильтров масштаба, наложения и наложения, как показано ниже:
ffmpeg.exe -i LeftInput.mp4 -vf "[in] scale=iw/2:ih/2, pad=2*iw:ih [left];
movie=RightInput.mp4, scale=iw/3:ih/3, fade=out:300:30:alpha=1 [right];
[left][right] overlay=main_w/2:0 [out]" -b:v 768k Output.mp4
Здесь первое видео сокращается вдвое и дополняется до исходного размера. Второе видео сокращается на две трети и накладывается на правую половину (область заполнения) первого.
Более короткое видео может исчезнуть; в противном случае последний кадр будет отображаться до конца объединенного видео.
Результирующая скорость передачи может быть установлена с помощью -b:v
вариант. Кроме того, размеры и положения видео можно указывать в пикселях для фильтров пэдов, масштабов и наложения.
Чтобы одно видео занимало всю левую половину выходного видео, а другое видео занимало всю правую половину выходного видео И чтобы иметь правильный звук, я расширю ответ @Dmitry Shkuropatsky. На это у меня ушло 5 или более минут, и я использовал ffmpeg версии 3.4 (Copyright (c) 2000-2017):
>ffmpeg -i left.webm -vf "[in] scale=iw/2:ih/2, pad=2*iw:ih [left]; movie=right.mp4, scale=iw/2:ih/2, fade=alpha=1 [right]; [left][right] overlay=main_w/2:0 [out]" -c:a aac -b:v 3800k output.mp4
>ffmpeg -i output.mp4 -i right.mp4 -c copy -map 0:0 -map 1:1 -shortest output_with_audio.mp4
Изменения:
- Без затухания
Я успешно удалил параметр / аргумент затухания, потому что он вызывал у меня проблемы. Если вы хотите использовать постепенное исчезновение, возможно, измените числа вfade=out:300:30:alpha=1
для вашего конкретного случая. - Левое видео заполняет всю левую половину, а правое видео заполняет всю правую половину.
Вместо того, чтобы правая половина была заполнена только на две трети правым видео, я изменил его, чтобы он был полностью заполнен видео для правой половины. - Исправлены проблемы со звуком.
Я выполнил вторую команду FFmpeg, потому что первая (со всеми-vf
stuff), похоже, использует только звук из содержимого, а не из содержимого. Это проблема, если-i
это видео без звука, и вы хотите использовать звук изmovie=
. Вторая команда ffmpeg копирует видеопоток изoutput.mp4
и аудиопоток изright.mp4
вoutput_with_audio.mp4
.