Portál AbcLinuxu, 8. května 2024 21:35


Dotaz: Zjištění aspect ratio videa (ffmpeg/libavcodec)

limit_false avatar 22.8.2009 18:30 limit_false | skóre: 23 | blog: limit_false
Zjištění aspect ratio videa (ffmpeg/libavcodec)
Přečteno: 435×
Odpovědět | Admin
Přílohy:

Ahoj,

snažím se zjistit aspect ratio s ffmpeg (přes funkce v libavcodec), něco jak dělá následující příkaz:

mplayer -demuxer +lavf -identify -frames 0 -vo null -ao null -msglevel all=7 video_file.mp4 2>/dev/null | grep 'aspect='

Příklad výstupu:

aspect= 720*1024/(576*702)

 

Mplayer řádek s aspectem vypisuje v libmpdemux/demux_lavf.c:353 (svn revize 29463) a počítá následovně (pár řádků výše):

if(st->sample_aspect_ratio.num)
    sh_video->aspect = codec->width  * st->sample_aspect_ratio.num
         / (float)(codec->height * st->sample_aspect_ratio.den);
else
    sh_video->aspect=codec->width  * codec->sample_aspect_ratio.num
       / (float)(codec->height * codec->sample_aspect_ratio.den);

(st je AVStream*, codec je AVCodecContext*, obě z ffmpeg/libavcodec)

Když ale použiju stejný postup ve vlastním kódu, dostávám codec->sample_aspect_ratio.num == 0 (st->sample_aspect_ratio.num == 0, ale to i u mplayeru).

Zjevně něco chybí ale nevím co.

Zdroják viz příloha (řádek 86), případne highlightovaný zdroják (je to jenom mírně upraveno a zfunkčněno demo avcodec_sample.cpp z dokumentace ffmpegu). Link na problematické video (69 MB).

When people want prime order group, give them prime order group.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

22.8.2009 19:38 Andrej Herceg | skóre: 43
Rozbalit Rozbalit vše Re: Zjištění aspect ratio videa (ffmpeg/libavcodec)
Odpovědět | | Sbalit | Link | Blokovat | Admin
Niektoré kodeky (dokonca možno väčšina) potrebné údaje neposkytujú, takže okrem opravy tých kodekov s tým asi nič neurobíš.
limit_false avatar 22.8.2009 20:00 limit_false | skóre: 23 | blog: limit_false
Rozbalit Rozbalit vše Re: Zjištění aspect ratio videa (ffmpeg/libavcodec)

Vtip je v tom, že mplayer použije stejnou libavcodec ze stejného ffmpegu na stejném souboru a ty informace dostane. Někde něco dělá jinak.

When people want prime order group, give them prime order group.
22.8.2009 20:13 Andrej Herceg | skóre: 43
Rozbalit Rozbalit vše Re: Zjištění aspect ratio videa (ffmpeg/libavcodec)
Keď použijem ten tvoj príklad na to video, tak sa mi zobrazí:
[test@localhost 0]$ avcodec_sample dementni_posahane_video.mp4
[h264 @ 0x8053310]AVC: Consumed only 232 bytes instead of 238
[h264 @ 0x8053310]AVC: Consumed only 28 bytes instead of 34
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'dementni_posahane_video.mp4':
  Duration: 00:02:56.32, start: 0.000000, bitrate: 5 kb/s
    Stream #0.0(eng): Video: h264, yuv420p, 720x576 [PAR 1024:702 DAR 640:351], 25 tbr, 25k tbn, 50 tbc
    Stream #0.1(eng): Audio: aac, 48000 Hz, 2 channels, s16
Aspect: 1024/702, dtg: 0
##Using codec aspect
Pravdepodobne máš v Mplayer iné verziu libavcodec ako máš pri tom Ffmpeg.
limit_false avatar 22.8.2009 20:44 limit_false | skóre: 23 | blog: limit_false
Rozbalit Rozbalit vše Re: Zjištění aspect ratio videa (ffmpeg/libavcodec)

Ahá, díky moc. Jsem si vůbec nevšim v tom dlouhém výpisu z 'ldd mplayer', že se nelinkuje se systémovou libavcodec/libavformat, místo toho obsahuje v zdrojácích vlastní.

When people want prime order group, give them prime order group.
limit_false avatar 22.8.2009 23:27 limit_false | skóre: 23 | blog: limit_false
Rozbalit Rozbalit vše Re: Zjištění aspect ratio videa (ffmpeg/libavcodec)

Zjistit, s kterou verzí ffmpeg to funguje byl celkem záhul. Nakonec zabrala až ffmpeg z git HEAD (d707bdb494d7f258d0bc0ca10a2a33da0d97b562).

When people want prime order group, give them prime order group.
23.8.2009 00:11 Andrej Herceg | skóre: 43
Rozbalit Rozbalit vše Re: Zjištění aspect ratio videa (ffmpeg/libavcodec)
Mne to funguje s verziou z 24. 7. 2009 (verziu v Mplayer mám ešte o pár týždňov staršiu).
limit_false avatar 23.8.2009 00:50 limit_false | skóre: 23 | blog: limit_false
Rozbalit Rozbalit vše Re: Zjištění aspect ratio videa (ffmpeg/libavcodec)

To je zrovna tři týdny po 0.5. Vývojáři ffmpeg se moc na nějaké tagy nebo branche nehrajou ;-) . Mají tam jedinou branch 0.5, jinak se dá verze dohledat jedině podle data nebo revize.

When people want prime order group, give them prime order group.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.