понедельник, 5 сентября 2011 г.

Как изменить разрешение видео и сохранить все аудио дорожки и субтитры

Последнее время видеофильмы стали ходить с гигантскими разрешениями типа 1280x526, для обычного телевизора или мобильного устройства это во-первых, избыточно, а во-вторых, файл с таким фильмом имеет размер обычно больше 4ГБ и просто не может быть записан на флешку с FAT.
Если поинтересоваться у гугла "Как изменить разрешение видео", то наиболее распространенный рецепт будет такой - возьмите FFMPEG и сделайте как-то так:
ffmpeg -i inputvideo.mkv -s 720x296 outputvideo.mkv
Проблема в том, что ffmpeg по-умолчанию берет из inputvideo.mkv по одной дорожке видео, аудио и субтитров (если они есть), преобразует разрешение видео как указано (720x296) и помещает в outputvideo.mkv. Если дополнительные аудио дорожки и субтитры терять нежелательно, надо прописывать команды про каждую дорожку из исходного видео файла. При этом универсальной команды для всех видео файлов составить нельзя, сначала надо точно узнать сколько в исходном видео файле дорожек (streams) и в каком они порядке.

Команда
ffprobe inputvideo.mkv
выдает информацию о видео файле (ffprobe - программка из комплекта ffmpeg), в конце будет такой блок:
    Stream #0.0(eng): Video: h264 (High), yuv420p, 1280x526, SAR 1:1 DAR 640:263, 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)
    Metadata:
      title           : Shogun Assassin (1980)
    Stream #0.1(rus): Audio: ac3, 48000 Hz, mono, s16, 128 kb/s (default)
    Metadata:
      title           : Puchkov aka Goblin
    Stream #0.2(rus): Audio: ac3, 48000 Hz, mono, s16, 128 kb/s
    Metadata:
      title           : Kuznetsov
    Stream #0.3(rus): Audio: ac3, 48000 Hz, mono, s16, 128 kb/s
    Metadata:
      title           : Tolbin
    Stream #0.4(rus): Audio: ac3, 48000 Hz, mono, s16, 128 kb/s
    Stream #0.5(eng): Audio: ac3, 48000 Hz, stereo, s16, 192 kb/s
    Stream #0.6(eng): Audio: vorbis, 48000 Hz, stereo, s16
    Metadata:
      title           : Commentary1 Vorbis 2.0 80 kbps
    Stream #0.7(eng): Audio: vorbis, 48000 Hz, stereo, s16
    Metadata:
      title           : Commentary2 Vorbis 2.0 80 kbps
    Stream #0.8(rus): Subtitle: text
Unsupported codec with id 94210 for input stream 8
Видно, что в файле 1 дорожка видео, 7 дорожек аудио и 1 дорожка субтитров. На "Unsupported codec with id 94210 for input stream 8" можно не обращать внимания, т.к. дорожку с субтитрами мы будем просто копировать, кодек для этого не нужен. Итак -
ffmpeg -i inputvideo.mkv -s 720x296 
начало тоже самое - входной файл и нужное разрешение, дальше -
-acodec copy -scodec copy
указываем, что аудио и субтитры нужно копировать как есть, без перекодирования.
А теперь основное, на первом месте всегда видео дорожка (первый 0 - индекс входного файла, второй 0 - индекс дорожки в этом файле) -
-map 0:0
потом аудио дорожки и субтитры -
-map 0:2 -map 0:1 -map 0:3 -map 0:4 -map 0:5 -map 0:6 -map 0:7 -map 0:8
при этом заодно переставим местами две аудио дорожки, #2 из входного файла станет #1 в выходном. Ну и собственно выходной файл -
outputvideo.mkv
Итого вся команда:
ffmpeg -i inputvideo.mkv -s 720x296 -acodec copy -scodec copy -map 0:0 -map 0:2 -map 0:1 -map 0:3 -map 0:4 -map 0:5 -map 0:6 -map 0:7 -map 0:8 outputvideo.mkv
Перекодирование заняло 1ч 20мин, размер файла из 4762МБ стал 855МБ.

Комментариев нет:

Отправить комментарий