02.02.2009 Jak na mp4 nejen pro iPhone

Když jsem zjistil, že flash, stejně jako můj mobilní telefon umí přehrávat soubory Quicktime/MOV s kodekem h264 okamžitě jsem se vydal zkoumat, jak to udělat tak, abych nemusel videa do mobilu a na web encodovat 2x.

Dalo to trošku práce a spoustu zkoumání. Několikrát se mi stalo, že jsem video přehrál ve flashi, ale v telefonu ne a ne. Když už šlo přehrat v telefónu, tak si zase nerozumělo s flashem. Nutno říct, že flash je daleko více benevolentnější než iPhone. Nakonec se to povedlo.

Pro encodování jsem použil Ffmpeg, nic jiného se mi nepodařilo donutit vytvořit takový soubor, který by dokázal iPhone přehrát. Následuje přiklad jak na to. Je použito jednoprůchodové kódování.

ffmpeg -y -i video.avi -v 1 -threads auto \
    -vcodec h264 -b 700k -maxrate 768k \
    -r 25 \
    -bt 175k -refs 1 -loop 1 \
    -deblockalpha 0 -deblockbeta 0 -parti4x4 1 -partp8x8 1 -me full -subq 6 -me_range 21 -chroma 1 -bf 0 -level 30 -g 300 -keyint_min 30 -sc_threshold 40 -rc_eq 'blurCplx^(1-qComp)' \
    -qcomp 0.7 -qmax 51 -qdiff 4 -i_qfactor 0.71428572 \
    -bufsize 2M -cmp 1 \
    -acodec aac -ab 128k -ar 44100 -ac 2 \
    -s 480x320 -aspect 1.5 \
    -f mp4 video.mp4

Pro novější verze ffmpegu je potřeba použít tento příkaz. Na linuxu používám verzi SVN-r13582. Na MacOS version 0.5.

ffmpeg -y -i $1  \
    -vcodec libx264 -b 700k -maxrate 1440k -minrate 720k \
    -r 25 \
    -refs 1 -flags +loop -cmp +chroma \
    -partitions +parti4x4+partp8x8+partb8x8 -deblockalpha 0 -deblockbeta 0 -subq 6 -me_range 21 -bf 0 -level 30 -g 300 -keyint_min 500 -sc_threshold 40 -rc_eq 'blurCplx^(1-qComp)' \
    -qcomp 0.7 -qmax 51 -qdiff 4 -i_qfactor 0.71428572 \
    -bufsize 2M  \
    -acodec libfaac -ab 128k -ar 44100 -ac 2 \
    -croptop 4 -cropleft 12 -cropright 12 -cropbottom 2 \
    -s 480x360 -aspect 4:3 \
    -f mp4 $2

Pokud budete chtít ve videu seekovat podobně jako je to popsáno ve článku, který se týká flv souborů kupředu, bez toho, aby jste neměli celý obsah načtený. Doporučuji použít tento modul do lighttpd. Modul má jeden podle mě bug. Přidává do mp4 souboru metadata i když nepoužijete parametr start, to ale ve většině případů nevadí. Pro korektní chování je ho potřeba patchnout. Rozdíl oproti flv spočívá v tom, že atribut start je počet sekund, od začátku videa, kde chcete začít přehrávat.

Komentáře (2)

© 2008. Weblog nejen o práci. www.Karotka.cz. Rss    Google Pagerank - www.karotka.czGoogle Pagerank S-Rank - www.karotka.czS-Rank