Re: MP4 Video reduzieren
Le samedi 13 janvier 2018, 22:55:48 CET Manfred Schmitt a écrit :
> Michelle Konzack schrieb:
> > ich versuche vergeblich ein 150 Sekunden Video von 1920x1080 mit 280 MB
> > <http://rustam.alak.tdhome.net/the_accident.html> auf 960x540 und weniger
> > als 30MByte zu kompremieren, scheitere aber daran.
> >
> > Kann mir bitte jemand ein geeignetes Befehlszeilentool plus die Parameter
> > sagen, das dies ein einem Stück macht?
>
> Das beste Ergebnis kriegste mittels 2-pass Encoding, siehe ffmpeg-wiki:
> http://trac.ffmpeg.org/wiki/Encode/H.264
>
> Bitrate ausrechnen:
> $ echo "(30*8192/150)-128" | bc
> 1510
>
> Also:
> ffmpeg -y -i "./accident_car_camera_2:30min.mp4" -c:v libx264 -b:v 1510k
> -pass 1 -s 960x540 -c:a copy -f mp4 /dev/null ffmpeg -y -i
> "./accident_car_camera_2:30min.mp4" -c:v libx264 -b:v 1510k -pass 2 -s
> 960x540 -c:a copy out.mp4
>
> OK, dann ist es doch etwas groesser als 30 MByte, also vielleicht 1500k
> nehmen.
>
> Und wech,
> Manne
Hallo,
ich benutze folgendes Skript:
==========
#!/bin/bash
if [ -z $1 ] ; then
cat <<EOF
Script d'encodage de fichier. La syntaxe est
Encode.sh Fichier_du_film.extension Options
Les options sont
DVD n: DVD n ième chapitre du DVD
Dir rep: Le miroir du DVD est dans rep
Opts o: Lecture avec les optiosn o
Fvid f: filtrage video (defaut scale=640:496), ça peut permettre de
rajouter des bandes (expand=0:-100:50:50), etc.
Fson f: filtrage son (defaut rien, mono: mode=3)
Bson n: fixe le bitrate du son à n. (defaut 64)
Bvid n: fixe le bitrate video au lieu qu'il soit calculé
Passe p: indique la passe (0, 1 ou 2, S) défaut 0.
CD n: nombre de CDs 700M voulus (défaut 1).
Taille n: Taille de n MBs (remplace CD).
Avc p: passe des options, (typiquement Avc aspect=16/9)
Haut n: Precise la hauteur en pixel (496 par defaut)
Larg n: Precise la largeur en pixel (680 par defaut)
Garde: laissé seul cela indique que le format (hauteur et largeur) est
conservé
Cine: Format 16/9
Tele: Format 4/3
Auto: Detection Format
Srt f: Sous titres fichiers f
EOF
exit 0
fi
NOM=`echo $1 | sed -e 's/\..*//'`
echo $NOM
FILMORG=$1
FILM=../$1
shift
mkdir $NOM.tmp
cd $NOM.tmp
BOUCLE=Go
PASSE=0
CHOIXBITRATE="?"
FILTRE=
RATESON=64
NBCD=1
TAILLE=
OPTIONS=
SRT=
FSON=
#AVCOPTS=":aspect=4/3"
AVCOPTS=
LARGEUR=640
HAUTEUR=496
JOUE="mplayer -vo null -ao null -frames 1 "
if [ -f BITRATE ] ; then BITRATE=`cat BITRATE` ; fi
while [ $BOUCLE == Go ] ; do
if (echo $1 | grep DVD) > /dev/null ; then
shift
FILM=" dvd://$1"
echo "DVD chapitre: $FILM"
shift
elif (echo $1 | grep Dir) > /dev/null ; then
shift
FILM=" -dvd-device ../$1 "$FILM
echo "DVD chapitre: $FILM"
shift
elif (echo $1 | grep Opts) > /dev/null ; then
shift
OPTIONS=$1
echo "Options: $OPTIONS"
shift
elif (echo $1 | grep Fvid) > /dev/null ; then
shift
FILTRE=$1
echo Filtre video: $FILTRE
#expand=0:-100:50:50,scale=640:480
shift
elif (echo $1 | grep Bson) > /dev/null ; then
shift
RATESON=$1
echo Bitrate Son: $RATESON
shift
elif (echo $1 | grep Bvid) > /dev/null ; then
shift
BITRATE=$1
echo Bitrate Video: $BITRATE
CHOIXBITRATE=Fait
shift
elif (echo $1 | grep Passe) > /dev/null ; then
shift
PASSE=$1
echo Passe: $PASSE
shift
elif (echo $1 | grep Taille) > /dev/null ; then
shift
TAILLE=$1
echo Taille voulue: $TAILLE MB
shift
elif (echo $1 | grep Fson) > /dev/null ; then
shift
FSON=:$1
shift
elif (echo $1 | grep CD) > /dev/null ; then
shift
NBCD=$1
echo Nbre CDs: $NBCD
shift
elif (echo $1 | grep Avc) > /dev/null ; then
shift
AVCOPTS=":"$1
echo Options AVC: $AVCOPTS
shift
elif (echo $1 | grep Srt) > /dev/null ; then
shift
SRT="-sub "$1" -ffactor 10 -subfont-autoscale 1 -subfont-encoding unicode
-subcp latin1"
echo Sous titres: $SRT
shift
elif (echo $1 | grep Haut) > /dev/null ; then
shift
HAUTFORCE=$1
echo Hauteur Forcee: $HAUTFORCE
shift
elif (echo $1 | grep Larg) > /dev/null ; then
shift
LARGFORCE=$1
echo Largeur Forcee: $LARGFORCE
shift
elif (echo $1 | grep Garde) > /dev/null ; then
shift
KEEPFORMAT=1
FORMAT=Auto
elif (echo $1 | grep Cine) > /dev/null ; then
shift
FORMAT=16/9
elif (echo $1 | grep Tele) > /dev/null ; then
shift
FORMAT=4/3
elif (echo $1 | grep Auto) > /dev/null ; then
shift
FORMAT=Auto
else
BOUCLE=Stop
fi
done
echo Passe: $PASSE
echo VBirate: $BITRATE
echo SBitrate: $RATESON
echo FILTRE: $FILTRE
echo Son: $FSON
$JOUE $FILM > Format 2> /dev/null
HAUTBIS=`cat Format | grep "^VO:.*=>" | tail -n 1 | sed -e 's/^.* \([0-9]*\)x
\([0-9]*\).*=>.*$/\2/'`
LARGBIS=`cat Format | grep "^VO:.*=>" | tail -n 1 | sed -e 's/^.* \([0-9]*\)x
\([0-9]*\).*=>.*$/\1/'`
HAUTJOUE=`cat Format | grep "^VO:.*=>" | tail -n 1 | sed -e 's/^.*=> \([0-9]*
\)x\([0-9]*\) .*$/\2/'`
LARGJOUE=`cat Format | grep "^VO:.*=>" | tail -n 1 | sed -e 's/^.*=> \([0-9]*
\)x\([0-9]*\) .*$/\1/'`
#LAVINFO=`which lavinfo`
#pwd
#if [ ! -z $LAVINFO ] ; then
# HAUTBIS=`$LAVINFO $FILM 2> /dev/null | grep video_height | sed -e 's/
^.*=//'`
# LARGBIS=`$LAVINFO $FILM 2> /dev/null | grep video_width | sed -e 's/
^.*=//'`
if [ x$FORMAT = "xAuto" ] ; then
if grep -q -E "Movie-Aspect is [0123456789]" Format ; then
FORMAT=`grep "Movie-Aspect is [0123456789]" Format | grep "Movie-Aspect
is " | sed -e 's/^·*Movie-Aspect is \(.*\):1.*$/\1/'`
else
FORMAT=`expr $LARGJOUE \* 100 / $HAUTJOUE | sed -e 's/\(..\)$/.\1/'`
fi
echo Format: $FORMAT
fi
echo $LARGBIS x $HAUTBIS
if [ ! -z $KEEPFORMAT ] ; then
if [ ! -z $HAUTBIS ] ; then
HAUTEUR=$HAUTBIS
fi
if [ ! -z $LARGBIS ] ; then
LARGEUR=$LARGBIS
fi
fi
#fi
if [ ! -z $HAUTFORCE ] ; then
HAUTEUR=$HAUTFORCE
fi
if [ ! -z $LARGFORCE ] ; then
LARGEUR=$LARGFORCE
fi
echo Format: $LARGEUR x $HAUTEUR
if `echo $FILTRE | grep -q scale > /dev/null` ; then
echo Filtre forcé utilisé: $FILTRE
elif [ -z $FILTRE ] ; then
FILTRE=scale=$LARGEUR:$HAUTEUR
else
FILTRE=$FILTRE:scale=$LARGEUR:$HAUTEUR
fi
echo Filtre utilisé: $FILTRE
if [ ! -z $FORMAT ] ; then
if `echo $AVCOPTS | grep -q aspect > /dev/null` ; then
echo Format défini dans les options Avc
else
AVCOPTS=$AVCOPTS":aspect="$FORMAT
fi
fi
echo Format: $AVCOPTS
RESULTAT=../E_$NOM.avi
if [ $PASSE == "0" ] ; then
if [ -f frameno.avi ] ; then
rm frameno.avi
fi
mencoder $FILM $SRT $OPTIONS -ovc frameno -vf $FILTRE -oac mp3lame -
lameopts vbr=3:br=$RATESON:q=0$FSON -o frameno.avi | tee Son
PASSE=1
if [ -f Son ] ; then
if [ -z $TAILLE ] ; then
if `grep -q "Recommended video bitrate" Son` ; then
if [ $NBCD == "2" ] ; then
BITRATEOPTIMAL=`grep "bitrate for 2 x 700" Son | sed -e '1,$s/.* \
([^ ]*\)$/\1/'`
else
BITRATEOPTIMAL=`grep "bitrate for 700" Son | sed -e '1,$s/.* \([^
]*\)$/\1/'`
fi
echo $BITRATEOPTIMAL > BITRATE
else
if [ $NBCD == "2" ] ; then
BITRATEOPTIMAL=`grep "itrate.*CD 2 x 700" Son | sed -e '1,$s/.* \
([^ ]*\)$/\1/'`
else
BITRATEOPTIMAL=`grep "itrate.*CD 700" Son | sed -e '1,$s/.* \([^ ]*
\)$/\1/'`
fi
echo $BITRATEOPTIMAL > BITRATE
fi
else
TAILLEVOULUE=$[$TAILLE*1024*1024]
TAILLESON=`cat Son | grep -E "^Audio" | awk '{print $8}'`
DUREEVIDEO=`cat Son | grep -E "^Video" | awk '{print $10}' | tr . , |
sed -e 's/,.*$//'`
DUREEVIDEO=$[$DUREEVIDEO+1]
TAILLEVIDEO=$[$TAILLEVOULUE-$TAILLESON]
FLUX=`expr $TAILLEVIDEO / $DUREEVIDEO `
echo $[$FLUX/125] > BITRATE
fi
fi
fi
if [ $PASSE == "S" ] ; then
if [ ! $CHOIXBITRATE == "Fait" ] ; then
if [ -f frameno.avi ] ; then
rm frameno.avi
fi
mencoder $FILM $SRT $OPTIONS -ovc frameno -vf $FILTRE -oac mp3lame -
lameopts vbr=3:br=$RATESON:q=0$FSON -o frameno.avi | tee Son
fi
if [ -f Son ] ; then
if [ -z $TAILLE ] ; then
if `grep -q "Recommended video bitrate" Son` ; then
if [ $NBCD == "2" ] ; then
BITRATEOPTIMAL=`grep "bitrate for 2 x 700" Son | sed -e '1,$s/.* \
([^ ]*\)$/\1/'`
else
BITRATEOPTIMAL=`grep "bitrate for 700" Son | sed -e '1,$s/.* \([^
]*\)$/\1/'`
fi
echo $BITRATEOPTIMAL > BITRATE
else
if [ $NBCD == "2" ] ; then
BITRATEOPTIMAL=`grep "itrate.*CD 2 x 700" Son | sed -e '1,$s/.* \
([^ ]*\)$/\1/'`
else
BITRATEOPTIMAL=`grep "itrate.*CD 700" Son | sed -e '1,$s/.* \([^ ]*
\)$/\1/'`
fi
echo $BITRATEOPTIMAL > BITRATE
fi
else
TAILLEVOULUE=$[$TAILLE*1024*1024]
TAILLESON=`cat Son | grep -E "^Audio" | awk '{print $8}'`
DUREEVIDEO=`cat Son | grep -E "^Video" | awk '{print $10}' | tr . , |
sed -e 's/,.*$//'`
DUREEVIDEO=$[$DUREEVIDEO+1]
TAILLEVIDEO=$[$TAILLEVOULUE-$TAILLESON]
FLUX=`expr $TAILLEVIDEO / $DUREEVIDEO `
echo $[$FLUX/125] > BITRATE
fi
fi
fi
if [ $CHOIXBITRATE == "?" ] ; then
if [ -f BITRATE ] ; then BITRATE=`cat BITRATE` ; fi
fi
if [ $PASSE == "1" ] ; then
mencoder $FILM $SRT $OPTIONS -nosound -ovc lavc -vf $FILTRE -lavcopts
vcodec=mpeg4:vpass=1:vbitrate=$BITRATE:turbo$AVCOPTS -ffourcc DIVX -o
$RESULTAT
PASSE=2
fi
if [ $PASSE == "2" ] ; then
## Passe 2
mencoder $FILM $SRT $OPTIONS -oac mp3lame -lameopts vbr=3:br=
$RATESON:q=0$FSON -ovc lavc -vf $FILTRE -lavcopts
vcodec=mpeg4:vpass=2:vbitrate=$BITRATE:vhq:v4mv:trell$AVCOPTS -ffourcc DIVX -
o $RESULTAT
fi
if [ $PASSE == "S" ] ; then
## Une seule passe
mencoder $FILM $SRT $OPTIONS -oac mp3lame -lameopts vbr=3:br=
$RATESON:q=0$FSON -ovc lavc -vf $FILTRE -lavcopts vcodec=mpeg4:vbitrate=
$BITRATE:vhq:v4mv:trell$AVCOPTS -ffourcc DIVX -o $RESULTAT
fi
cd ..
=======
von einem Franzosen gemacht und teils auf frz. Reduziert Videos auf knapp 700
MB, ich stelle nachher keinen Qualitätsverlust fest. Gefunden habe ich es auf
der frz. Debian-user Liste.
Ich bearbeite manchmal Videos mit avidemux. Kann avidemux die Datei nicht
öffnen, lasse ich encode drüberlaufen, und dann geht's.
Du kannst das Skipt ja eventuell an deine Bedürfnisse anpassen.
tschüss
Klaus
Reply to: