У меня есть много файлов с несколькими языками аудио и субтитров, однако номера дорожек не согласованы (английский аудиопоток не всегда является первым), поэтому используйте команду, такую как:Отображение потоков по языкам в FFmpeg
ffmpeg -i "input.mkv" -map 0 -map -0:a:1 -c:v copy -c:a copy "output.mkv"
не дает ожидаемых результатов. После поиска вокруг я обнаружил, что это можно было сопоставить потоки на основе языка с помощью этой команды:
ffmpeg -i "input.mkv" -map 0 -map -0:m:language:eng -c:v copy -c:a copy "output.mkv"
Однако -map -0:m:language:eng
удалит все дорожки с флагом на английском языке. Чтобы сохранить дорожки субтитров, вы можете использовать -map 0:s
, но это хорошее решение, но я хочу знать, можно ли только отображать аудиопотоки на основе языка.
Эта команда дублирует потоки видеопотока * и неанглийские субтитры. * если видео не отмечено как английский, которого обычно нет. Мое обходное решение позволяет избежать этого. – Mulvya
Хм, ваше решение не будет отображать вложения, но как вы это делаете, не используя -map 0 или не давая идентификатор каждого отдельного потока вложений? Первая работа над вами создала временный файл, который заставлял процесс занимать больше времени. Кроме того, если вы не используете '-map 0: v' после удаления английских потоков, не удаляется ли видео, если у него есть английский флаг? ? – ffmpeg123
Модифицированное обходное решение для хранения данных и потоков вложений. Ваша первоначальная цель, IIRC, заключалась в удалении только аудиопотоков на английском языке. Мое обходное решение делает это и пропускает все остальное. – Mulvya