Hallo,
ich habe mir mal ein kleines Skript geschrieben zum automatischen Testen von den beiden Hauptparametern von x264: crf und preset
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | #!/bin/bash CROP=x:x:x:x for CRF in `seq 40 -1 1` do I=0 for PRESET in ultrafast superfast veryfast faster fast medium slow slower veryslow placebo do echo "––––––––––––––––––––––––––––––––––––––––––––––––––––––" echo " Encoding: crf=$CRF, preset=$PRESET" echo "––––––––––––––––––––––––––––––––––––––––––––––––––––––" MENCODEROP=preset=$PRESET:tune=film:profile=high:crf=$CRF /usr/bin/time -p -o bla -a mencoder test.mkv -nosub -vf pullup,softskip,crop=$CROP,harddup -nosound -ovc x264 -x264encopts $MENCODEROP -of rawvideo -o test.264 2>&1 | tee bla echo "<Tags>" > tagmovie.xml echo " <Tag>" >> tagmovie.xml echo " <Simple>" >> tagmovie.xml echo " <Name>ENCODER</Name>" >> tagmovie.xml echo " <String>x264</String>" >> tagmovie.xml echo " <TagLanguage>und</TagLanguage>" >> tagmovie.xml echo " <DefaultLanguage>1</DefaultLanguage>" >> tagmovie.xml echo " </Simple>" >> tagmovie.xml echo " <Simple>" >> tagmovie.xml echo " <Name>ENCODER_SETTINGS</Name>" >> tagmovie.xml echo " <String>$MENCODEROP</String>" >> tagmovie.xml echo " <TagLanguage>und</TagLanguage>" >> tagmovie.xml echo " <DefaultLanguage>1</DefaultLanguage>" >> tagmovie.xml echo " </Simple>" >> tagmovie.xml echo " <Simple>" >> tagmovie.xml echo " <Name>COMMENT</Name>" >> tagmovie.xml sed -n '/^Videostream/,$p' bla | sed '1s,^, <String>,;$s,$,</String>,' >> tagmovie.xml echo " <TagLanguage>und</TagLanguage>" >> tagmovie.xml echo " <DefaultLanguage>1</DefaultLanguage>" >> tagmovie.xml echo " </Simple>" >> tagmovie.xml echo " </Tag>" >> tagmovie.xml echo "</Tags>" >> tagmovie.xml mkvmerge -o "test.$CRF.$I-$PRESET.mkv" --tags 0:tagmovie.xml test.264 ./psnr-video.sh test.mkv "test.$CRF.$I-$PRESET.mkv" "" "-vf crop=$CROP" mv psnr.dat test.$CRF.$I-$PRESET.psnr.dat I=$(($I+1)) done done |
Der Crop-Wert muss noch angepasst werden, vernünftige Werte sind z.B. durch:
mplayer test.mkv -vf cropdetect=50:2
herauszufinden.
test.mkv ist das Input-Video. Die ganzen Dateien werden im Ordner erstellt, wo das Skript aufgerufen wird. Temporäre Dateien werden nicht gelöscht. psnr-video.sh wird mit mplayer mitgeliefert (ob unter Ubuntu auch, weiß ich nicht). Damit das Skript funktioniert entweder den Pfad anpassen oder ins aktuelle Verzeichnis kopieren. Die 40 und 1 in der ersten for-Schleife bezeichnen die Spanne der crf-Raten, die kodiert werden. Gerade crf=1 kann sehr lange dauern, zumal bei placebo. Die for-Schleifen also ggf. anpassen.
Features vom Skript:
Automatisches Testen von allen möglichen Kombinationen von crf und preset von x264
x264-Ausgabe wird im Tag des entstehenden Matroskavideos gespeichert
Encoding-Zeit wird im Tag des entstehenden Matroskavideos gespeichert
Vergleich des Originalvideos und des neuen per PSNR. Die ermittelten Werte werden in einer separaten ...psnr.dat Datei gespeichert.
Viel Spaß damit. Falls ihr etwas daran verbessert, postet das bitte wieder hier, damit andere auch etwas davon haben.
Edit: Fehler im crop-Parameter der Filterkette beseitigt
2004 – 2012 ubuntuusers.de • Einige Rechte vorbehalten