iPod videók létrehozása Mencoder-el

Ez a cikk viszi a pálmát időráfordítás tekintetében eddig. Rutin feladatnak indult, aztán majdnem 1 napos szívás lett. Régebben is kódoltam már az Ipod-omra videókat mencoder segítségével, de akkor még nem volt benne ipod kompatibilis mp4 muxer, így még pluszba mp4creator-al kellet babrálni a fájlt, hogy ipod kompatibilis mp4-et kapjunk.

Gondoltam írok egy cikket erről, de mivel nem szoktam olyasmit írni ami nem működik, meg amúgy is lett volna kódolni valóm ipod-ra, így nekiláttam a dolognak. Legfrissebb SVN build beszerzése, majd a jól bevált kódolási paraméterek beírása kiegészítve mp4 muxer beállításokkal, kódolás, aztán szívás.

Szívás, mivel a Quicktime nem volt hajlandó lejátszani a fájlt. Első gondolat: Ennyit az iPod kompatibilis mp4 muxerről. Ezután próbálkoztam az mp4creator-al. fájl megcsinál, Quicktime még mindig nem hajlandó lejátszani. Ezután kb. 6 óra (nem folyamatosa) babrálás, fórumokon megoldás keresés következett, mire nagy nehezen rájöttem, hogy a hiba bizony a mencoder-ben van. Így utólag egyértelmű a dolog, de a szívás elején nem gondoltam egyből erre, mivel nemrég jött ki az új iTunes + Quicktime. Sajnos volt már rá példa iTunes frissítés után, hogy a konvertált mp4 videók elszaródtak.

A probléma oka az, hogy a mencoder-ből a libfaac-ot eltávolították jogi bla-bla miatt. Így csak külső libary-ként lehet használni. Ezzel a gond az, hogy valamiért a külső libary által kreált aac-t nem hajlandó megenni a Quicktime, ezért hibát dob a fájlra.

Könnyen orvosolható a gond, csupán régi mencoder-t kell használni, és a jól bevált mp4creator-al csinálni mp4-et. (hurrá :S, majdnem 1 éves változatok működnek biztosan, csak kérdés, hogy mennyire szereti a videónkat)

Ennyi bevezetés után bele is vágunk a dolgok közepébe. A cikk elsősorban iPod classic lejátszókra szánt mp4 kódolásáról szól, mivel ilyen modellel rendelkezek. Azonban ezen fájlokat az iPhone/iPod Touch/iPad eszközöknek is le kéne játszaniuk, mivel ezekben erősebb vas van.

A classic iPod 3 féle videó formátumot szeret, melyek:

Video Video profil Felbontás Max fps Max. video kbps Hang Profil Max. audio kbps Mintavételezés
h264 Baseline Profile 640×480 30 1500 AAC Low Complexity 160 48 khz
h264 Baseline Profile Level 3.0 640×480 30 2500 AAC Low Complexity 160 48 khz
mpeg4 (xvid) 640×480 30 2500 AAC Low Complexity 160 48 khz

forrás: http://www.apple.com/ipodclassic/specs.html

az első 2 formátummal kicsit gondban vagyok, mivel a gépem lassúsága miatt nem szoktam x264 encodert használni, így a megfelelő paramétereket netről túrtam össze. Ez a következőképpen néz ki (egy sorba írandó):

mencoder -nofontconfig -ovc x264 -x264encopts bitrate=%bitrate%:nocabac:direct_pred=auto:me=umh:frameref=1:level_idc=13:partitions=all:subq=6:threads=auto:trellis=1:vbv_maxrate=768:vbv_bufsize=244:bframes=0-oac faac -faacopts br=128:mpeg=4:object=2-channels 2 -srate 48000 -vf-add scale=640:-10 -vf-add harddup -ofps 25 -o %out% %in%

%bitrate% – használni kívánt bitrate, max 1500 lehet. 500-al már egész jó minőséget produkál.
%in% – konvertálandó fájl elérési útvonala
%out% – kimeneti fájl (avi kiterjesztésű legyen, később el lesz magyarázva miért)

az xvid formátumú mp4 előállításához használt parancssor valamivel rövidebb:

mencoder -nofontconfig -ovc xvid -xvidencopts bitrate=%bitrate%:max_bframes=0 -oac faac -faacopts br=128:mpeg=4:object=2 -channels 2 -srate 48000 -vf-add scale=640:-2 -vf-add harddup -ofps 25 -o %in% %out%

%bitrate% – használni kívánt bitrate, max 1500 lehet. 500-al már egész jó minőséget produkál.
%in% – konvertálandó fájl elérési útvonala
%out% – kimeneti fájl (avi kiterjesztésű legyen, később el lesz magyarázva miért)

Konvertálás végeztével már csak át kell alakítani a fájlokat mp4 formátumra. Ehhez az mp4creator programot használjuk.

  1. első lépésben a konvertált fájlt szétszedjük külön hang és video sávba az alábbi parancsokkal:
    mencoder.exe -ovc copy -nosound -of rawvideo -o video.m4v  %in%
    mencoder.exe -ovc frameno -oac copy -of rawaudio -o audio.aac %in%
  2. ezután létrehozzuk az mp4 fájlt:
    mp4creator.exe -c video.m4v -rate=25 kimenet.mp4
    mp4creator.exe -c audio.aac" kimenet.mp4
  3. Ha sikerrel létrejött az mp4 akkor a fájlok amik már nem kellenek törölhetőek.

Mivel ezen parancsok beírása minden alakalommal elég fárasztó, ezért létrehoztam 2db parancsfájlt ami automatizálja a dolgot. Az egyik a konvertálást végzi el, míg a másik az mp4 átalakítást. A konvertáló parancsfájl automatikusan meghívja az mp4 átalakítót, így pluszba nem kell azt sem beírni. Továbbá, mivel dvd-t is tud olvasni a mencoder, ezért a parancsfájlba is építettem dvd konvertálási lehetőséget. Használata igen egyszerű.
A fájlok konvertálása így működik:

2ipod -file-xvid input.avi output.avi

vagy

2ipod -file-x264 input.avi output.avi

A dvd rippelés sem bonyolultabb:

2ipod -dvd-xvid f: 1 output.avi

vagy

2ipod -dvd-x264 f: 1 output.avi

a paraméterekben szereplő f: a dvd meghajtó betűjele (teljes elérés hdd-n is megadható), míg az 1-es a konvertálandó Title száma. Bitrátát minden esetben a program az indítása után fogja kérni pluszba.

a parancs futtatása után dvd esetén plusszba meg kell adni még a használni kívánt hangsáv id-t. (Az alap hangsáv id-je Dolby Digital kódolású dvd-k esetén 128) Ehhez érdemes a dvd-ről egy teljes riportot készíttetni a következő prancs segítségével:

mplayer-identify -vo null -ao null -frames 0 -dvd-device f: dvd://

ahol szintén az f: a dvd meghajtó betűjele. E parancs nagyon sok mindent kiír. Valami ilyent kellene keresni a kimenet között:

Mivel az mp4 tud tárolni fejezet információt is, ezért ha dvd-t konvertálunk akkor pluszba az eredeti fejezeteket is átpakolhatjuk. Az eredeti fejezetek kezdő idejeit van olyan kedves az mplayer, hogy kiírja, ha a fentebb említett parancsal indítjuk. A kimeneten ilyesmit kell keresni:

Ezen infót felhasználva létre kell hozni egy olyan txt fájt ami a következő formában tartalmaz infót a fejezetekről:

CHAPTER%N%=00:00:00.000
CHAPTER%N%NAME=Intro

A %N% helyére a fejezet száma megy 2 karakteres formában. Pl: 01, 02, 12, 23, stb… Minden fejezethez 2db sor kell. az első sor a fejezet kezdő idejét adja meg, míg a második sor a fejezet leírását. A kész szöveges fájlt chap kiterjesztéssel kell menteni, majd az mp4-be a következő paranccsal ágyazható be:

mp4creator -c fejezetek.chap mp4fajl.mp4

A kész fájlt a Quicktime-nak és az iTunesnak is le kell tudnia játszani. Ha az mp4 fejezeteket is tartalmaz itunes-ban megjelenik a fejezet választó leördülő menü is:

A leírásban szereplő parancsfájlok és a használt mencoder egy csomagban letölthető innen: ipodconvert. További olvasni való a mencoder/mplayer használatával kapcsolatban itt található. A Parancssor használatáról meg egy remek cikk itt.