Videokonvertierung

FFMPEG mit libfaac Unterstützung

zum Beispiel unter Fedora 16

siehe auch: http://tinkerance.blogspot.ch/2012/11/getting-ffmpeg-to-work-with-libfaac-on.html

su
yumdownloader --source ffmpeg
rpm -ivh ffmpeg-0.8.12-1.fc16.src.rpm
yum install     celt-devel libass-devel libcdio-devel libmodplug-devel libv4l-devel \
  libXvMC-devel openal-soft-devel openjpeg-devel pulseaudio-libs-devel
yum install bzip2-devel dirac-devel faac-devel  gsm-devel lame-devel libdc1394-devel \
  librtmp-devel libtheora-devel libva-devel libvdpau-devel libvorbis-devel libvpx-devel \
  schroedinger-devel SDL-devel speex-devel texi2html x264-devel  xvidcore-devel  yasm
rpmbuild -ba ~/rpmbuild/SPECS/ffmpeg.spec --with faac

oder in vi ~/rpmbuild/SPECS/ffmpeg.spec

    —enable-libfaac \\
    —enable-nonfree \\

rpm -Uhv /root/rpmbuild/RPMS/i686/ffmpeg-libs-0.8.12-1.fc16.i686.rpm
rpm -Uhv /root/rpmbuild/RPMS/i686/ffmpeg-0.8.12-1.fc16.i686.rpm

FFMPEG Anwendung

Informationen aus der Videodatei

Die Beispieldatei, die im weiteren Verlauf dieses kurzen Artikels verwendet wird, weist folgende Eigenschaften auf: 1 Videokanal, 4 Audiokanäle und 1 Untertitelkanal.

ffmpeg -i VTS_06_1.VOB

Input #0, mpeg, from 'VTS_06_1.VOB':
  Duration: 00:37:32.70, start: 0.049756, bitrate: 3813 kb/s
    Stream #0.0[0x1e0]: Video: mpeg2video (Main), yuv420p, 720x576 [PAR 64:45 DAR 16:9], 9800 kb/s, 25 fps, 25 tbr, 90k tbn, 50 tbc
    Stream #0.1[0x83]: Audio: ac3, 48000 Hz, stereo, s16, 192 kb/s
    Stream #0.2[0x82]: Audio: ac3, 48000 Hz, stereo, s16, 192 kb/s
    Stream #0.3[0x81]: Audio: ac3, 48000 Hz, 5.1, s16, 448 kb/s
    Stream #0.4[0x80]: Audio: ac3, 48000 Hz, 5.1,
s16, 448 kb/s
    Stream #0.5[0x24]: Subtitle: dvdsub

Voreinstellungen

Die Voreinstellungen (presets) von ffmpeg befinden sich in /usr/share/ffmpeg. Neuere Versionen als 0.8.2 von ffmpeg kennen weitere Voreinstellungen. Sie können z.B. mit -vpre lossless_fast eingebunden werden.

  • libx264-baseline.ffpreset
  • libx264-ipod640.ffpreset
  • libx264-lossless_fast.ffpreset

Die verschiedenen Optionen für libx264 finden sich hier: MeGUI/x264 Settings. Weitere Seiten:

Notation

NEU: ffmpeg -i input -c:v libx264 -preset baseline Output.mkv
ALT: ffmpeg -i input -vcodec libx264 -vpre baseline Output.mkv

libx264 - mp4

cat VTS_02_1.VOB VTS_02_2.VOB VTS_02_3.VOB VTS_02_4.VOB | \
ffmpeg -i - -acodec libfaac -vcodec libx264 -crf 21  -threads 4 Output.mp4

oder

ffmpeg -i concat:VTS_02_1.VOB\|VTS_02_2.VOB\|VTS_02_3.VOB\|VTS_02_4.VOB \
-acodec libfaac -vcodec libx264 -crf 21  -threads 4 Output.mp4

-crf -> Videoqualität, je kleiner crf ist, desto besser die Qualität (vernünftig zwischen 18-28)

http://ffmpeg.org/trac/ffmpeg/wiki/x264EncodingGuide
http://videoencoding.websmith.de/encoding-praxis/linux-ffmpeg-encoding.html

mpeg4 - mp4

Wer noch das ältere mp4 verwenden möchte:

cat VTS_02_1.VOB VTS_02_2.VOB VTS_02_3.VOB VTS_02_4.VOB | \
ffmpeg -i - -acodec libfaac -vcodec q -metadata title="Titel des Films" Output.mp4

libx264 - mkv mit Audiostreams und Untertitel

Mapping channels: http://howto-pages.org/ffmpeg/#map

ffmpeg -i concat:VTS_06_1.VOB\|VTS_06_2.VOB -vcodec libx264 -crf 21 \
-acodec libfaac -threads 4 -scodec copy  \
-metadata title="Titel des Films" \
Output.mkv -map 0.0 -map 0.3 -map 0.5 -map 0.4 -newaudio

Tonspuren (Audiostreams)

ffmpeg -i Input.VOB -vcodec copy -acodec copy Output.mkv -map 0.3 -map 0.4 -newaudio

Untertitel

ffmpeg -i Input.VOB -vcodec copy -acodec copy -scodec copy Output.mkv \ 
-map 0.3 -map 0.4 -map 0.5 -newaudio

Metadaten aus Film (mp4) entfernen

ffmpeg -i Film-mit-Metadaten.mp4 -map_metadata -1 \
-c:v copy -c:a copy Film-ohne-Metadaten.mp4

Simple Konvertierung nach mp4

ffmpeg -i Film.wmv -c:v libx264 -crf 23  -strict -2 Film.mp4

(Die Option -strict -2 wird evtl. benötigt damit mit .h264 nach mp4 konvertiert werden kann.) Oder auch mit Angaben zur Audiokodierung:

ffmpeg -i Film.wmv -c:v libx264 -crf 23 -c:a libfaac -q:a 100 Film.mp4

Zweil Teile eines Films zusammenfügen

Input-Teil1.avi und Input-Teil2.avi im aktuellen Verzeichnis, sonst ./ mit dem Pfad ersetzen. Es kann jedes beliebige Videoformat (besser: Container) benutzt werden, das ffmpeg kennt:

echo "file './Input-Teil1.avi'" >Liste.txt
echo "file './Input-Teil2.avi'" >>Liste.txt
ffmpeg -f concat -i Liste.txt -c copy Output.avi

oder direkt:

ffmpeg -i concat:Input-Teil1.mp4\|Input-Teil2.mp4 -c copy Output.mp4

alternativ mit avimerge oder menconder:

yum install transcode mencoder

avimerge -i Input-Teil1.avi Input-Teil2.avi -o Output.avi

mencoder -ovc copy -oac copy Input-Teil?.mp4 -o Output.mp4

Untertitel zusammenfügen

.srt

Erst die Software dazu installieren:

yum install subtitleripper

Die Dateien sind Film-A-Teil-1.avi mit Film-A-Teil-1.srt und Film-A-Teil-2.avi mit Film-A-Teil-2.srt. Ziel ist Film-A mit Film-A.srt

Die Länge des 1. Teils finden:

ffmpeg -i Input-Teil-1.avi

Duration: 01:04:12.43, start: 0.000000, bitrate: 1499 kb/s

Dann die Texte des 2. Untertitels um diese Dauer verschieben. Es kann sein, dass man die Zeitangaben etwas anpassen muss. Man kontrolliert am Schluss das Ergebnis ab dem angefügten Teil, ob ab dann die Untertitel noch zu den Stimmen passen:

srttool -a 01:04:23,43 -i  Input-Teil-2.srt > Input-Teil-2neu.srt

Teil 1 und 2 zusammenfügen und anschliessend die Untertitel darin neu ordnen. Die beiden Filmteile hat man gemäss obigen Angaben bereits zu Output.mp4 (oder .avi) zusammengefügt:

cat Input-Teil-1.srt Input-Teil-2neu.srt > Output-tmp.srt
srttool -r -i Output-tmp.srt > Output.srt

Weiteres zu Untertiteln siehe: http://virtuallyhyper.com/2013/09/combine-vobsub-subidx-format-subtitles-single-subrip-srt-format-file/