Хочу поделиться опытом по переборке (с пережатием) контейнера matroska. В дебианчике.
Матрешка - вешь, но мне для хранения хочется файл размером поменьше, а обычно попадаются матрешки боле 4 гигабайт. Вот я и решил разобраться - как уменьшить размер файла. Для примера взял фильм (тупое гавно) Superbad (2007). Всё его достоинство - в наличии оригинальной звуковой дорожки и субтитров.
В общих чертах путь таков: 1) вынуть видеопоток из контейнера; 2) пережать видео в меньший размер; 3) собрать нужные мне потоки в новый контейнер.
Сначала надо получить сведения о том, что и в каком количестве есть:
информация о видеопотоке:
v:~/t$ mkvinfo /mnt/hda2/t/superpercy.mkv
| + Codec ID: V_MPEG4/ISO/AVC
| + Default duration: 41.708ms (23.976 fps for a video track)
| + Language: eng
| + Video track
| + Pixel width: 1280
| + Pixel height: 688
| + Interlaced: 0
| + Display width: 80
| + Display height: 43
v:~$ mkvmerge -i /mnt/hda2/t/superpercy.mkv
File '/mnt/hda2/t/superpercy.mkv': container: Matroska
Track ID 1: video (V_MPEG4/ISO/AVC)
Track ID 2: audio (A_AC3)
Track ID 3: subtitles (S_TEXT/UTF8)
Track ID 4: subtitles (S_TEXT/UTF8)
Track ID 5: audio (A_AC3)
Теперь далее, вынул трек. Дока к проге:
bunkus.org
v:~$ mkvextract tracks /mnt/hda2/t/superpercy.mkv 1:video.h264
Extracting track 1 with the CodecID 'V_MPEG4/ISO/AVC' to the file 'video.h264'. Container format: AVC/h.264 elementary stream
progress: 100%
По чтению доки оказалось, что поток "сырой", чтобы можно было использовать далее, надо оформить в контейнер. ОК, сырец оформил в контейнер:
gpac.sourceforge.net
v:~/t$ MP4Box -add video.264 -fps 23.976 video.mp4
Saving to video.mp4: 0.500 secs Interleaving
После чего задумался о перекодировании. Раздумья привели к использованию супертулзы Mencoder. Почитал тут:
- http://www.mplayerhq.hu/DOCS/man/en/mplayer.1.html
- http://www.mplayerhq.hu/DOCS/HTML/en/faq.html
- http://www.mplayerhq.hu/DOCS/HTML-single/en/MPlayer.html#mencoder
После чего сделал так:
mencoder /home/valik/t/video.mp4\
-o videoout.avi\
-oac copy\
-ofps 23.976\
-ovc x264\
-x264encopts bitrate=1521:threads=2:nointerlaced\
-vf scale=640:344
Замечу, при такой записи (команда в несколько строк, перевод строки экранируется слешем \) надо следующую строку начинать с пробела, а браузер пробелы сожрал - скопировать и тупо повторить команду не получицца.
Пока кодировалось, почитал доку еще. Вычитал такое: поскольку рекомендовано размеры кадра делать кратные 16 (блоки в технологии используются по 16 пискелов), надо было бы такие фильтры использовать:
-vf crop=1280:672,scale=640:336
вместо
-vf scale=640:344
Ну да ладно, на первый раз сойдет.
Перекодировалось, стало меньше раза в 3 с лихуем. Теперь надо собрать матрешку обратно. Это не просто а очень просто, утилита mmg из пакета mkvtoolnix позволяет мышой нащелкать чего угодно, после чего генерирует командную строку. У меня - такую:
"mkvmerge" -o "/home/valik/t/suppercy.mkv" --language 0:eng --track-name 0:vid -d 0 -A -S /home/valik/t/videoout.avi --language 2:rus --track-name "2:Rus DD5.1" --default-track 2:yes --language 3:rus --track-name "3:Rus (episodes)" --default-track 3:yes --language 4:eng --track-name 4:English --language 5:eng --track-name 5:English -a 2,5 -s 3,4 -D /mnt/hda2/t/superpercy.mkv --track-order 0:0,1:5,1:4,1:2,1:3
собралось и работает. Теперь надо будет поглядеть, как звук перекодировать. Мне 5.1 звук в таком отстое ни к чему. Попробую стерео сделать.
Да, извлекать самому видео из матрешки было не нужно (вероятно), может сразу можно было в энкодер совать. Проверять надо.
Комментариев нет:
Отправить комментарий