Dienstag, Januar 14, 2014

Libav avconv / FFmpeg Konfiguration

Libav vs. FFmpeg

Warum Libav? Ich habe Debian installiert und da ist eben avconv von Libav drauf. Ich bin aber nicht auf avconv festgelegt, wenn mir ffmpeg später besser gefallen sollte, dann gehe ich auf ffmpeg. Derzeit sind avconv und ffmpeg so nahe beieinander, dass ich keine gravierende Unterschiede feststellen kann. Die folgenden Anleitung funktioniert derzeit sowohl mit ffmpeg als auch mit avconv.

Konvertierung

Mit VDR speichere ich eine MPEG2-Transportstream (.ts) ab. Dieser Stream ist ziemlich groß! Die Datei soll verkleinert werden, genauer gesagt in MPEG4 (.mp4) konvertiert werden. Das geht mit FFmpeg bzw. Libav.

Konvertierung in iPad-fähiges MP4

Basisparameter, die ich jedesmal setze:

avconv (Programmaufruf)
  -i "concat:00001.ts|00002.ts" (Eingabedateien, Transportstreams können einfach aneinander gehängt werden)
  -y (existierenden Datei überschreiben)
  -strict experimental (experimentelle Algorithmen können genutzt werden)
  -acodec aac (Audio-Codec AAC)
    -ac 2 (2 Audio-Kanäle = Stereo?)
    -ab 160k (Audio-Bitrate 160k)
  -vcodec libx264 (Video-Codec x264)
    -crf 20 (Qualität bei konstanter Bitrate, voreingestellt 23, praktisch verlustfrei 18)
    -preset slow (Qualität des Algorithmus, voreingestellt medium)
    -profile:v baseline -level 30 (Ausgabeformat, welches von iPad unterstützt wird)
  -f mp4 (Containerformat)
  output.mp4 (Ausgabedatei)

Schwarze Ränder abschneiden

cropdetect

Manchmal füllt das Bild den Bildschirm nicht komplett aus, sondern oben / unten ist ein schwarzer Streifen. Die folgenden Parameter nehmen einen Ausschnitt des Film und ermitteln daran die Parameter, mit welchen der Bildausschnitt festgelegt wird.

Zuerst konvertiere ich nur wenige Minuten des kompletten Films um die Parameter zu ermitteln.

-ss 00:15:00 (Offset in HH:MM:SS)
-t 00:03:00 (Dauer in HH:MM:SS)
-vf "cropdetect=24:16:0" (Videofilter mit Schwellwerten für die Schwarz-Erkennung)

crop

Mit den zuvor ermittelten Parametern, wird dann der komplette Film konvertiert.

-vf "crop=720:448:0:64" (Videofilter mit Breite und Höhe des Bildes sowie Offset von links und oben)

Tune-Parameter

 In diesem Parameter kann man nochmal die Art des zu konvertierenden Videos präzisieren:
-tune animation|film (Ich verwende derzeit nur animation)

SD vs. HD

Die zuvor genannten Parameter gelten für SD-Filme. Mit einer Bildrate 25 fps und einer Auslösung, kleiner als HD.

Für HD muss die Bildrate von 50 fps auf 25 fps reduziert werden und das Bild kann mit Faktor 0.5 skaliert werden. Die genauen Parameter muss ich noch ermitteln.

Links

Anleitungen

FFmpeg x264 Anleitung
https://trac.ffmpeg.org/wiki/x264EncodingGuide

Schwarze Ränder abschneiden (cropdetect / crop)
http://www.renevolution.com/understanding-ffmpeg-part-iii-cropping/

Skalierung (scaling)
http://www.renevolution.com/understanding-ffmpeg-part-ii-scaling-video/

Optimierung (tune)
http://superuser.com/questions/564402/explanation-of-x264-tune

Referenzen

avconv Documentation
http://libav.org/avconv.html

ffmpeg Documentation
http://ffmpeg.org/ffmpeg.html

Keine Kommentare: