Portál AbcLinuxu, 2. května 2025 07:49

Kvalitnější flash video pomocí ffmpegu

21.4.2007 21:49 | Přečteno: 2961× | Linux | Výběrový blog | poslední úprava: 27.4.2007 20:32

Trochu si hraju s videem na webu, je to taky trochu má práce, nicméně toto se jí až tak netýká. Chtěl jsem si zkusit publikovat flash na webu v nějakém přehrávači a zjistit o kolik je výsledná kvalita horší, než u WMV9 videa. Už jsem kdysi flash zkoušel, ale kvalita i VP6 mě docela zklamala, tentokrát jsem to zkusil trochu víc.

Pro převody videa používám program ffmpeg, ten zatím nedovoluje enkódovat do formátu VP6 (a v dohledné době asi ani nebude), jen staré formáty flash video 6 (jestli jsem to zjistil správně), kvalita je dost mizerná, nicméně se dá pár parametry relativně slušně zlepšit. Hledal jsem dlouho parametry, které by měly vliv na kvalitu výsledného flv videa, na webu jsem nic přímo pro převod do flv nenašel, zkoušel jsem tedy používat parametry, které byly na webu například pro kodek h.264.

Po pár hodinách hledání, porovnávání a zkoušení jsem nalezl parametry, díky kterým flv video v ffmpegu vypadá o něco lépe. Používám různé datové toky a rozlišení, pro 3 různé typy výstupů. Následuje bashový skript, který používám pro převod jednoho videa (ve formátu mpeg) do 3 různě kvalitních flv videí.

#!/bin/bash                                                                                                                                              
                                                                                                                                                         
AUDIO_LOW="-acodec mp3 -ab 32k -ac 1 -ar 22050"                                                                                                          
VIDEO_LOW="-f flv -deinterlace -nr 500 -croptop 4 -cropbottom 4 -cropleft 8 -cropright 8 -s 160x120 -aspect 4:3 -r 25 -b 100k"                           
AUDIO_MIDDLE="-acodec mp3 -ab 48k -ac 1 -ar 44100"                                                                                                       
VIDEO_MIDDLE="-f flv -deinterlace -nr 500 -croptop 4 -cropbottom 4 -cropleft 8 -cropright 8 -s 320x240 -aspect 4:3 -r 25 -b 270k"                        
AUDIO_HIGH="-acodec mp3 -ab 64k -ac 2 -ar 44100"                                                                                                         
VIDEO_HIGH="-f flv -deinterlace -nr 500 -croptop 4 -cropbottom 4 -cropleft 8 -cropright 8 -s 640x480 -aspect 4:3 -r 25 -b 650k"                          
PARAM="-me_range 25 -i_qfactor 0.71 -g 500"  

if [ -f "$1" ]; then                                                                                                                                     
    ffmpeg -i "$1" $AUDIO_LOW $VIDEO_LOW $PARAM -pass 1 -y "low_`echo $1 | cut -d. -f1`.flv"                                                             
    ffmpeg -i "$1" $AUDIO_LOW $VIDEO_LOW $PARAM -pass 2 -y "low_`echo $1 | cut -d. -f1`.flv"                                                             
    ffmpeg -i "$1" $AUDIO_MIDDLE $VIDEO_MIDDLE $PARAM -pass 1 -y "middle_`echo $1 | cut -d. -f1`.flv"                                                    
    ffmpeg -i "$1" $AUDIO_MIDDLE $VIDEO_MIDDLE $PARAM -pass 2 -y "middle_`echo $1 | cut -d. -f1`.flv"                                                    
    ffmpeg -i "$1" $AUDIO_HIGH $VIDEO_HIGH $PARAM -pass 1 -y "high_`echo $1 | cut -d. -f1`.flv"                                                          
    ffmpeg -i "$1" $AUDIO_HIGH $VIDEO_HIGH $PARAM -pass 2 -y "high_`echo $1 | cut -d. -f1`.flv"  
fi

Pár kometářů: Pro co nejnižší datový tok audia a zároveň co nejlepší kvalitu audia používám pro kvality low a middle mono, je to mnohem lepší, než stereo, hlavně pokud se použije vzorkovací frekvence 44,1kHz. Video je prokládané, takže je třeba provést deinterlace, zároveň pro dosažení lepší komprese je lepší provést i odstranění šumu, v tomto případě trochu silnějšího (normálně používám 300-400 pro h264), video má často zbytečně navíc nějaká prázdná místa nahoře, dole a po stranách, ty oříznu.

Pro přehrávání na webu používám přehrávač Flash Video Player ve verzi 3.7

Přidávám ještě pár obrázků pro porvnání kvality, rozdíl mezi obrázky byl jen v tom, že jsem pro druhé obrázky odstranil ze skriptu $PARAM, nechám tu zobrazit jen kvalitu middle. Výsledná videa byla přibližně stejně velká (rozdíl cca 1%).

Pokud se chcete podívat i na videa, tak jsem udělal pokusnou stránku, kterou mam jen pro testy a dlouho k dispozici nebude.

Do budoucna bych chtěl zkusit používat playlisty, tj. pomocí nějakého xml souboru nechat přehrávat jen určíté části jednoho souboru, nebo streaming který by neposílal celé video co nejrychleji a tak nepřetěžoval server, a nakonec ještě posun na určitou pozici bez nahrávání celého flashe, to už nějaký flash přehrávač umí.

       

Hodnocení: 100 %

        špatnédobré        

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

Komentáře

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

Skeletonix avatar 22.4.2007 09:56 Skeletonix | skóre: 18 | Praha
Rozbalit Rozbalit vše Re: Kvalitnější flash video pomocí ffmpegu
Odpovědět | Sbalit | Link | Blokovat | Admin
super
20.5.2009 13:44 MatoStik
Rozbalit Rozbalit vše Re: Kvalitnější flash video pomocí ffmpegu
Odpovědět | Sbalit | Link | Blokovat | Admin

Dekuji za skvely prispevek. Jen je skoda, ze jiz nefunguji obrazky pro porovnani.

Zkusil jsem to tedy na svem videu a vysledek? - vyborny. Kvalita zustala +/- stejna, ale velikost se snizila na 60%. Jedna se o zavody RC modelu aut, takze tam je hodne rychleho pohybu, tak jsem to drive resil vyssim bitrate.

Drive jsem pouzival:
Závod 3.5.2009
/usr/local/bin/ffmpeg -i 'zavod.mpg' -vhook '/usr/local/lib/vhook/watermark.so -f wm.gif' -ar 44100 -f flv -s 640x480 -b 1500k -minrate 1500k -maxrate 1500k -bufsize 1835k -y 'zavod.flv'

A nyni:
Závod 17.5.2009 - komentář Milda
/usr/local/bin/ffmpeg -i 'zavod.mpg' -vhook '/usr/local/lib/vhook/watermark.so -f wm.gif' -acodec mp3 -ab 64k -ac 1 -ar 44100 -f flv -nr 500 -s 640x480 -r 25 -b 850k -me_range 25 -i_qfactor 0.71 -g 500 -pass 1 -y 'zavod.flv'
/usr/local/bin/ffmpeg -i 'zavod.mpg' -vhook '/usr/local/lib/vhook/watermark.so -f wm.gif' -acodec mp3 -ab 64k -ac 1 -ar 44100 -f flv -nr 500 -s 640x480 -r 25 -b 850k -me_range 25 -i_qfactor 0.71 -g 500 -pass 2 -y 'zavod.flv'

Jen pro vygenerovani nahledoveho obrazku se novy flv nehodi. Upravil jsem tedy, ze se nahledovy obrazek generuje z originalniho videa:
/usr/local/bin/ffmpeg -ss 00:00:05 -an -i 'zavod.mpg' -vhook '/usr/local/lib/vhook/watermark.so -f wm.gif' -s 640x480 -f mjpeg -t 0.001 -y 'zavod.flv.jpg'
 

Jeste jednou diky :).

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