Вопрос или проблема
Я пытался сделать что-то, что казалось мне относительно простым с ffmpeg.
У меня есть два файла: MP4 и MP3.
MP4 короткий, MP3 длинный. MP4 без звука.
Я хочу создать видео, которое будет проигрывать MP4 в цикле, одновременно проигрывая MP3 (только один раз) в фоновом режиме. Таким образом, длина нового видео равна длине MP3.
Я попробовал много разных команд с ffmpeg, но ничего не работает. Я всегда получаю короткое видео без звука.
Вот последняя команда, которую я попробовал, это ближе всего к тому, что я предполагал должно сработать:
ffmpeg -stream_loop 1 -i silent-video.mp4 -i audiofile.mp3 -c:v copy -c:a aac -b:a 192k -preset:v fast output_video_with_multiple_video_loops.mp4
Ответ или решение
Для решения задачи, которую вы описали, мы намерены использовать ffmpeg для создания видео, в котором короткий MP4 файл зацикливается, а длинный MP3 файл воспроизводится в фоне. Давайте детально разберем, как это сделать правильно.
Шаг 1: Подготовка исходных файлов
У нас есть:
- Беззвучное видео:
silent-video.mp4
- Длинный аудиофайл:
audiofile.mp3
Цель состоит в том, чтобы выходное видео длилось столько же, сколько и аудиофайл. Оно должно содержать воспроизводимое в цикле видео и проигрываемый один раз аудиотрек.
Шаг 2: Использование команды ffmpeg
Для того чтобы объединить файлы так, как вам нужно, команда ffmpeg должна следовать определенному синтаксису:
ffmpeg -stream_loop -1 -i silent-video.mp4 -i audiofile.mp3 -filter_complex "[0:v]loop=loop=-1:size=1:start=0,setpts=N/(FRAME_RATE*TB),format=yuv420p[v]" -map "[v]" -map 1:a -shortest -c:v libx264 -c:a aac -b:a 192k output_final.mp4
Разбор команды:
-stream_loop -1 -i silent-video.mp4
: Мы используем-stream_loop -1
, чтобы зациклить видео бесконечно.-i audiofile.mp3
: Загрузка аудиофайла.-filter_complex
: Этот параметр позволяет нам применять несколько фильтров к дорожкам.[0:v]loop=loop=-1:size=1:start=0
: Зацикливание видеодорожки.setpts=N/(FRAME_RATE*TB)
: Рассчитываем временные метки для корректного воспроизведения.format=yuv420p
: Устанавливает формат видео. Формат yuv420p обеспечивает максимальную совместимость с видеоплеерами.[v]
: Обозначает выходное видео после применения фильтров.
-map "[v]"
: Соответствие выхода обработанного видео фильтрам.-map 1:a
: Копирование аудиодорожки.-shortest
: Эта опция гарантирует, что результирующее видео завершится одновременно с завершением аудиотрека.-c:v libx264
: Кодек для видео, обеспечивающий компрессию и совместимость.-c:a aac -b:a 192k
: Кодек и битрейт для аудиодорожки.
Шаг 3: Запуск команды
Запустите команду в терминале на вашем компьютере, убедившись, что вы находитесь в директории с файлами silent-video.mp4
и audiofile.mp3
. Этот процесс создаст выходное видео output_final.mp4
, длительность которого будет соответствовать длине аудио.
Данный подход позволит вам успешно интегрировать обе дорожки, получив качественное видео с зацикленным содержимым и синхронизированным аудио.