Я пытался удалить ненужные аудиопотоки из файла MKV (Matroska). Причина, по которой я хочу сделать это, состоит в том, чтобы избежать необходимости вручную выбирать нужный поток в проигрывателе Windows Media.
Входной файл дает следующую информацию ffmpeg:
Stream #0.0: Video: mpeg4, yuv420p, 704x396 [PAR 1:1 DAR 16:9], 29.98 tbr, 1k tbn, 29.98 tbc
Stream #0.1(eng): Audio: aac, 24000 Hz, 5.1, s16
Stream #0.2(jpn): Audio: aac, 24000 Hz, 5.1, s16
Stream #0.3(eng): Subtitle: 0x0000
Stream #0.4(eng): Subtitle: 0x0000
Stream #0.5: Attachment: 0x0000
Stream #0.6: Attachment: 0x0000
Поскольку мне нужны потоки 0, 1 и 3 (sub), моя команда ffmpeg выглядит следующим образом:
ffmpeg -i input.mkv -map 0:0 -map 0:1 -map 0:3 -vcodec copy -acodec libmp3lame -newsubtitle test.mkv
что странно дает ошибку:
At least one output file must be specified
Удаление субтитров:
ffmpeg -i input.mkv -map 0:0 -map 0:1 -vcodec copy -acodec libmp3lame test.mkv
дает мне это:
Number of stream maps must match number of output streams
Кажется, я не очень понимаю, как работает опция «карта». Кто-нибудь поможет мне разобраться?
--atracks
опция больше не существует, вместо этого следует использовать либо--audio-tracks
или--video-tracks
.Попробуйте
-f
форсировать указанный формат:источник
Здесь действительно две отдельные проблемы:
В первой командной строке порядок параметров может быть неправильным. Я думаю, что
-newaudio
переключатель должен быть в конце, после имени выходного файла.Вторая командная строка, «Удаление субтитров», поскольку во входном файле есть субтитры, необходимо использовать
-sn
переключатель, чтобы удалить их. В противном случае, кажется, FFmpeg хочет по крайней мере один из указанных в-map
списке.источник
В своей первой команде вы не указали, что test.mkv был вашим выходным файлом. Похоже, вам нужно изменить эту часть на что-то похожее
... -c copy test.mkv
или указать кодек как... -c:s copy test.mkv
.И не уверен, что
-newsubtitle
там делает этот флаг. Но если у вас есть файл субтитров, в который вы хотите добавить, вы сможете сделать еще один флаг ввода-i input.srt
. Смотрите эту ссылку для этого.Во второй команде я думаю, что вы пытаетесь отобразить видеопоток и скопировать его. Так что вы можете попробовать удалить
-vcodec copy
инструкцию, и она должна просто работать. :)источник
l
потока нет .