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

2008-12-30

Matroska recode

Как и обещал, попробовал обойтись без промежуточных сборок/разборок матрешки. Получилось.
Чего я добивался? В этот раз я хотел уменьшить файл MKV путем перекодирования 6-канального звука в стерео. В итоге файл сжался до приемлемых 1.5 гигов.

Итак, рецепт.
Беру исходную матрешку и узнаю номера аудиотреков (трек 0 - аглицкая озвучка, трек 1 - русская):

v:~/t$ mplayer -vo null -ao null -frames 0 -v ~/bigone/kinozal/superbad.2007.mkv | grep aid
[mkv] Track ID 2: audio (A_AC3) "English", -aid 0, -alang eng
[mkv] Track ID 4: audio (A_AC3) "Rus DD5.1", -aid 1, -alang rus

Обкурившись мануалами (mplayer man ; mencoder man) сочинил команду перекодирования. Видеопоток копирует один в один, аудио (трек 0) перекодирует кодеком vorbis. В итоге получается авишник с исходным видео и пережатым аудиотреком (таких авишников я сделаю два - один с аглицкой звуковой дорожкой, другой с русской):

mencoder ~/bigone/kinozal/superbad.2007.mkv \
-o videoout.avi \
-oac lavc \
-aid 0 \
-ofps 23.976 \
-ovc copy \
-mc 0 \
-lavcopts acodec=vorbis:abitrate=224

в выводе команды увидел слова типа "пропуск кадров!". И они мне не понравились. Не хочу пропускать кадры. Полез обратно в маны, нашел:

However, in some cases they can cause unnecessary skipping and duplication of frames, and possibly slight A/V desync, when used with proper input (of course, A/V sync issues apply only if you process or copy the audio track while transcoding the video, which is strongly encouraged). Therefore, you may have to switch to basic A/V sync with the -mc 0 option, or put this in your ~/.mplayer/mencoder config file, as long as you are only working with good sources (DVD, TV capture, high quality MPEG-4 rips, etc) and not broken ASF/RM/MOV files.

после чего прикрутил опцию
-mc 0
и все заверте...
В итоге: ворбис - быстро кодирует. 500 фреймов/сек. в отличие от других кодеков, у тех до 300 фреймов/сек. максимум. Но. vorbis обламывает плеер при попытке проиграть. Хоть и не всегда - но что-то тут не так. Попробую другой кодек. AAC:

mencoder ~/bigone/kinozal/superbad.2007.mkv \
-o videoout.en.avi \
-oac faac \
-aid 0 \
-ofps 23.976 \
-ovc copy \
-mc 0 \
-faacopts br=224

Плеер играет нормально. Попробую пересобрать матрешку, через пользование mmg получил такую команду:

"mkvmerge" -o "/home/v/t/superbad.mkv" --language 1:eng --track-name 1:EngAud -a 1 -D -S /home/v/t/videoout.en.avi --language 1:rus --track-name 1:RusAud -a 1 -D -S /home/v/t/videoout.rus.avi --language 1:eng --track-name 1:vid --default-track 1:yes --display-dimensions 1:640x344 --language 3:eng --track-name 3:English --language 5:rus --track-name "5:Rus (episodes)" --default-track 5:yes -d 1 -s 3,5 -A /home/v/bigone/kinozal/superbad.2007.mkv --track-order 2:1,0:1,1:1,2:3,2:5

запустил ее и получил отлуп:

Error: '/home/v/t/videoout.en.avi' track 1: Unknown/unsupported audio format 0x706d for this audio track.

Типа, AAC не понимает. Да и хрен с ним, я как знал, что полезнее MP3 ничего нет. Еще один прогон енкодера с использованием кодека MP3 для обеих звуковых дорожек:

mencoder ~/bigone/kinozal/superbad.2007.mkv \
-o videoout.en.avi \
-oac mp3lame \
-aid 0 \
-ofps 23.976 \
-ovc copy \
-mc 0 \
-lameopts preset=standard

mencoder ~/bigone/kinozal/superbad.2007.mkv \
-o videoout.rus.avi \
-oac mp3lame \
-aid 1 \
-ofps 23.976 \
-ovc copy \
-mc 0 \
-lameopts preset=medium

Получил два авишника. Пересбор матрешки (повторяю, эту команду я не руками писал, это я нащелкал мышой в mmg) - звук возьму из двух моих авишников, видео и субтитры из исходной матрешки и склею все это в результирующую матрешку:

"mkvmerge" -o "/home/v/t/superbad.mkv" --language 1:eng --track-name 1:vid --default-track 1:yes --display-dimensions 1:640x344 --language 3:eng --track-name 3:English --language 5:rus --track-name "5:Rus (episodes)" --default-track 5:yes -d 1 -s 3,5 -A /home/v/bigone/kinozal/superbad.2007.mkv --language 1:eng --track-name 1:EngAud -a 1 -D -S /home/v/t/videoout.en.avi --language 1:rus --track-name 1:RusAud -a 1 -D -S /home/v/t/videoout.rus.avi --track-order 0:1,1:1,2:1,0:3,0:5

Просмотр в плеере показал вполне удобоваримый результат. Мне подходит.

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

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

Архив блога

Ярлыки

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)