5

У меня есть видео файл с двумя аудиопотоками:

Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 960x540, 58 kb/s, 29.97 fps, 29.97 tbr, 90k tbn, 180k tbc
Metadata:
  creation_time   : 2012-07-21 06:10:08
Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 164 kb/s
Metadata:
  creation_time   : 2012-07-21 06:10:08
Stream #0:2(eng): Audio: ac3 (ac-3 / 0x332D6361), 48000 Hz, 5.1(side), fltp, 640 kb/s
Metadata:
  creation_time   : 2012-07-21 06:10:08

Есть ли способ отключить только один из них? Что мне действительно нужно, так это получить такой файл:

Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 960x540, 58 kb/s, 29.97 fps, 29.97 tbr, 90k tbn, 180k tbc
Metadata:
  creation_time   : 2012-07-21 06:10:08
Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 164 kb/s
Metadata:
  creation_time   : 2012-07-21 06:10:08

Спасибо

2 ответа2

11

Выбор потока

По умолчанию при выборе потока ffmpeg отображается только один поток для каждого типа потока на основе следующих критериев:

  • видео - поток с самым высоким разрешением
  • аудио - поток с наибольшим количеством каналов
  • субтитры - первый поток субтитров

В случае, когда несколько потоков одного типа имеют одинаковую скорость, выбирается поток с самым низким индексом.

Использование опции -map переопределит это поведение, как показано ниже.

Пример 1: явное отображение

Скажите ffmpeg , какие именно потоки вы хотите, ссылаясь на индексы входного потока:

ffmpeg -i input -map 0:1 -map 0:2 -c copy output
  • -c copy будет потоковое копирование (повторное мультиплексирование) каждого сопоставленного потока вместо перекодирования.

Или используйте спецификаторы потока:

ffmpeg -i input -map 0:v -map 0:a:0 -c copy output
  • Использование спецификаторов потока является более гибким, поскольку вам не нужно знать точный индекс потока, и это может помочь предотвратить случайные сопоставления, такие как попытка отобразить видео в формате только аудио

  • -map 0:v отобразит все видеопотоки со входа 0 (ffmpeg начинает отсчет с 0, поэтому 0 - это первый вход и единственный вход в вашем случае).

  • -map 0:a:0 отобразит первый аудиопоток со входа 0.

Пример 2: негативное отображение

Скажите ffmpeg сопоставить все, затем выберите, что исключить:

ffmpeg -i input -map 0 -map -0:a:1 -c copy output
  • -map 0 отобразит все потоки из входа 0.

  • -map -0:a:1 исключит второй аудиопоток из входа 0.

0

Вы можете использовать спецификаторы потока, чтобы выбрать тип потока и определенный поток. Больше информации здесь ...

http://ffmpeg.org/ffmpeg.html#Stream-specifiers-1

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .