Есть два основных способа получить только видео или аудио из файла, который содержит оба. По умолчанию поведение выбора потока в ffmpeg выберет один поток для каждого типа потока. Обратите внимание, что входы могут содержать несколько типов потоков: видео, аудио, субтитры и данные. Некоторые входы могут даже содержать несколько из каждого из этих типов потоков; такие как два видеопотока.
-vn или -an
Эти опции сообщают ffmpeg опустить видео (-vn) или аудио (-an).
Чтобы пропустить видео и скопировать аудио:
ffmpeg -i input -vn -codec:a copy output.mka
Чтобы пропустить аудио и скопировать видео:
ffmpeg -i input -an -codec:v copy output.mkv
Эти примеры будут копировать поток желаемого потока. Это означает, что ffmpeg просто перекодирует его вместо перекодирования. Это очень быстро, и поскольку это, по сути, "копирование и вставка", это не повлияет на качество.
Использование -vn и -an не пропустит другие потоки, которые могут присутствовать, такие как субтитры или потоки данных, но форматы только аудио будут игнорировать их в любом случае.
-map
Опция -map может показаться более сложной, но более гибкой и полезной. Например, -vn указывает ffmpeg пропускать только видеопоток, но с помощью спецификатора потока -map может указывать ffmpeg пропускать все, кроме нужного потока.
Чтобы скопировать только видео:
ffmpeg -i input -map 0:v -codec copy output.mkv
Чтобы скопировать только аудио:
ffmpeg -i input -map 0:a -codec copy output.mka
0:v - это спецификатор потока, говорящий ffmpeg включать только с первого входа 0 видеопотоки v . Это может быть продлено в дальнейшем. Использование 0:v:0 означает first input:video:first video stream и было бы полезно, если ваш вход содержал несколько видеопотоков, а вы хотели только первый. Обратитесь к выводу консоли ffmpeg, чтобы узнать порядок потоков в вашем входе.
Вы также можете использовать негативные отображения. Использование -map 0 -map -0:a:1 отобразит все потоки, кроме второго аудиопотока. -map 0 указывает ffmpeg включить все потоки со входа 0 (первый вход), а -map -0:a:1 затем сообщает ffmpeg игнорировать первый аудиопоток с первого входа.