Portál AbcLinuxu, 1. května 2025 03:27

Video na PDA (h.264)

9.8.2008 09:45 | Přečteno: 1973× | audio/video | poslední úprava: 9.8.2008 18:46

Nedávno jsem si koupil nový komunikátor HTC Touch Diamond a snad jako každý uživatel jsem si na něj chtěl nahrát také nějaké filmečky.

Jelikož je tohle HTC osazeno poměrně výkonným procesorem, ale zato omezeným úložištěm, začal jsem uvažovat o možnosti video kompresovat kodekem h.264 resp. jeho opensource verzí x.264. První testy nedopadly moc přesvědčivě, video jsem upravoval v Avidemuxu a výsledek byl poměrně tristní. Potom jsem zkusil totéž zdrojové video upravit v mencoderu a výsledek předčil moje očekávání. Hledal jsem na netu nějaký hotový scriptík, který by po upravě vyhovoval mým požadavkům,ale žáden mi 100% "nepasoval" a tak jsem si napsal script vlastní. Určitě by šel napsat lépe, ale nejsem programátor a "spíchnul" jsem jej celkem rychle - nicméně vše je funkční a scriptík dělá přesně to co jsem od něj očekával. Tedy:

-vytvoří adresář "pda"
-vyhledá v aktuálním adresáři všechny A/V soubory 
-vypíše je na konzoli 
-zjístí framerate zdrojového videa
-vyhledá titulky se schodným jménem jako film a pokud existují tak je do filmu vloží
-dvou průchodové kódování do x.264 se správným "zmenšením" pro display PDA (320:x), audio dekomprese na  PCM 44,1khz 16 bit 
-split audia a videa
-normalizace hlasitosti audia na maximální možnou , ovšem ještě bez limitace 
-komprese zvuku do ogg/vorbis
-mux videa a audia do kontejneru Matroška a uložení v adresáři "pda"  
-úklid všech dočasných souborů 
Výsledné video lze přehrávat na HTC Diamondu naprosto bez problému a výsledky benchmarku v přehrávači Core media Player se pohybují mezi 135 až 155 % -takže pohodička. Velikost celovečerního filmu ve velmi slušné kvalitě se zvukem 64Kbit-mono se pohybuje někde kolem 120 až 140MB (S tebou mně baví svět 128MB ) Hodinový seriál od cca 75MB až asi do 105MB . Takže tady je ten můj "výtvor"-předpokládám, že bude fachčit bez problému po doinstalování všech závislých programů a editaci cesty k truetype fontu pro titulky.Script upraven !! -audio se nyní dekomprimuje na PCM při druhém průchodu komprese videa a již netrpí problémem s desynchronizací videa a audia při nekorektním zdrojovém souboru (-vf scale,harddup -tohle řeší problém synchronizace při muxu do MKV ) !

#!/bin/bash
mkdir pda
# Pro uspesny beh scriptu jsou zapotrebi tyto programy:
# mencoder, ffmpeg, tcprobe, normalize-audio, oggenc, mkvmerge 
####################################################### 

#Nastaveni pozadovaneho  bitrate videa:

BITRATE=150

#Nastaveni zpracovani zvuku - odkomentovat radek s pozadovanymi parametry !

#ZVUK="oggenc audiodump.wav -b 128 -o audiodump.ogg"
ZVUK="oggenc audiodump.wav -b 64 --downmix -o audiodump.ogg"


clear




echo ""
echo "V adresari nalezeny pro zpracovani tyto soubory:"
echo ""
find  -maxdepth 1   -iname '*.avi' -or -iname '*.mpg' -or -iname '*.mpeg' -or -iname '*.wmv'| while read info ; do
echo "     - $info"
echo 
echo ""
done
echo Pokracuji za 3 sekuny
sleep 3   




find  -maxdepth 1   -iname '*.avi' -or -iname '*.mpg' -or -iname '*.mpeg' -or -iname '*.wmv'| while read soubor ; do

clear


FILM=${soubor%.*}

echo ""
echo  Zahajuji kompresi filmu "$FILM" kodekem x264 a rozlisenim 320:x se zvukem ogg/Vorbis do kontejneru Matroska !
### Zjisteni frameratu videa ###

framerate=`tcprobe -i "$soubor"  |grep "frame rate"|awk '{print $4}' `

echo Detekovan framerate: $framerate
echo ""	  
echo "Prvy pruchod"
echo ""	

sleep 3

clear
##### First Pass ######

mencoder "$soubor" \
  -subcp cp1250 \
    -subfont-text-scale 3.5 \
    -nosound \
       -vf scale,harddup \
        -zoom \
	 -xy 320 \
	  -ovc x264\
	  -x264encopts bitrate=$BITRATE:subq=5:bframes=3:b_pyramid:weight_b:turbo=1:threads=auto:pass=1 \
	   -o "/dev/null"

clear	   
echo ""	  
echo "Druhy pruchod"
echo ""	
### Second pass ###
echo " "
echo " "
sleep 2
if [ -e "$FILM".sub ] ; then
echo "Detekovany titulky .sub"
mencoder "$soubor" \
	-vf scale,harddup \
	-subcp cp1250 \
	-subfont-text-scale 3.5 \
        -zoom \
	-xy 320 \
	-ovc x264\
	-x264encopts bitrate=$BITRATE:subq=5:8x8dct:frameref=2:bframes=3:b_pyramid:weight_b:threads=auto:pass=2 \
	-oac pcm \
	-srate 44100 \
	-af lavcresample=44100 \
	-font /usr/share/fonts/truetype/msttcorefonts/Verdana.ttf \
	-sub "$FILM.sub"  \
		


elif [ -e "$FILM".srt ] ; then
echo "Detekovany titulky .srt"
mencoder "$soubor" \
	-vf scale,harddup \
	-subcp cp1250 \
	-subfont-text-scale 3.5 \
        -zoom \
	-xy 320 \
	-ovc x264\
	-x264encopts bitrate=$BITRATE:subq=5:8x8dct:frameref=2:bframes=3:b_pyramid:weight_b:threads=auto:pass=2 \
	-oac pcm \
	-srate 44100 \
	-af lavcresample=44100 \
	-o video.temp \
	-font /usr/share/fonts/truetype/msttcorefonts/Verdana.ttf \
	-sub "$FILM.srt" 
	
	

elif [ -e "$FILM".txt ] ; then
echo "Detekovany titulky .txt"
mencoder "$soubor" \
	-vf scale,harddup \
	-subcp cp1250 \
	-subfont-text-scale 3.5 \
        -zoom \
	-xy 320 \
	-ovc x264\
	-x264encopts bitrate=$BITRATE:subq=5:8x8dct:frameref=2:bframes=3:b_pyramid:weight_b:threads=auto:pass=2 \
	-oac pcm \
	-srate 44100 \
	-af lavcresample=44100 \
	-o video.temp \
	-font /usr/share/fonts/truetype/msttcorefonts/Verdana.ttf \
	-sub "$FILM.txt" 
	
else
echo "Nedetekovany titulky"
mencoder "$soubor" \
        -vf scale,harddup \
        -zoom \
	-xy 320 \
	-ovc x264 \
	-x264encopts bitrate=$BITRATE:subq=5:8x8dct:frameref=2:bframes=3:b_pyramid:weight_b:threads=auto:pass=2 \
	-oac pcm \
	-srate 44100 \
	-af lavcresample=44100 \
	-o video.temp
	
	
fi
clear
### Audio ### 
echo ""	  
echo "Split audia a videa"
echo ""	
ffmpeg -i video.temp   -acodec copy audiodump.wav -vcodec copy video.h264 < /dev/null
 
echo "Zesileni Audia"
normalize-audio -v --peak audiodump.wav 
echo ""	  
echo "Komprimace audia"
echo ""	
$ZVUK      
      
### Mux na MKV ###
#echo ""	  
#echo "MUX do Matrosky"
#echo ""	

 
mkvmerge --title "$FILM" -o pda/"$FILM-pda.mkv"  --default-duration 0:"$framerate"fps video.h264 audiodump.ogg 


rm -f *.log  >/dev/null
rm -f *.temp >/dev/null
rm -f *.ogg  >/dev/null
rm -f *.wav  >/dev/null
rm -f *.h264 >/dev/null
sleep 5
done 

	

       

Hodnocení: 67 %

        š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ář

9.8.2008 12:11 helb
Rozbalit Rozbalit vše Re: Video na PDA (h.264)
Odpovědět | Sbalit | Link | Blokovat | Admin

..., začal jsem uvažovat o možnosti video kompresovat kodekem h.264 resp. jeho opensource verzí x.264.

x264 je AFAIK knihovna pro práci s H.264, ne další kodek.

carnero avatar 9.8.2008 12:36 carnero | Praha
Rozbalit Rozbalit vše Re: Video na PDA (h.264)
Odpovědět | Sbalit | Link | Blokovat | Admin
320x? px pro Diamonda s VGA (640x480 px) displejem? Není to trochu škoda. Jinak za skript díky, určitě se hodí.
about:carnero
9.8.2008 12:47 M. Lox | skóre: 12
Rozbalit Rozbalit vše Re: Video na PDA (h.264)
Odpovědět | Sbalit | Link | Blokovat | Admin
Zvuk se s videem rozchází kvůli tvojí chybě, ne kvůli chybě videa – kóduješ zvuk samostatně místo naráz. Píše se to i v dokumentaci k mplayeru.
make menuconfig, not war!
9.8.2008 12:50 M. Lox | skóre: 12
Rozbalit Rozbalit vše Re: Video na PDA (h.264)
tady.
make menuconfig, not war!
9.8.2008 13:01 CZ_iceman | blog: cz_iceman | Ostrava
Rozbalit Rozbalit vše Re: Video na PDA (h.264)
Odpovědět | Sbalit | Link | Blokovat | Admin
Ok diky za nakopnutí k te AV resynchronizaci- tohle jsem skutecne prehlednul. Ridil jsem se jednim How-to na high quality 2 pass encoding s xvidem kde ta direktiva nosound byla take a proto jsem po tom dale nepatral-vyzkousim to a hned dam vedet. No a k tomu displeji: Myslim si ze i v rozliseni 320:x je video na PDA pomerne hodne slusne, ale staci jednoduchou upravou scriptu rozliseni zmenit (a pridat bitrate). Ovsem to si nejsem uz jisty ze bude stacit HTC plynule prehravat video v h.264 v rozliseni 640:x. Navic by film byl podstatne vetsi, ale kazdy ma jine pozadavky a jak jsem psal vyse neni problem zmenit ve skriptu to rozliseni....

Založit nové vláknoNahoru

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