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


 
Mots clés :  
  bash 
  
  general 
  
  linux 
  
  macos 
    >   Articles connexes :

Chiffrement multicouche



HTTP Download



Pourquoi le Macbook Pro 2017 ?



Cheat SHeet OpenSSL



Comment gagner du temps sur Internet



/tmp et /var/log en noexec sur macOS



2041181