Есть два основных способа получить только видео или аудио из файла, который содержит оба. По умолчанию поведение выбора потока в 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 игнорировать первый аудиопоток с первого входа.