Portál AbcLinuxu, 2. května 2025 07:49
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í.
Tiskni
Sdílej:
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.