(ffmpeg) Размер буфера VBV не установлен - MPG в MPG

У меня есть файл MPG (mpeg2) с двумя аудиопотоками.

Я просто хочу удалить один из аудиопотоков без повторного кодирования или потери качества.

Вот моя команда (я не сопоставляю аудио, которое хочу удалить):

ffmpeg -i input.MPG
-map 0:v:0 -map 0:a:1
-vcodec mpeg2video
-c:a mp2
-y
output.MPG

Это работает, НО у меня есть эта ошибка/предупреждение:

[mpeg @ 0000020268f9a300] VBV buffer size not set, using default size of 230KB
If you want the mpeg file to be compliant to some specification
Like DVD, VCD or others, make sure you set the correct buffer size

Ну и конечно же качество выводимого видео просто ужасное!

Как я могу это исправить ?

Спасибо большое за ваши ответы ;)


person Thibault    schedule 15.06.2020    source источник


Ответы (1)


Если вы хотите удалить один поток из своего медиафайла, скопируйте все, КРОМЕ поток, который вы хотите удалить.

Поиск всех потоков внутри медиа

Вы получаете все потоки внутри вашего мультимедиа с помощью этого:

ffprobe mediafile.mpg 2>&1 | grep -i stream

Пример

Это пример вывода одного из моих носителей:

Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 720x576 [SAR 64:45 DAR 16:9], 171 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)
Stream #0:1(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 720x576 [SAR 64:45 DAR 16:9], 55 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc
Stream #0:2(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
Stream #0:3(deu): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 130 kb/s
Stream #0:4(fra): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 129 kb/s

Имеет два видеопотока (с двух камер) и три аудиопотока (на разных языках).

Как копировать (без потерь)

Теперь, если вы хотите скопировать поток, вам нужно слово copy в качестве кодека. Пример:

ffmpeg -i media.mpg -c copy output.mkv

или более явный (видео и аудио кодек)

ffmpeg -i media.mpg -c:v copy -c:a copy output.mkv

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

Чтобы скопировать все потоки:

ffmpeg -i media.mpg -map 0 -c copy output.mkv

Примечание: mkv — это современный медиаконтейнер (avi и mpg довольно старые и устаревшие, mp4 тоже новее, но mkv более гибкий). Но вы также можете использовать контейнер mpg в качестве вывода.

Удалить поток

Теперь я покажу вам, как выбрать потоки для копирования с помощью моего примера медиафайла сверху. Остальные потоки будут опущены (= удалены):

ffmpeg -i media.mkv -c copy -map 0:0 -map 0:2 -map 0:3 output.mkv

Как вы видели выше, у меня было два видеопотока (0:0 и 0:1) и три аудиопотока (0:2, 0:3, 0:4). В моей команде я пропустил поток 0:1 и 0:4 (я их удалил).

Ваш случай

В вашем случае у вас должно быть 0:0 (видео), 0:1 (аудио) и 0:2 (аудио):

ffmpeg input.mpg -c copy -map 0:0 -map 0:1 output.mpg
person erik    schedule 15.06.2020