Енкодване на клипове за k800 с mencoder и ffmpeg

От месеци се мъчех да си смачкам някое друго видео, което да мога да си го гледам на телефона. GSM е Sony Ericsson k800. По спецификации поддържа:
– видео 3GPP (H263, H264), MP4, Real8
– аудио MP4 (AAC, AAC+, E-AAC+), MP3, M4A, WMA, 3GP, AMR, WAV, G-MIDI 1, Real 8
– максимална разделителна способност 320х240
– максимален битрейт – 400 kb/s – като това е общо видео битрейт + аудио битрейт
До сега имам поне към 500 неуспешни опита да енкодна видео с mencoder и то да тръгне на телефона. Във файловия мениджър се появява една иконка с пакетче и контекстен бутон Send (като на всички непознати файлове) и толкоз. Никакъв опит за по-съществен дебъг. Какво не му харесва? Тук вече става въпрос за много сложна комбинация от видео енкодер, аудио енкодер, видео формат, видео контейнер, аудио кодек, битрейти…
Ето някой от неуспешните опити с mencoder:

mencoder input.avi -ovc lavc -lavcopts acodec=ac3:abitrate=64:vcodec=mpeg4:vbitrate=300 -oac mp3lame -lameopts br=64 -vf scale=320:240 -of lavf -lavfopts format=mp4 -o output.mp4

Сега като го гледам този, не ми е чудно че не тръгва. Опитвам се да ползвам за аудио кодек АС3, а телефона май не го поддържа

mencoder input.avi -ovc x264 -x264encopts bitrate=350 -oac mp3lame -lameopts br=64 -vf scale=320:240 -o output.mp4

Едно време си мислех че x264 == MPEG-4, сега си мисля че не е точно така. Вече почнах да се обърквам кое е енкодер, кое е кодек и кое е контейнер…
Та това са само последните два от няколкостотин опита и килограми изхабени нерви по mencoder. Не искам да кажа че mencoder си върши работата зле – виновно е задклавиатурното устройство 🙂 В други случаи mencoder върши чудесна работа, примерно това рипване на DVD:

mencoder dvd://3 -dvd-device /mnt/cdrom/ -ovc lavc -lavcopts vcodec=mpeg4:vhq:vbitrate=”800″ -oac mp3lame -lameopts br=128 -o dvd.avi

По едно време ми писна и се залових за алтернативния софтуер – ffmpeg. Не ми хареса man страницата му, където са описани по-малко от половината опции. Въпреки това, работата горе долу стана.
Първо пробвах да преобразувам клипчето в 3GP, но се оказа че формата има комплект валидни разделителни способности, най-високата от които да ми върши работа беше 176х144. Не мерси.
Съсредоточих се върху MP4:

ffmpeg -i input.avi -ar 8000 -ac 1 -acodec libfaac -vcodec mpeg4 -s 320×240 -r 24 -b 300000 -ab 48000 -t 30 output.mp4

Видеото излезе с подходящия thumbnail в мениджъра на телефона, даже и тръгна. Единствения кусур беше звука, който беше с отвратително качество.
Ето подобрение:

ffmpeg -i input.avi -ar 44100 -ac 1 -acodec libfaac -vcodec mpeg4 -s 320×240 -r 24 -b 250000 -ab 64000 output.mp4

Аудио енкодера не ми даде да вдигна аудио битрейта докато не вдигнах и sampling rate-а. Намалих и видео битрейта, понеже на някои места видеото забавяше и се получаваше framedrop ефект. Накрая всичко тръгна на сто процента 🙂

Tags: , , , ,

6 Responses to “Енкодване на клипове за k800 с mencoder и ffmpeg”

  1. Nasko says:

    Бате а дали успя да енкоднеш видеото с mencoder?

  2. ivanatora says:

    Не, защото нямах AMR аудио кодеците, но вече ги имам и ще пробвам 🙂

  3. ivanatora says:

    Всъщност обърках се – AMR беше за 3GP клиповете. Не знам защо не успях с mencoder 🙂

  4. Nasko says:

    Идеята ми е да се използва графичният интерфейс под windows към mencoder -> viDrop.

    Можеш да го погледнеш на: http://skss.learnfree.eu/archives/151

    Хубавото е, че може да се добавиат субтитри 🙂

  5. ivanatora says:

    За Windows има стотици програми конвертори 🙂

  6. Nasko says:

    Да. Така е! Но повечето от тях не поддържат субтитри 🙁 Или пък ако поддържат едва ли ще бъдат с подходящия енкодинг 🙁

Leave a Reply