Video encoding
Revision as of 01:19, 2 March 2008 by <bdi>PhilippeTeuwen</bdi> (talk | contribs)
Converted with HTML::WikiConverter::MediaWiki from my old phpwiki site
Pour créer ses DIVX et VCD
DIVX (en 2 passes) :
VERSION 0.6.1
# Script pour faire les divx de bonne qualite generalement en 2 CD # note: pour le debut et la fin d'encodage , il faut editer le script # ce sera corrige dans la prochaine version ;-) J-Ch # note : ayant eu des problemes avec les version successives de mplayer # j'ai "arrete" la version a "0.90rc3-2.95.4" # version 0.6.1 - 26/04/2033 - Oli (Olivier at skycode.org) # Some bug fixing : # 1) looping around every time something is interactively # asked to the user to prevent the script from exiting # and having to do the rest manually # note : there is still some work to do on values checking # version 0.6 - 25/04/2033 - Oli (Olivier at skycode.org) # # version 0.5 - J-Ch (dorian at be.linux.org) # # versions anterieures bulshit ;-) # Script usage : # # mdivx.sh -endpos 0:00:00 -ss 0:00:00 -audiochannel 128 -xscale 640 -yscale 480 # -audiobitrate 128 -videobitrate 1200 file.vob out.avi usage="mdivx.sh -e 0:00:00 -s 0:00:00 -a audichannel -x 640 -y 480\n-u audiobitrate -v videobitrate file.vob out.avi" # Some defaults audiochanneldef="128" xscaledef="640" yscaledef="480" audiobitratedef="128" videobitratedef="1200" # Option parsing while getopts ":e:s:a:x:y:u:v:" option do echo $option echo $OPTARG case "$option" in "e") endpos=$OPTARG ;; "s") ss=$OPTARG ;; "a") audiochannel=$OPTARG ;; "x") xscale=$OPTARG ;; "y") yscale=$OPTARG ;; "u") audiobitrate=$OPTARG ;; "v") videobitrate=$OPTARG ;; *) echo "Wrong option somewhere usage :\n" echo $usage exit 1 esac done echo $OPTIND let a=$OPTIND-1 shift $a echo $1 # Let's sort out all those variable and set up some defaults if not specified by user if [ "$endpos" ] then endpos="-endpos $endpos" else endpos="" fi echo $endpos if [ "$ss" ] then ss="-ss $ss" else ss="" fi echo $ss if [ "$audiochannel" ] then audiochannel="-aid $audiochannel" else audiochannel="-aid $audiochanneldef" fi echo $audiochannel if [ "$xscale" ]&&[ "$yscale" ] then scaling="-vop scale=$xscale:$yscale" else scaling="-vop scale=$xscaledef:$yscaledef" fi echo $scaling if [ "$audiobitrate" ] then : else audiobitrate=$audiobitratedef fi echo $audiobitrate echo $videobitrate if [ -z "$1" ]||[ -z "$2" ] then echo "Missing file, usage " echo $usage exit 2 elif [ "$1" = "$2" ] then echo "Same name for source and destination !!!" printf "\a" # beep ! ;-) exit 3 fi echo "" echo "================================================================================" echo "+ DO SOUND +" echo "================================================================================" echo "" echo "si la langue n'est pas bonne : -aid 128-160 et -v => donnera la lists language" echo "ou -alang fr ????" if [ -e frameno.avi ] then while [ true ] do echo "frameno.avi exist ! what do I do now ?" echo "" echo "c = Continue without make sound" echo "d = Delete frameno.avi" echo "e = exit " echo "" read TMPVAR case $TMPVAR in e) exit 1 ;; d) rm frameno.avi mencoder $ss $endpos -ovc frameno $audiochannel -oac mp3lame -lameopts cbr:br=$audiobitrate -o frameno.avi $1 break ;; c) break ;; *) echo "Answer must be something of c, d, or e, try again :-)" echo "" continue ;; esac done else mencoder $ss $endpos -ovc frameno $audiochannel -oac mp3lame -lameopts cbr:br=$audiobitrate -o frameno.avi $1 fi if [ "$videobitrate" ] then : else while [ true ] do echo "" echo "" echo "Sound encoded, mplayer has suggested to you some bitrate for video" echo "choose to enter it manually or to use script default ($videobitratedef)" echo "" echo "Note : if you specify a video bitrate (with -v option) to this script" echo "it won't ask you this question" echo "" echo "***********************************************************************" echo "* 1) Use script default ($videobitratedef) *" echo "* 2) Enter manually video bitrate now *" echo "***********************************************************************" # It would be nice to extract mencoder suggestion and give it user :-) echo "" echo "Your choice :" read TMPVAR echo "" case $TMPVAR in 1) videobitrate=$videobitratedef echo "continuing with script default" break ;; 2) echo "enter video bitrate :" echo "" read BITRATE echo "" videobitrate=$BITRATE echo "continuing with $videobitrate as video bitrate" echo "" break ;; *) echo "choose one of the menu option !! try again :-)" echo "" continue esac done fi # mkfifo teste.wav # rm frameno.avi # mencoder -audiofile teste.wav -ovc frameno -o frameno.avi -oac mp3lame # -lameopts abr:br=128 -aid 128 $1 & # mplayer -vo null -ao pcm -aofile teste.wav $1 # rm teste.wav echo "" echo "================================================================================" echo "+ DO Video Pass 1 +" echo "================================================================================" echo "" mencoder $ss $endpos -oac copy -o /dev/null -ovc lavc -lavcopts vcodec=mpeg4:vbitrate="$videobitrate":vhq:vpass=1 $scaling $1 echo "" echo "================================================================================" echo "+ DO Video Pass 2 +" echo "================================================================================" echo "" mencoder $ss $endpos -oac copy -o $2 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate="$videobitrate":vhq:vpass=2 $scaling $1
Quelques modifs au script de J-Ch pour les divx (j'ai pas touche a celui pour les VCDs) VERSION 0.6
Il y a encore plein de truc qu'on pourrait implementer et il faudrait ecrire une petite doc, sorry j'ai pas eu le temps :-(
VERSION 0.6 (J-ch + Oli)
# Script pour faire les divx de bonne qualite generalement en 2 CD # note: pour le debut et la fin d'encodage , il faut editer le script # ce sera corrige dans la prochaine version ;-) J-Ch # note : ayant eu des problemes avec les version successives de mplayer # j'ai "arrete" la version a "0.90rc3-2.95.4" # version 0.6 - Oli (Olivier at skycode.org) # version 0.5 - J-Ch (dorian at be.linux.org) # versions anterieures bulshit ;-) # Script usage : # # mdivx.sh -endpos 0:00:00 -ss 0:00:00 -audiochannel 128 -xscale 640 -yscale 480 # -audiobitrate 128 -videobitrate 1200 file.vob out.avi usage="mdivx.sh -e 0:00:00 -s 0:00:00 -a audichannel -x 640 -y 480\n-u audiobitrate -v videobitrate file.vob out.avi" # Some defaults audiochanneldef="128" xscaledef="640" yscaledef="480" audiobitratedef="128" videobitratedef="1200" # Option parsing while getopts ":e:s:a:x:y:u:v:" option do echo $option echo $OPTARG case "$option" in "e") endpos=$OPTARG ;; "s") ss=$OPTARG ;; "a") audiochannel=$OPTARG ;; "x") xscale=$OPTARG ;; "y") yscale=$OPTARG ;; "u") audiobitrate=$OPTARG ;; "v") videobitrate=$OPTARG ;; *) echo "Wrong option somewhere usage :\n" echo $usage exit 1 esac done echo $OPTIND let a=$OPTIND-1 shift $a echo $1 # Let's sort out all those variable and set up some defaults if not specified by user if [ "$endpos" ] then endpos="-endpos $endpos" else endpos="" fi echo $endpos if [ "$ss" ] then ss="-ss $ss" else ss="" fi echo $ss if [ "$audiochannel" ] then audiochannel="-aid $audiochannel" else audiochannel="-aid $audiochanneldef" fi echo $audiochannel if [ "$xscale" ]&&[ "$yscale" ] then scaling="-vop scale=$xscale:$yscale" else scaling="-vop scale=$xscaledef:$yscaledef" fi echo $scaling if [ "$audiobitrate" ] then : else audiobitrate=$audiobitratedef fi echo $audiobitrate echo $videobitrate if [ -z "$1" ]||[ -z "$2" ] then echo "Missing file, usage " echo $usage exit 2 elif [ "$1" = "$2" ] then echo "Same name for source and destination !!!" printf "\a" # beep ! ;-) exit 3 fi echo "" echo "================================================================================" echo "+ DO SOUND +" echo "================================================================================" echo "" echo "si la langue n'est pas bonne : -aid 128-160 et -v => donnera la lists language" echo "ou -alang fr ????" if [ -e frameno.avi ] then echo "frameno.avi exist ! what to do ?"; echo "c = Continue without make sound ; d = Delete frameno.avi ; e= exit "; read TMPVAR case $TMPVAR in "") ;; e) exit 1 ;; d) rm frameno.avi mencoder $ss $endpos -ovc frameno $audiochannel -oac mp3lame -lameopts cbr:br=$audiobitrate -o frameno.avi $1 ;; c) ;; *) exit 4 ;; esac else mencoder $ss $endpos -ovc frameno $audiochannel -oac mp3lame -lameopts cbr:br=$audiobitrate -o frameno.avi $1 fi if [ "$videobitrate" ] then : else echo "" echo "" echo "Sound encoded, mplayer has suggested to you some bitrate for video" echo "choose to enter it manually or to use script default ($videobitratedef)" echo "" echo "Note : if you specify a video bitrate (with -v option) to this script" echo "it won't ask you this question" echo "***********************************************************************" echo "* 1) Use script default ($videobitratedef) *" echo "* 2) Enter manually video bitrate now *" echo "***********************************************************************" # It would be nice to extract mencoder suggestion and give it user :-) echo "" echo "Your choice :" read TMPVAR echo "" case $TMPVAR in 1) videobitrate=$videobitratedef echo "continuing with script default" ;; 2) echo "enter video bitrate :" echo "" read BITRATE echo "" videobitrate=$BITRATE echo "continuing with $videobitrate as video bitrate" echo "" ;; *) echo "error choose 1 or 2" exit 4 #un peu brutal, faudrait laisser une seconde chance esac fi # mkfifo teste.wav # rm frameno.avi # mencoder -audiofile teste.wav -ovc frameno -o frameno.avi -oac mp3lame # -lameopts abr:br=128 -aid 128 $1 & # mplayer -vo null -ao pcm -aofile teste.wav $1 # rm teste.wav echo "" echo "================================================================================" echo "+ DO Video Pass 1 +" echo "================================================================================" echo "" mencoder $ss $endpos -oac copy -o /dev/null -ovc lavc -lavcopts vcodec=mpeg4:vbitrate="$videobitrate":vhq:vpass=1 $scaling $1 echo "" echo "================================================================================" echo "+ DO Video Pass 2 +" echo "================================================================================" echo "" mencoder $ss $endpos -oac copy -o $2 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate="$videobitrate":vhq:vpass=2 $scaling $1
VERSION 0.5 (J-ch)
# Script pour faire les divx de bonne qualite generalement en 2 CD # note: pour le debut et la fin d'encodage , il faut editer le script # ce sera corrige dans la prochaine version ;-) J-Ch # note : ayant eu des problemes avec les version successives de mplayer # j'ai "arrete" la version a "0.90rc3-2.95.4" # version 0.5 - J-Ch (dorian at be.linux.org) # versions anterieures bulshit ;-) # Parametre : end position # decommenter la 1ere ou la 2eme ligne suivant que l'on veut ou # non terminer l'encodage a telle position #endpos="-endpos 0:41:20"; endpos="" # Parametre : debut position # decommenter la 1ere ou la 2eme ligne suivant que l'on veut ou # non debuter l'encodage a telle position # note importante : ne correspond en rien avec la -endpos .. faut y aller au pif ! #ss="-ss 0:41:20" ss="" # parametre obsolete .. crop=""; #crop="-vop crop=714:428:0:74" # Parametre : selection audio channel AID="129" let BITRATE=1350 if [ -z "$1" ]||[ -z "$2" ] then echo "usage : mdivx.sh files.vob out.avi (bitrate)" else if [ "$1" = "$2" ] then echo "Same name for source and destination !!!" printf "\a" # beep ! ;-) exit 1 fi if [ -z "$3" ] then echo "default bitrate use: $BITRATE" else let BITRATE=$3 echo "Configured bitrate :$BITRATE" fi echo "" echo "================================================================================" echo "+ DO SOUND +" echo "================================================================================" echo "" echo "si la langue n'est pas bonne : -aid 128-160 et -v => donnera la lists language" echo "ou -alang fr ????" if [ -e frameno.avi ] then echo "frameno.avi exist ! what to do ?"; echo "c = Continue without make sound ; d = Delete frameno.avi ; e = exit "; read TMPVAR case $TMPVAR in "") ;; e) exit 1 ;; d) rm frameno.avi mencoder.divx $ss -ovc frameno -aid $AID -oac mp3lame -lameopts abr:br=128 -o frameno.avi $endpos $1 ;; c) ;; *) exit 1 ;; esac else mencoder.divx $ss -ovc frameno -aid $AID -oac mp3lame -lameopts abr:br=128 -o frameno.avi $endpos $1 fi #mkfifo teste.wav #rm frameno.avi #mencoder -audiofile teste.wav -ovc frameno -o frameno.avi -oac mp3lame -lameopts abr:br=128 -aid 128 $1 & #mplayer -vo null -ao pcm -aofile teste.wav $1 #rm teste.wav echo "" echo "================================================================================" echo "+ DO Video Pass 1 +" echo "================================================================================" echo "" mencoder.divx $ss -oac copy -o /dev/null -ovc lavc -lavcopts vcodec=mpeg4:vbitrate="$BITRATE":vhq:vpass=1 $crop $endpos $1 echo "" echo "================================================================================" echo "+ DO Video Pass 2 +" echo "================================================================================" echo "" mencoder.divx $ss -oac copy -o $2 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate="$BITRATE":vhq:vpass=2 $crop $endpos $1 fi
VCD (1 passe)
#!/bin/bash # script pour la creadtion d'u fichier compatible VCD if [ -z "$1" ]||[ -z "$2" ] then echo "usage : mvcd.sh file.vob file.mpg (channel:128-160)"; exit 1 fi if [ -e stream.wav ] then rm stream.wav; mkfifo stream.wav; else mkfifo stream.wav fi if [ -e stream.yuv ] then rm stream.yuv; mkfifo stream.yuv; else mkfifo stream.yuv fi # selection audio channel let AID="129" if [ -z "$3" ] then echo ""; echo "using default channel: 129 !"; else let AID=$3 fi echo "==============================================================================================" echo "= Do audio & vido Files =" echo "==============================================================================================" echo "";echo " Systeme de transformation ? (default 16:9)" echo " a - 16:9 | b - 16:9 -> letterbox | c - normal" echo " other -> exit " read TMPVAR case $TMPVAR in "") WIDE="-M WIDE2STD" ;; a) WIDE="-M WIDE2STD" ;; b) WIDE="-M WIDE2VCD" ;; c) WIDE="" ;; *) exit 1 ;; esac cat stream.yuv| yuvscaler $WIDE -M BICUBIC -O VCD |mpeg2enc -f 2 -b 1150 -o vcd.video.mpg & cat stream.wav | sox -c 2 -s -r 48000 -w -t raw - -r 44100 -t wav - | toolame -m s -e -b 224 - vcd.audio.mp2 & mplayer $1 -vo yuv4mpeg -aid $AID -ao pcm -aofile stream.wav -waveheader rm stream.yuv rm stream.wav echo "==============================================================================================" echo "= DO MIXING =" echo "==============================================================================================" mplex -v 1 -f 1 -o $2 vcd.video.mpg vcd.audio.mp2 exit 0
Pour sauver un flux
- mplayer -dumpstream -dumpfile ....vmw mms://...
- mencoder mms://... -o ....wmv -oac copy -ovc copy