Как с помощью одной команды ffmpeg.exe перенести звуковую дорожку из одного MP4 файла в другой без перекодирования?
У меня есть два MP4 файла:
- 1080.mp4 - видео без звука
- 360.mp4 - видео со звуком
Мне нужно перенести звуковую дорожку из файла 360.mp4 в файл 1080.mp4 без перекодирования аудио. Я знаю, что это можно сделать в две команды:
ffmpeg -i 360.mp4 -vn -acodec copy sound.aac
ffmpeg -i 1080.mp4 -i sound.aac -c copy 1080_sound.mp4
Однако, требуется выполнить эту задачу с помощью одной команды ffmpeg, передав оба видеофайла через ключ -i и получив результат за один запуск программы.
Какую команду ffmpeg нужно использовать для переноса звуковой дорожки из одного MP4 файла в другой без промежуточных файлов и перекодирования?
Используйте следующую команду для переноса звуковой дорожки из одного MP4 файла в другой без перекодирования:
ffmpeg -i 1080.mp4 -i 360.mp4 -map 0:v:0 -map 1:a:0 -c copy 1080_sound.mp4
Содержание
- Основная команда
- Разбор компонентов команды
- Альтернативные варианты
- Обработка нескольких аудиодорожек
- Проверка результата
- Заключение
Основная команда
Для переноса звуковой дорожки из файла 360.mp4 в файл 1080.mp4 без перекодирования используйте:
ffmpeg -i 1080.mp4 -i 360.mp4 -map 0:v:0 -map 1:a:0 -c copy 1080_sound.mp4
Эта команда объединяет видео из первого файла с аудио из второго файла, сохраняя оба потока без перекодирования.
Разбор компонентов команды
Давайте разберем каждый компонент команды:
-i 1080.mp4- первый входной файл (видео без звука)-i 360.mp4- второй входной файл (видео со звуком)-map 0:v:0- взять видеопоток (v) с индексом 0 из первого файла (0)-map 1:a:0- взять аудиопоток (a) с индексом 0 из второго файла (1)-c copy- копировать оба потока без перекодирования1080_sound.mp4- выходной файл
Важно: Ключ
-mapпозволяет точно указать, какие именно потоки из каких файлов нужно использовать в выходном файле.
Альтернативные варианты
Более краткая запись
Можно использовать более краткую форму команды:
ffmpeg -i 1080.mp4 -i 360.mp4 -map 0:v -map 1:a -c copy 1080_sound.mp4
В этом случае FFmpeg автоматически выберет первый видеопоток и первый аудиопоток из указанных файлов.
Указание кодеков явно
Для большей явности можно указать кодеки отдельно:
ffmpeg -i 1080.mp4 -i 360.mp4 -map 0:v:0 -map 1:a:0 -c:v copy -c:a copy 1080_sound.mp4
Это эквивалентно -c copy, но более явно показывает, что и видео, и аудио копируются без изменений.
Обработка нескольких аудиодорожек
Если в файле 360.mp4 несколько аудиодорожек, вы можете выбрать нужную с помощью индекса:
# Вторая аудиодорожка (индекс 1) из второго файла
ffmpeg -i 1080.mp4 -i 360.mp4 -map 0:v:0 -map 1:a:1 -c copy 1080_sound.mp4
Чтобы просмотреть доступные потоки в файлах, используйте:
ffmpeg -i 360.mp4
Это покажет все потоки с их индексами.
Проверка результата
После выполнения команды вы можете проверить результат:
ffprobe 1080_sound.mp4
Эта команда покажет структуру выходного файла, включая наличие видео и аудио потоков.
Также можно проверить качество аудио с помощью:
ffmpeg -i 1080_sound.mp4 -f null -
Если команда выполнится без ошибок, это означает, что файл имеет корректную структуру.
Заключение
Использование одной команды FFmpeg для переноса аудиодорожки между файлами имеет несколько преимуществ:
- Эффективность - нет необходимости создавать промежуточные файлы
- Скорость - процесс выполняется быстрее, так как нет этапа перекодирования
- Качество - аудио сохраняется в исходном качестве без потерь
- Удобство - всего одна команда вместо двух
Основная команда для вашей задачи:
ffmpeg -i 1080.mp4 -i 360.mp4 -map 0:v:0 -map 1:a:0 -c copy 1080_sound.mp4
Источники
- r/ffmpeg on Reddit: Adding Audio Track from one mp4 to another mp4
- Super User: How to use ffmpeg to rip audio from mp4 and add it to another
- Stack Overflow: FFMPEG mux video and audio (from another video) - mapping issue
- JSON2Video: FFmpeg - How to extract audio from video
- Mapping multiple input files - python-ffmpeg