Ich verwende nachfolgende Skripte für meine Videos, davon sind viele ältere Clips in einem Nicht-PAL Format wie z.b. 848x480 mikt 29,97fps vorhanden. Um diese in einem Video-Editor zusammen mit anderen Videos verwenden zu können, bietet es sich an, diese vorher mit FFMPEG umzuwandeln (engl. transkodieren). Da viele meiner Clips, die mit einer leichten Kamera aufgenommen wurden, ziemlich verwackelt sind, muss ich ab und an stabilisieren. Um alle diese Schritte - transkodieren und stabilisieren, zu verbinden, habe ich mir nachfolgende Skripte aufgebaut. Als Ausgabeformat habe ich einen Intermediate-Codec namens ProRes für die weitere, verlustlose Bearbeitung eingestellt. Dies kann natürlich jeder so ändern, wie er es braucht - als Alternative steht z.B. noch DnxHD zur Verfügung.
Wichtiger Hinweis: Nachteil solcher Intermediate-Codecs sind der beträchtliche Speicherbedarf - ein in h.264 kodiertes Video mit 10 MB wird damit locker auf die zehnfache Größe oder mehr aufgeblasen ! Vorteil: kein visueller Qualitätsverlust und schnelle Bearbeitung im Videoschnittprogramm.
Mit nachfolgenden Skripten lassen sich beliebige Videos transkodieren und/oder stabilisieren, dazu habe ich verschiedene gebräuchliche Parameter fest vorgegeben. Hier kann natürlich jeder weitere Werte hinzufügen oder vorhandene Werte ändern oder entfernen. Weitere Hilfen gibt es mit vidstab.sh bzw. bulkstab.sh ohne Parameter.
Bei den Skripten gebe ich zu bedenken, das ich kein Programmierer bin und mir das Ganze solange "zurechtgestümpert" habe, bis es funktionierte. Ich kann auch keine Garantie geben, das die Skripte auf einem anderen System funktionieren - von daher ist jeder aufgerufen, die Skripte gemäß seinen Vorstellungen anzupassen.
Legen wir los:
Schritt 1: FFMPEG installieren
Dazu müssen wir FFMPEG aus ppa:mc3man/trusty-media installieren mit
sudo add-apt-repository ppa:mc3man/trusty-media
sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-get install ffmpeg
Wichtig: Installationen aus einem PPA können immer Probleme bereiten. Wer hier unbedacht aus dem PPA installiert, kann sich leicht sein System zerschreddern. Also bitte erst nachdenken und dann installieren ! Ich selber habe ausschließlich ffmpeg und dessen Abhängigkeiten installiert - nicht mehr und nicht weniger.
Schritt 2: Nachfolgende Skripte in einem beliebigen Verzeichnis (z.B. unter /home/username/meineskripte) speichern.
Nachfolgenden Inhalt des Codeblocks unter vidstab.sh speichern und ausführbar machen
#!/bin/bash
#
VIDEOFILE=$1
KONVFLAG=0
SHAKERATE=5
FORMAT="PAL"
FRAMENAME="PAL"
FRAMERATE=25
FRAMESIZE="720x576"
ASPECTRATIO="16/9"
CROPPING="keep"
ACCRATE=15
#
if [ "$2" = "" ]; then
KONVFLAG=0
else
KONVFLAG=$2
fi
if [ "$3" = "" ]; then
SHAKERATE=5
else
SHAKERATE=$3
fi
if [ "$4" = "" ]; then
FORMAT="PAL"
else
FORMAT=$4
fi
if [ "$5" = "" ]; then
FRAMERATE=25
else
FRAMERATE=$5
fi
if [ "$FORMAT" = "PAL" ]; then
FRAMESIZE="720x576"
FRAMENAME="PAL"
elif [ "$FORMAT" = "720" ]; then
FRAMESIZE="1280x720"
FRAMENAME="720P"
elif [ "$FORMAT" = "1080" ]; then
FRAMESIZE="1920x1080"
FRAMENAME="1080P"
else
FRAMESIZE="720x576"
FRAMENAME="PAL"
fi
#
if [ "$VIDEOFILE" = "" ]; then
echo ""
echo "Usage: vidstab VIDEOFILE CONVERT|0|1|2 SHAKEINESS|1-10 FORMAT|PAL|720|1080 FRAMERATE|25|50"
echo ""
echo " CONVERT 0 Nur stabilisieren, 1 stabilisieren und transkodieren, 2 nur transkodieren (Standard = 0)"
echo " SHAKEINESS Wert zwischen 1 wenig Bewegung im Bild und 10 viel Bewegung im Bild (Standard = 5)"
echo " FORMAT PAL Auflösung 720x576, 720 Auflösung 1280x720 und 1080 Auflösung 1920x1080 (Standard = PAL)"
echo " FRAMERATE Frei wählbare Framerate, sinnvolle Werte 24|25|30|60 (Standard = 25)"
echo ""
else
if [ "$KONVFLAG" = "1" ]; then
ffmpeg -i "$VIDEOFILE" -y -vf vidstabdetect=shakiness=$SHAKERATE:accuracy=$ACCRATE:result="$VIDEOFILE.trf":show=1 -y "$VIDEOFILE-stab.mov"
ffmpeg -i "$VIDEOFILE" -y -vf vidstabtransform=crop=$CROPPING:input="$VIDEOFILE.trf" -vcodec prores -profile:v 3 -c:a pcm_s16le "$VIDEOFILE-tmp.mov"
ffmpeg -i "$VIDEOFILE-tmp.mov" -y -vf scale=$FRAMESIZE,setdar=dar=$ASPECTRATIO,fps=fps=$FRAMERATE:round=near -af aresample=48000 -vcodec prores -profile:v 3 -c:a pcm_s16le "$VIDEOFILE-stab-$FRAMENAME$FRAMERATE.mov"
rm -f "$VIDEOFILE.trf"
rm -f "$VIDEOFILE-tmp.mov"
rm -f "$VIDEOFILE-stab.mov"
elif [ "$KONVFLAG" = "2" ]; then
ffmpeg -i "$VIDEOFILE" -y -vf scale=$FRAMESIZE,setdar=dar=$ASPECTRATIO,fps=fps=$FRAMERATE:round=near -af aresample=48000 -vcodec prores -profile:v 3 -c:a pcm_s16le "$VIDEOFILE-$FRAMENAME$FRAMERATE.mov"
else
ffmpeg -i "$VIDEOFILE" -y -vf vidstabdetect=shakiness=$SHAKERATE:accuracy=$ACCRATE:result="$VIDEOFILE.trf":show=1 -y "$VIDEOFILE-tmp.mov"
ffmpeg -i "$VIDEOFILE" -y -vf vidstabtransform=crop=$CROPPING:input="$VIDEOFILE.trf" -vcodec prores -profile:v 3 -c:a pcm_s16le "$VIDEOFILE-stab.mov"
rm -f "$VIDEOFILE.trf"
rm -f "$VIDEOFILE-tmp.mov"
fi
fi
Nachfolgenden Inhalt des Codeblocks unter bulkstab.sh speichern und ausführbar machen
#!/bin/bash
#
VIDEODIR=$1
EXTENSION=$2
#
if [ "$VIDEODIR" = "" ]; then
echo ""
echo "Usage: bulkstab DIRECTORY EXTENSION CONVERT|0|1|2 SHAKEINESS|1-10 FORMAT|PAL|720|1080 FRAMERATE|25|50"
echo ""
echo " EXTENSION definiert die Dateierweiterung, z.B. mov, mp4, mkv, avi usw."
echo " CONVERT 0 Nur stabilisieren, 1 stabilisieren und transkodieren, 2 nur transkodieren (Standard = 0)"
echo " SHAKEINESS Wert zwischen 1 wenig Bewegung im Bild und 10 viel Bewegung im Bild (Standard = 5)"
echo " FORMAT PAL Auflösung 720x576, 720 Auflösung 1280x720 und 1080 Auflösung 1920x1080 (Standard = PAL)"
echo " FRAMERATE Frei wählbare Framerate, sinnvolle Werte 24|25|30|60 (Standard = 25)"
echo ""
else
for i in *.$EXTENSION; do vidstab "$VIDEODIR/$i" $3 $4 $5; done
fi
Schritt 3: Symbolische Links anlegen (optional)
Jetzt symbolische Links vidstab und bulkstab unter /usr/local/bin anlegen, die auf vidstab.sh und bulkstab.sh zeigen. Ich habe mir angewöhnt, Skripte u.ä. unter einem Verzeichnis in meinem Home aufzubewahren und symbolische Links unter /usr/local/bin zu erstellen. Hier kann natürlich jeder machen, wie er es gerne hätte - es spricht nichts dagegen, vidstab.sh und bulkstab.sh direkt nach /usr/local/bin zu kopieren.
Schritt 4: Nautilus-Aktionen anlegen (optional)
Wer Nautilus verwendet, kann noch Aktionen anlegen, die die Skripte direkt aus dem Kontextmenü aufruft und dabei die gewählte Videodatei als Parameter übergibt. Ich habe mir dazu ein eine Reihe Aktionen für das Transkodieren und|oder Stabilisieren für einzelne Video-Dateien (vidstab) sowie Aktionen für ganze Ordner (bulkstab) erstellt.
Schritt 5: Videos transkodieren und|oder stabilsieren
Mit vidstab bzw. vidstab.sh lassen sich einzelne Videos transkodieren oder stabilisieren. Dazu müssen Parameter angegeben werden, die in den Skriptdateien erläutert sind. Hier einige Beispiele:
vidstab video.mov 2 1 1080 50
Hier wird der Clip video.mov nur nach 1920x1080 mit 50fps transkodiert - es findet keine Stabilisierung statt. Der zweite Parameter (1) ist ein reiner Platzhalter und wird hier nicht verwendet - er muss aber angegeben werden.
vidstab video.mov 0 10
Hier wird das Video nur stabilisiert und im gleichen Format wieder abgespeichert - es findet keine Transkodierung statt. Der Parameter 10 (Shakeiness) gibt an, das das Video sehr verwackelt ist.
vidstab video.mov 1 5 720 25
Hier wird das Video erst stabilisiert (5 bedeutet mittlere Verwacklungen), dann nach 1280x720 mit 25fps transkodiert.
Mit bulkstab bzw. bulkstab.sh lassen sich ganze Verzeichnisse auf einen Schlag transkodieren und|oder stabilisieren. Dieses Skript ruft vidstab mit jeder im aktuellen Verzeichnis gefundenen Videodatei auf. Dazu mit cd in das Verzeichnis wechseln, in dem sich die Videodateien befinden. Dann den nachfolgenden Beispielen folgen:
bulkstab mov 2 1 1080 50
Hier werden alle Videodateien mit der Erweiterung .mov nach 1920x1080 und 50fps transkodiert, es findet keine Stabilisierung statt. Der dritte Parameter ist wieder ein Platzhalter und wird nicht ausgewertet. Er muss aber angegeben werden.
bulkstab MP4 1 2 PAL 25
Hier werden alle Videos mit der Erweiterung .MP4 erst leicht stabilsiert, dann nach 720x576 mit 25fps transkodiert.
Das wars. Der Rest ist eigentlich selbsterklärend. Nach erfolgreicher Stabilsierung bzw. Transkodierung hat man eine recht große Videodatei im ProRes-Format, die sich leicht mit einem beliebigen Editor wie Flowblade oder Lightworks weiterverarbeiten lässt. Hat man alles geschnitten und poliert, kann man das Gesamt-Kunstwerk wieder verlustbehaftet rendern und in ein beliebiges Container-Format speichern und auf DVD, Blu-Ray oder online veröfffentlichen.
Viel Spaß.
Dieter, mediaDS
Moderiert von XM-Franz:
Da keine Supportfrage zu Ubuntu erkennbar ist, in ein geeigneteres Unterforum verschoben.
Moderiert von redknight:
Revision wiederhergestellt. Bitte beachte, dass Beiträge nur bei einem Verstoß gegen die Forenregeln unzugänglich gemacht werden.