< HomePage | Снимки
<- Вторник, 18 Октомври 2005 | Начална страница | Четвъртък, 20 Октомври 2005 ->
Сряда, 19 Октомври 2005

Преди време си купихме мини Mpeg4 камера, но чак днес се наложи да свалям от нея филми. Камерата е Samsung Miniket VP-M110. Има чудесни възможности, а най-благото в нея е, че фърмуера и е Linux :) Повече за камерата може да прочетете отваряйки следните връзки:

Samsung Miniket VP-M110 (внимание Flash!)
LinuxDevices - Device Profile: Samsung Miniket multi-function diskless camcorder
Preview: Samsung Miniket VP-M110

Вече бях прочел тук-там, че камерата използва някаква модификация на Mpeg4 кодека и ми стана доста интересно защо Samsung са извършили глупостта да не спазят утвърдения стандарт и то точно в устройство, на което фърмуера е Linux? С идиотщината която са извършили, кажи речи всеки player има нужда от нещо допълнително, за да работи с видео файловете създадени от Miniket.

Например любимият ми MPlayer при опит за гледане на филм сниман с камерата, показва следното съобщение:

Playing SMOV0001.AVI.
Cache fill: 0.00% (0 bytes) AVI file format detected.
VIDEO: [SEDG] 720x576 24bpp 25.000 fps 6140.2 kbps (749.5 kbyte/s)
==========================================================================
Opening audio decoder: [alaw] aLaw/uLaw audio decoder
AUDIO: 22050 Hz, 2 ch, s16le, 352.8 kbit/50.00% (ratio: 44100->88200)
Selected audio codec: [ulaw] afm:alaw (uLaw)
==========================================================================
vo: X11 running at 1280x1024 with depth 24 and 32 bpp (":0.0" => local display)
==========================================================================
Cannot find codec matching selected -vo and video format 0x47444553.
Read DOCS/HTML/en/codecs.html!
==========================================================================

След това съобщение се чува само звука, но видео няма никакво.

Потърсих из нета и бързо намерих решението, което се оказа доста елементарно. Достатъчно беше да окажа в конфигурацията на MPlayer, че формата 0x47444553 е mpeg4, и за да се гледа трябва да се ползва, някой от mpeg4 драйверите.

Това се прави като във файла файла ~/.mplayer/codecs.conf или /usr/local/etc/mplayer/codecs.conf /ако искате да настроите конфигурацията за всички потребители/ трябва да добавите реда format 0x47444553 при описанието на драйвера ffodivx.

Ето извадка от файла codecs.conf (и само patch за codecs.conf), който при мен работи:

videocodec ffodivx
  info "FFmpeg MPEG-4"
  status working
  fourcc FMP4,fmp4
  fourcc DIVX,divx
  fourcc DIV1,div1 divx
  fourcc MP4S,mp4s  ; ISO MPEG-4 Video V1
  fourcc M4S2,m4s2
  fourcc xvid,XVID,XviD,XVIX
  fourcc DX50,dx50,BLZ0 DX50
  fourcc mp4v,MP4V
  format 0x4
  fourcc UMP4
  fourcc 3IV2,3iv2  ; 3ivx Delta 4
  fourcc DXGM
  format 0x10000004  ; mpeg 4 es
  format 0x47444553  ; Support for Samsung Miniket VP-M110 
  driver ffmpeg
  dll mpeg4 ;opendivx
  out YV12,I420,IYUV

Използвайки така модифицирания codecs.conf си пуснах видеото и при MPlayer под OS X, като просто копирах файла в /usr/local/etc/mplayer/. По този начин проработи и конзолният MPlayer, които съм си компилирал сам и MPlayer OS X.

Ако някой знае как да "подкарам" видеото и с Xine под Linux и VLC под OS X, да казва.

Добавка от 24.10.2005

Тъй като файловете са си стандартен DivX, оказва се че е достатъчно да се смени идентификатора във файла, за да може да се гледа с всеки плеър разбиращ от DivX. Това може да направите като отворите avi файла със шестнайсетичен редактор и замените текста SEDG с DIVX. Ако имате инсталиран perl, може да използвате следната команда:

perl -pi -e 's|SEDG|DIVX|m' *.AVI

Тази команда заменя SEDG с DIVX във файлове с разширения .AVI в текущата директория.

[ Коментари: 5 ]
Коментари

Качи някъде едно кратко клипче за тестове, пък ще видим.

Написа Н.Пепелишев на 21-Oct-2005 16:10


Защо се опитваш да се справиш със симптомите на проблема, а не го решиш генерално? ;-) Ако само това му е грижата взимай hex редактора, firmware на камерата и смени този така зловреден низ. Ако ли пък поради някакви причини това решение не става (силни крипто проверки, etc), доколкото виждам, чрез проста промяна на 4cc-то в avi файла този ти проблем се решава... Това 0x47444553 не ми изглежда случайно избрано. Да видим сега дали Fjalar Ravia е имал успех...
47|44|45|53
G |D |E | S
Или както още е известен този кодек - SEDG. Най-вероятно FourCC го взима наобратно заради endiannes. Да видим:
D |I |V |X
44|49|56|58
или 0x58564944, което според мен e FourCC на XVID.
Доколкото виждам mplayer разпознава и XVID и DIVX като формати за "FFmpeg MPEG-4", така че в случая и s/SEDG/DIVX/ ще ти свърши работа, и s/SEDG/XVID/. Малко предизвикателство представлява фактът, че тази последователност от байтове се среща на две места във avi файловете - на отмествания 0x70 и 0xbc. Не ми се рови защо е така, предполагам, че второто е свързано с аудиото. Мисля, че с малко опит и грешка ще се разбере кое е правилното място/комбинация за подмяна. А, divx и xvid също вършат работа ;-)
Което означава, че просто трябва да напишеш 1..n редово програмчЕ на $favorite_programming_language за import/postprocessing на филмите ти и...
happy hacking!

Написа Христо Еринин на 21-Oct-2005 23:36


Мерси, Христо ще пробвам да заменя идентификатора във файловете, да видим дали ще стане (би трябвало!).
Ако наистина помогне, ще съм супер доволен защото няма да се налага да прекодирам всеки път файловете. А Самсунг заради тази селяния със сменения идентификатор заслужават едно голямо GFY!

Пратих писмо на един от разработчиците на MPlayer и той вече ми отговори, че има по-добър patch за да се поддържа Самсунга и то именно с добавяне на SEDG идентификатора към fourcc.

Написа Георги Чорбаджийски (www) на 22-Oct-2005 10:24


Второ мерси за Христо! Ето какво използвах:

perl -pi -e 's|SEDG|DIVX|m' S*.AVI # Replace SEDG with DIVX in S*.AVI

and voila, it is working!

Тази команда сменя SEDG с DIVX във файловете с имена S*.AVI

С тази промяна във файловете, всички плеъри работят и филмите направени със Самсунга могат да се гледат и чуват :)

Написа Георги Чорбаджийски (www) на 24-Oct-2005 08:31


There is no such thing as SEDG codec. Samsung in their infinite wisdom, put SEDG indentifier instead of DIVX in the files. The files are encoded with standart DivX codec.

Basically, to watch movies shoot by Miniket in any player that supports DivX, it is enough to edit AVI file in some HEX editor, replaceing the text SEDG with DIVX (it is found 1 or two times in the first 1Kb of the file).

Hope this helps english speaking visitors of this page.

Написа Георги Чорбаджийски (www) на 16-Mar-2006 19:24