Записки программиста, обо всем и ни о чем. Но, наверное, больше профессионального.

2008-12-29

Матрешка разбирается и собирается

Хочу поделиться опытом по переборке (с пережатием) контейнера 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. Почитал тут:


После чего сделал так:

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 звук в таком отстое ни к чему. Попробую стерео сделать.
Да, извлекать самому видео из матрешки было не нужно (вероятно), может сразу можно было в энкодер совать. Проверять надо.

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

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

Архив блога

Ярлыки

linux (241) python (191) citation (186) web-develop (170) gov.ru (159) video (124) бытовуха (115) sysadm (100) GIS (97) Zope(Plone) (88) бурчалки (84) Book (83) programming (82) грабли (77) Fun (76) development (73) windsurfing (72) Microsoft (64) hiload (62) internet provider (57) opensource (57) security (57) опыт (55) movie (52) Wisdom (51) ML (47) driving (45) hardware (45) language (45) money (42) JS (41) curse (40) bigdata (39) DBMS (38) ArcGIS (34) history (31) PDA (30) howto (30) holyday (29) Google (27) Oracle (27) tourism (27) virtbox (27) health (26) vacation (24) AI (23) Autodesk (23) SQL (23) humor (23) Java (22) knowledge (22) translate (20) CSS (19) cheatsheet (19) hack (19) Apache (16) Klaipeda (15) Manager (15) web-browser (15) Никонов (15) functional programming (14) happiness (14) music (14) todo (14) PHP (13) course (13) scala (13) weapon (13) HTTP. Apache (12) SSH (12) frameworks (12) hero (12) im (12) settings (12) HTML (11) SciTE (11) USA (11) crypto (11) game (11) map (11) HTTPD (9) ODF (9) Photo (9) купи/продай (9) benchmark (8) documentation (8) 3D (7) CS (7) DNS (7) NoSQL (7) cloud (7) django (7) gun (7) matroska (7) telephony (7) Microsoft Office (6) VCS (6) bluetooth (6) pidgin (6) proxy (6) Donald Knuth (5) ETL (5) NVIDIA (5) Palanga (5) REST (5) bash (5) flash (5) keyboard (5) price (5) samba (5) CGI (4) LISP (4) RoR (4) cache (4) car (4) display (4) holywar (4) nginx (4) pistol (4) spark (4) xml (4) Лебедев (4) IDE (3) IE8 (3) J2EE (3) NTFS (3) RDP (3) holiday (3) mount (3) Гоблин (3) кухня (3) урюк (3) AMQP (2) ERP (2) IE7 (2) NAS (2) Naudoc (2) PDF (2) address (2) air (2) british (2) coffee (2) fitness (2) font (2) ftp (2) fuckup (2) messaging (2) notify (2) sharepoint (2) ssl/tls (2) stardict (2) tests (2) tunnel (2) udev (2) APT (1) Baltic (1) CRUD (1) Canyonlands (1) Cyprus (1) DVDShrink (1) Jabber (1) K9Copy (1) Matlab (1) Portugal (1) VBA (1) WD My Book (1) autoit (1) bike (1) cannabis (1) chat (1) concurrent (1) dbf (1) ext4 (1) idioten (1) join (1) krusader (1) license (1) life (1) migration (1) mindmap (1) navitel (1) pneumatic weapon (1) quiz (1) regexp (1) robot (1) science (1) seaside (1) serialization (1) shore (1) spatial (1) tie (1) vim (1) Науру (1) крысы (1) налоги (1) пианино (1)