У меня есть куча файлов .mkv с различным содержимым, поэтому я не знаю об их аудио, субтитрах, главах и вложениях. Общий знаменатель: у них всех есть одна видео дорожка.

Я хочу пакетно заменить видеодорожку только ее перекодированной версией, сохранив оставшуюся часть файла с аудио, сабвуферами, главами и вложениями. Какой самый простой способ сделать это? В более ранних вопросах всегда делались предположения о другом содержимом файла, поэтому оно не очень применимо, а также желаемый пакетный режим.

x264, ffmpeg или avconv могут быть использованы, если один из них лучше для работы, чем другой.

1 ответ1

1

Один пример

Использование ffmpeg для перекодирования видеопотока (-ов) и копирования потока всего остального:

ffmpeg -i original.mkv -map 0 -c copy -c:v libx264 output.mkv
  • Смотрите одно из различных руководств по кодированию для получения информации о любом формате, который вы хотите.

  • Все потоки из первого входа, помеченные 0 и единственный вход в этом случае, отображаются с -map 0 . В противном случае выбор потока по умолчанию будет отображать только один поток для каждого типа. Например, если ваш вход имеет несколько аудиопотоков, то использование -map 0 отобразит все из них вместо одного.


BASH " для петли "

Чтобы сделать то же самое, что и выше, для всех файлов MKV в текущем каталоге и вывести их в каталог с именем outputdir:

mkdir outputdir
for i in *.mkv; do ffmpeg -i "$i" -map 0 -c copy -c:v libx264 outputdir/"${i%.mkv}.mkv"; done
  • Странно выглядящий "${i%.mkv}.mkv" использует расширение параметров. В вашем случае вы можете просто использовать "$i" , но это полезно, если ваши форматы входного контейнера отличаются от форматов выходного контейнера. Например, без расширения параметра, и если ваши входы - MKV, а выходы - MP4, то выход будет в конечном итоге именоваться как output.mkv.mp4 .

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