Wffmpeg est un p'tit wizard (assistant/magicien :-P) pour ffmpeg et permet quelques conversions sans avoir à connaitre tous les paramètres par cœur.
0x01. wffmpeg
#!/bin/bash ## script ffmpeg: APP="$(basename $0)" APT_ERROR="Le programme 'ffmpeg' n'est pas installe actuellement. Vous pouvez l'installer en tapant : sudo port install ffmpeg sudo brew install ffmpeg sudo fink install ffmpeg $SHELL: ffmpeg : commande introuvable " VERBOSE=0 ffmpeg="$(which ffmpeg)" # [ -f "$ffmpeg" ] && echo -e "\\b\\b\\b Ok." [ ! -f "$ffmpeg" ] && _die "$APT_ERROR" function _die { E=1 ; [ $# -eq 2 ] && E=$2 printf "\\n\\e[1;31m * $1\\e[0m\\n\\n" exit $E } function _error { E=1 ; [ $# -eq 2 ] && E=$2 printf "\\n\\e[1;31m * $1\\e[0m\\n\\n" return $E } function _no { printf "\\e[1;31mNo!\\e[0m\\n\\n" return 1 } function __echo { printf "\\e[1;32m *\\e[0m $*" } function _echo { printf "\\n\\e[1;32m$*\\e[0m\\n" } function _ok { printf "\\b\\b\\b \\t\\e[1;29mOk.\\e[0m\\n" } function _ffmpeg() { E_MV_DST="" echo "$1" |grep -- '-ext' && E_MV_DST="$(echo $1|cut -d':' -f2)" [ ! -z "$E_MV_DST" ] && shift SAMEQ_O="" if [ -f "$F.$E_DST" ] ; then _echo "Converting '$F.$E_SRC' -> '$F.$E_DST'" _error "File alread exists." 1 return 1 fi _echo "Converting '$F.$E_SRC' -> '$F.$E_DST'" __echo "Seeking for ffmpeg..." if [ $SAMEQ -eq 1 ] ; then SAMEQ_O="-sameq" echo __echo "\\e[1;33mSame quality parameter set\\e[0m" printf ".\\n" fi __echo "Checking for suffisant disk space..." SD=$(df . | grep -E "/dev/disk...." | awk {'print $4'}) SF=$(ls -l "$F.$E_SRC" | awk {'print $5'}) DIFF=$((SD*1024-SF)) [ $DIFF -le 0 ] && _die "Insuffisant disk space" 3 printf "\\b\\b\\b Ok.\\n" t1=$(date +"%s") if [ $VERBOSE -eq 0 ] ; then if [ -f "$F.$E_DST" ] ; then __echo "Delete \\e[1;29m'$F.$E_DST'\\e[0m [y/N] ? " printf "\\e[1;32m" ; read rep ; printf "\\e[0m" [ "$rep" = "y" ] && rm -f "$F.$E_DST" [ "$rep" != "y" ] && _die "File already exists" 4 fi __echo "Converting file..." $ffmpeg -i "$F.$E_SRC" $SAMEQ_O $* "$F.$E_DST" >/dev/null 2>&1 & while [ "$(ps aux|grep -v grep|grep -q "$ffmpeg" && echo 0)" = "0" ] ; do sleep .5 done else echo ; __echo "Command :" printf " \\e[1;32m$ffmpeg -i \\"$F.$E_SRC\\" $SAMEQ_O $* \\"$F.$E_DST\\"\\e[0m\\n" __echo "\\e[1;33m"$(date +"%d/%m/%Y @ %H:%M:%S")"\\e[0m : converting file..." $ffmpeg -i "$F.$E_SRC" $SAMEQ_O $* "$F.$E_DST" & while [ "$(ps aux|grep -v grep|grep -q "$ffmpeg" && echo 0)" = "0" ] ; do sleep .5 done fi e=$? [ ! -z "$E_MV_DST" ] && mv "$F.$E_DST" "$F.$E_MV_DST" t2=$(date +"%s") h=$(( ($t2-$t1)/3600 )) m=$(( (($t2-$t1)-$h*3600)/60 )) s=$(( ((($t2-$t1)-$h*3600)-$m*60) )) t=$h"h "$m"m "$s"s" d=$(date +"%d/%m/%Y @ %H:%M:%S") if [ $VERBOSE -ne 0 ] ; then [ $e -eq 0 ] && printf "\\n\\e[1;32m * %s : done\\e[0m in\\e[1;33m %s \\e[0m\\n\\n" "$d" "$t" [ $e -ne 0 ] && printf "\\n\\e[1;31m * %s : failed \\e[0m\\n\\n" "$d" else [ $e -eq 0 ] && printf "\\b\\b\\b\\e[1;32m done\\e[0m in\\e[1;33m %s \\e[0m\\n\\n" "$t" [ $e -ne 0 ] && printf "\\b\\b\\b\\e[1;31m failed. \\e[0m\\n\\n" "$d" fi } function usage { file="file" E=1 ; [ $# -eq 2 ] && E=$2 printf " $APP - Easy encoding with \\e[1;29mffmpeg\\e[0m Usage: $APP <-h | --help> | <'action'> [-s][-v] <file> [file [file ...]]] -h | --help this sheet -s | --sameq don't apply same quality parameter to ffmpeg \\e[4;1;29mActions :\\e[0m\\e[0m 'avi -> dvd/mpg' ffmpeg -i $file.avi $file.mpg \\e[1;29m -target dvd\\e[0m 'avi -> pal/mpg' ffmpeg -i $file.avi $file.mpg \\e[1;29m -target pal-vcd\\e[0m 'avi -> ntsc/mpg' ffmpeg -i $file.avi $file.mpg \\e[1;29m -target ntsc-vcd\\e[0m 'avi -> hd/mpg' ffmpeg -i $file.avi $file.mpg \\e[1;29m -vcodec mpeg2video -b 894 -acodec mp2 -ab 256\\e[0m 'avi -> mp3' ffmpeg -i $file.avi $file.mp3 \\e[1;29m -vn -ar 44100 -ac 2 -ab 192k -f mp3\\e[0m 'avi -> flv' ffmpeg -i $file.avi $file.flv \\e[1;29m -ar 22050 -ab 32 -vcodec flv\\e[0m 'avi -> mpg' ffmpeg -i $file.avi $file.mpg \\e[1;29m -vcodec mpeg2video -acodec libmp3lame\\e[0m 'avi -> 3gp' ffmpeg -i $file.avi $file.3gp \\e[1;29m -vcodec h263 -r 25 -b 200 -ab 6.7k -acodec libamr_nb -ac 1 -ar 8000\\e[0m 'avi -> wmv' ffmpeg -i $file.avi $file.wmv \\e[1;29m -vcodec wmv1 -acodec adpcm_ima_wav\\e[0m 'flac -> mp3' ffmpeg -i $file.flac $file.mp3 \\e[1;29m-ab 196k -ac 2 -ar 48000\\e[0m 'flv -> 3gp' ffmpeg -i $file.flv $file.3gp \\e[1;29m -vcodec h263 -r 25 -b 200 -ab 6.7k -acodec libamr_nb -ac 1 -ar 8000\\e[0m 'flv -> avi' ffmpeg -i $file.flv $file.avi \\e[1;29m -f avi -acodec copy \\e[0m 'flv -> mpg' ffmpeg -i $file.flv $file.mpg \\e[1;29m -f mpeg -acodec copy \\e[0m 'flv -> mpeg' ffmpeg -i $file.flv $file.mpg \\e[1;29m -f mpeg -acodec mp2 \\e[0m 'flv -> mp4' ffmpeg -i $file.flv $file.mp4 \\e[1;29m -f mp4 -acodec copy \\e[0m 'flv -> mp3' ffmpeg -i $file.flv $file.mp3 \\e[1;29m -f mp3 -vn -ab128k\\e[0m 'flv -> swf' ffmpeg -i $file.flv $file.swf \\e[1;29m -f swf -acodec copy\\e[0m 'flv -> wmv' ffmpeg -i $file.flv $file.wmv \\e[1;29m -vcodec wmv1 -acodec adpcm_ima_wav\\e[0m 'ogg -> hd/mpg' ffmpeg -i $file.ogg $file.mpg \\e[1;29m -s 1024x768 -vcodec mpeg2video -b 894 -acodec mp2 -ab 256\\e[0m 'ogg -> avi' ffmpeg -i $file.ogg $file.avi \\e[1;29m -acodec-f avi -b 768k -ab 128k\\e[0m 'ogg -> mp3' ffmpeg -i $file.ogg $file.mp3 \\e[1;29m -f mp3 -ar 44100 -ab 128k -vn\\e[0m 'm4v -> flv' ffmpeg -i $file.m4v $file.flv \\e[1;29m -b 380k -ab 64k\\e[0m 'mp4 -> flv' ffmpeg -i $file.mp4 $file.flv \\e[1;29m -acodec copy -vcodec copy\\e[0m 'mp4 -> f4v' ffmpeg -i $file.mp4 $file.f4v \\e[1;29m -vcodec copy -idct h264 -acodec libfaac \\e[0m 'mpg -> flv' ffmpeg -i $file.mpg $file.flv \\e[1;29m -b 380k -ab 64k\\e[0m 'mpg -> mp3' ffmpeg -i $file.mpg $file.mp3 \\e[1;29m -f mp3 -vn -ab 128k\\e[0m 'mpg -> mp4' ffmpeg -i $file.mpg $file.mp4 \\e[1;29m -ac 1 -ab 256000 -f mp4 -acodec libfaac \\e[0m 'mpg -> wmv' ffmpeg -i $file.mpg $file.wmv \\e[1;29m \\e[0m 'm4a -> mp3' ffmpeg -i $file.m4a $file.mp3 \\e[1;29m -f mp3 -ab 128k \\e[0m 'm4r -> mp3' ffmpeg -i $file.m4r $file.mp3 \\e[1;29m -f mp3 -ab 128k \\e[0m 'mov -> swf' ffmpeg -i $file.mov $file.swf \\e[1;29m -acodec libmp3lame -f swf\\e[0m 'mov -> flv' ffmpeg -i $file.mov $file.swf \\e[1;29m -acodec libmp3lame\\e[0m 'mov -> hd/avi' ffmpeg -i $file.mov $file.avi \\e[1;29m -ar 44100 -ab 256 -acodec mp2 \\e[0m 'mov -> mpg' ffmpeg -i $file.mov $file.mpg 'mov -> mp4' ffmpeg -i $file.mov $file.mpg \\e[1;29m -f mp4 -vcodec copy -acodec copy\\e[0m 'mov -> mp3' ffmpeg -i $file.mov $file.mpg \\e[1;29m -f mp3 -ab 128k -vn\\e[0m 'mov -> h264/mp4' ffmpeg -i $file.mov $file.mpg \\e[1;29m -f mp4 -vcodec libx264 -ac 2 -b 5000k\\e[0m 'mp3 -> m4r' ffmpeg -i $file.mp3 $file.m4r \\e[1;29m -ac 1 -ab 128000 -f mp4 -acodec libfaac -y\\e[0m 'mp3 -> ogg' ffmpeg -i $file.mp3 $file.ogg \\e[1;29m -ac 1 -ab 128000 -f ogg\\e[0m 'mp4 -> avi' ffmpeg -i $file.mp4 $file.avi \\e[1;29m -f avi -acodec copy\\e[0m 'mp4 -> mp3' ffmpeg -i $file.mp4 $file.mp3 \\e[1;29m -f mp3 -vn\\e[0m 'mp4 -> mpg' ffmpeg -i $file.mov $file.mpg 'swf -> ogg' ffmpeg -i $file.swf $file.ogg \\e[1;29m -acodec libmp3lame -f ogg\\e[0m 'swf -> flv' ffmpeg -i $file.swf $file.flv \\e[1;29m -acodec libmp3lame\\e[0m 'vob -> mp3' ffmpeg -i $file.vob $file.mp3 \\e[1;29m -y -threads 2 -vn -f mp2 -acodec libmp3lame -ab 128 -ar 48000 -ac 2 -map 0.1:0.0\\e[0m 'wav -> m4r' ffmpeg -i $file.wav $file.m4r \\e[1;29m -ac 1 -ab 128000 -f mp4 -acodec libfaac -y\\e[0m 'wma -> mp3' ffmpeg -i $file.wma $file.mp3 \\e[1;29m -f mp3 -ab 128k -vn\\e[0m 'wmv -> flv' ffmpeg -i $file.wmv $file.flv \\e[1;29m -f flv -vcodec flv -r 12 -g 240 -ab 56 -acodec libmp3lame -ar 22050 -ac 2\\e[0m 'wmv -> ogg' ffmpeg -i $file.wmv $file.ogg \\e[1;29m -f ogg -vcodec copy\\e[0m \\e[4;1;29mExemple :\\e[0m $APP 'avi -> flv' myfile.avi $APP 'flv -> mp3' myfile1.flv myfile2.flv myfile3.flv $APP 'flv -> mpeg' '*.flv' \\n" exit $E } function convert { FILE="$2" ACTION="$1" [ ! -f "$FILE" ] && _die "Unable to read file : $FILE" 1 E_SRC=$(echo $FILE |grep -Po "(\\.\\w+)$" |cut -d'.' -f2) [ -z "$E_SRC" ] && _die "Unable to find file format" 2 F=$(echo $FILE |sed "s/\\.$E_SRC//") [ -z "$F" ] && _die "Check file's name" 3 case $ACTION in "avi -> dvd/mpg") E_DST="mpg" ; _ffmpeg -target dvd ;; "avi -> flv") E_DST="flv" ; _ffmpeg -ar 22050 -ab 32 -vcodec flv ;; "avi -> hd/mpg") E_DST="mpg" ; _ffmpeg -s 1024x768 -vcodec mpeg2video -b 894 -acodec mp2 -ab 256 ;; "avi -> pal/mpg") E_DST="mpg" ; _ffmpeg -target pal-vcd ;; "avi -> mp3") E_DST="mp3" ; _ffmpeg -vn -ar 44100 -ac 2 -ab 192k -f mp3 ;; "avi -> ntsc/mpg") E_DST="mpg" ; _ffmpeg -target ntsc-vcd ;; "avi -> mpg") E_DST="mpg" ; _ffmpeg -vcodec mpeg2video -acodec libmp3lame ;; "avi -> 3gp") E_DST="3gp" ; _ffmpeg -f mp3 -vcodec h263 -r 25 -s 176x144 -ab 6.7k ;; "avi -> wmv") E_DST="wmv" ; _ffmpeg -vcodec wmv1 -acodec adpcm_ima_wav ;; "flac -> mp3") E_DST="mp3" ; _ffmpeg -ab 196k -ac 2 -ar 48000 ;; "flv -> 3gp") E_DST="3gp" ; _ffmpeg -f mp3 -vcodec h263 -r 25 -s 176x144 -ab 6.7k ;; "flv -> avi") E_DST="avi" ; _ffmpeg -f avi -acodec copy ;; "flv -> mpg") E_DST="mpg" ; _ffmpeg -f mpeg -acodec copy ;; "flv -> mpeg") E_DST="mpeg"; _ffmpeg -f mpeg -acodec mp2 ;; "flv -> mp3") E_DST="mp3" ; _ffmpeg -f mp3 -ab 128k -vn ;; "flv -> mp4") E_DST="mp4" ; _ffmpeg -ac 1 -ab 128000 -f mp4 -acodec libfaac ;; "flv -> swf") E_DST="swf" ; _ffmpeg -acodec copy -vcodec copy -f swf ;; "flv -> wmv") E_DST="wmv" ; _ffmpeg -vcodec wmv1 -acodec libmp3lame ;; "ogg -> avi") E_DST="avi" ; _ffmpeg -b 768k -ab 128k -f avi ;; "ogg -> hd/mpg") E_DST="mpg" ; _ffmpeg -s 1024x768 -vcodec mpeg2video -b 894 -acodec mp2 -ab 256 ;; "ogg -> mp3") E_DST="mp3" ; _ffmpeg -f mp3 -vn -ar 44100 -ab 128k ;; "m4v -> flv") E_DST="flv" ; _ffmpeg -b 380k -ab 64k ;; "mp4 -> flv") E_DST="flv" ; _ffmpeg -acodec copy -vcodec copy ;; "mp4 -> f4v") E_DST="flv" ; _ffmpeg -ext:f4v -vcodec copy -idct h264 -acodec libfaac ;; "mp4 -> mpg") E_DST="wmv" ; _ffmpeg ;; "mpg -> flv") E_DST="flv" ; _ffmpeg -b 380k -ab 64k ;; "mpg -> mp3") E_DST="mp3" ; _ffmpeg -f mp3 -ab 128k -vn ;; "mpg -> mp4") E_DST="mp4" ; _ffmpeg -ac 1 -ab 256000 -f mp4 -acodec libfaac ;; "mpg -> wmv") E_DST="wmv" ; _ffmpeg ;; "mov -> swf") E_DST="swf" ; _ffmpeg -acodec libmp3lame -f swf ;; "mov -> flv") E_DST="flv" ; _ffmpeg -acodec libmp3lame ;; "mov -> mpg") E_DST="mpg" ; _ffmpeg -ar 44100 -ab 128k -acodec libmp3lame ;; "mov -> mp4") E_DST="mp4" ; _ffmpeg -f mp4 -vcodec copy -acodec copy ;; "mov -> mp3") E_DST="mp3" ; _ffmpeg -f mp3 -ab 128k -vn ;; "mp3 -> m4r") E_DST="m4r" ; _ffmpeg -ac 1 -ab 128000 -f mp4 -acodec libfaac ;; "mp3 -> ogg") E_DST="ogg" ; _ffmpeg -ac 1 -ab 128000 -f ogg ;; "m4a -> mp3") E_DST="mp3" ; _ffmpeg -f mp3 -vn -acodec libmp3lame -ab 128k ;; "m4r -> mp3") E_DST="mp3" ; _ffmpeg -f mp3 -ab 128k ;; "mov -> hd/avi") E_DST="avi" ; _ffmpeg -ar 44100 -ab 256 -acodec copy ;; "mov -> h264/mp4") E_DST="mp4" ; _ffmpeg -f mp4 -vcodec libx264 -ac 2 -b 5000k ;; "mp4 -> avi") E_DST="avi" ; _ffmpeg -f mpeg -acodec copy ;; "mp4 -> mp3") E_DST="mp3" ; _ffmpeg -f mp3 -ab 128k -vn ;; "mp4 -> wmv") E_DST="wmv" ; _ffmpeg -acodec libmp3lame ;; "swf -> ogg") E_DST="ogg" ; _ffmpeg -acodec libmp3lame -f ogg ;; "swf -> flv") E_DST="flv" ; _ffmpeg -acodec libmp3lame ;; "vob -> mp3") E_DST="mp3" ; _ffmpeg -threads 2 -vn -f mp2 -acodec libmp3lame -ab 128 -ar 48000 -ac 2 -map 0.1:0.0 -benchmark ;; "wav -> m4r") E_DST="m4r" ; _ffmpeg -ac 1 -ab 128000 -f mp4 -acodec libfaac ;; "wma -> mp3") E_DST="mp3" ; _ffmpeg -f mp3 -vn ;; "wmv -> flv") E_DST="flv" ; _ffmpeg -f flv -vcodec flv -r 12 -g 240 -ab 56 -acodec libmp3lame -ar 22050 -ac 2 ;; "wmv -> ogg") E_DST="ogg" ; _ffmpeg -f ogg ;; *) _die "Action '$ACTION' is not available." 1 ;; esac } [ $# -eq 1 ] && [ "$1" = "-h" -o "$1" = "--help" ] && usage 0 [ $# -lt 2 -o $# -gt 4 ] && usage 1 ACTION="$1" shift SAMEQ=1 if [ $# -ge 1 ] ; then [ "$1" = "-v" ] && VERBOSE=1 [ "$1" = "-s" ] && SAMEQ=0 [ "$1" = "-v" -o "$1" = "-s" ] && shift fi if [ $# -eq 1 ] ; then echo "$*" |grep -q '*' ; e=$? [ $e -ne 0 ] && [ ! -f "$*" ] && _die "File '$FILE' unavailable." find . -maxdepth 1 -type f -name "$*" |while read FILE ; do FILE="$(echo $FILE|sed 's/^\\.\\///1')" [ ! -f "$FILE" ] && _error "File '$FILE' unavailable." [ ! -f "$FILE" ] && break convert "$ACTION" "$FILE" done else for i in $(seq 1 $#) ; do FILE=$1 ; shift [ ! -f "$FILE" ] && _die "File '$FILE' unavailable." convert "$ACTION" "$FILE" done fi
0x02. ffmpeg-add-mp3
#!/bin/sh APP="$(basename $0)" usage() { echo " Usage: $APP <movie> <music> <output> [-s] -s : the output duration will be the shortest (may cut movie or music) Script will insert music in movie and write result in output. Output is a movie. Command :" echo '$ffmpeg -i "$movie" -i "$mp3" -vcodec copy -acodec copy "$out" -acodec copy -map 1:0 [-shortest]' echo exit 1 } if [ -z "$3" ]; then usage fi ffmpeg="/opt/local/bin/ffmpeg" movie="$1" mp3="$2" out="$3" [ $# -eq 4 ] && [ "$4" = "-s" ] && shortest="-shortest" [ $# -eq 4 ] && [ "$4" != "-s" ] && usage $ffmpeg -i "$movie" -i "$mp3" $shortest -vcodec copy -acodec copy "$out" -acodec copy -map 1:0
0x03. ffmpeg-change-speed
#!/bin/bash APP=$(basename $0) if [ $# -ne 3 ]; then echo " Usage : $APP <source> <speed> <destination> Exemple: $APP file.mov -3 file.flv " fi input=$1 output=$3 rate=25 dstrate=$2 if [ $dstrate -lt 0 ]; then dstrate=$((rate/dstrate*-1)) else dstrate=$((rate*dstrate)) fi echo ffmpeg -r $rate -i $input -r $dstrate $output -acodec copy -vcodec copy echo ffmpeg -r $rate -i $input -r $dstrate $output -acodec copy -vcodec copy
=> Écrit par : Nicolas, le 29 février 2016