wiki:Podcast-Wiki-Physik/Ausgabeformate

PodcastWiki-Videoformate

Aufgenommen wird mit HD 1920x1080. Irgendwie ist die Kamera auf Halbbilder/Progressive (25p) eingestellt, da ist was komisch. Muss noch rausgefunden werden.

Wir wollen für die Next Generation Podcast-Wiki HTML5-Videoframeworks verwenden. Folgende Ausgabeformate stehen dabei zur Disposition:

Video Audio
OGG Theora Vorbis
MP4 H.264 AAC
WebM VP8 Vorbis
flv - -

Auflösungen:

  • 640x360 Mini
  • x480 Mittel
  • 1028x720 Groß (Vollbild)
  • 1920x1080 HD

Wen man alle Auflösungskombinationen mit allen Formaten verbindet, müsste man jedes Video in 16 Videodateivarianten vorliegen haben.

Automatische Konvertierung

Mit VLC: Streaminoptionen

#!/usr/bin/perl -w

use strict;

my %formats = (
        'mp4' =>  "#transcode{vcodec=h264,vb=0,scale=0,acodec=mp4a,ab=128,channels=2,samplerate=44100}",
        'webm' => "#transcode{vcodec=VP80,vb=2000,scale=0,acodec=vorb,ab=128,channels=2,samplerate=44100}",
        'ogg' => "#transcode{vcodec=theo,vb=800,scale=0,acodec=vorb,ab=128,channels=2,samplerate=44100}",
);

unless(@ARGV) {
        die "usage: $0 video.mp4 [outputdirectory]";
}

my $input = shift @ARGV;
my $outdir = @ARGV ? shift @ARGV : "out";
(my $base = $input) =~ s/\.[a-z0-9]{3,4}$//i; # poor mans basename

for(keys %formats) {
        my $output = "$outdir/$base.$_";
        my $vlc = "vlc --sout \"$formats{$_}:file{dst='$output'}\" \"$input\" vlc://quit";
        print $vlc,"\n";
        `$vlc`;
}

Probleme mit gescriptetem VLC: Keine gute Command-Line-GUI, damit kein Fortschritt beim encoden. Außerdem haben die Ausgabevideos keinen Ton!

Mit FFMPEG (etwa Miro Convert, WinFF):

WEBM:

ffmpeg -i Triesch.mp4 -f webm -vcodec libvpx -acodec libvorbis -ab 160000 -crf 22 Triesch.webm

MP4:

ffmpeg -i Triesch.mp4 -strict experimental -f mp4 -vcodec libx264 -acodec aac -ab 160000 -ac 2 -vpre slow -crf 22 Triesch.out.mp4

THEORA/OGV:

ffmpeg2theora reifarth-finalcut.mp4 --videoquality 8 --audioquality 6 --frontend -o reifarth-finalcut.theora.ogv

Auf nem aktuellen Ubuntu muss man dafür die Packete ffmpeg ffmpeg2theora libavcodec-extra-53 installieren. FFMPEG ist nicht multi-threading-optimiert, encoded also nur auf einem Kern.

Sum up: Viele Videos automatisch konvertieren

Für folgende Prozedur würde ich dann gerne noch ein Gesamtscript haben bzw. eine GUI für OS X (geht mit Automator oder Applescript recht einfach). Um auf einen Schlag mal wieder eine Sammlung von HighQuality-Videoexports runterzubrechen, verwende ich folgendes Kommando:

  1. Ein Shellscript /home/elearning/Podcast-Wiki/Konvertierungsscripte/convert.sh gibt die drei obigen ffmpeg-Kommandos zum Konvertieren für eine Eingabedatei aus. Der jeweilige Ausgabedateiname ist der Eingabedateiname mit angehängter Endung (webm, mp4, ogv).
  2. Was ich mache, ist jetzt diese Ausgaben alle zu sammeln, etwa per
      $ ls
      huth-v1.hq.mp4
      $ ../pfad/zum/convert.sh $(realpath huth-*) >> ../pfad/zur/sammel.txt
      $ cd ../anothervideo/
      $ ../pfad/zum/convert.sh $(realpath doerner-*) >> ../pfad/zur/sammel.txt
      $ parallel < ../pfad/zur/sammel.txt
    

Statt GNU Parallel könnte man auch ein xargs (sowas wie cat sammel.txt | xargs bash verwenden. Parallel ist im Wesentlichen eine parallelisierte Variante).

Wenn das ganze in einer Screensesseion auf einem Server läuft, auf dem diese Programme installiert sind, kann man seine Session dann beenden und der Server rödelt ein paar Stunden durch. Dann sind die jeweiligen Outputs in den richtigen Ordnern zu finden und die Dateien müssen noch umbenannt werden, sodass statt x.mp4 x.mp4.mp4 x.mp4.ogv x.mp4.webm dann wird: x.hq.mp4 x.mp4 x.ogv x.webm. Ein kontrolliertes rename tut dabei auch den Job.

Schließlich muss noch ein Vorschaubild gemacht werden. Es sollte den gleichen Namen wie die Videos haben (also huth-v1.jpg oder doerner-v1.jpg oder eben in letzterem Beispiel x.jpg). Dafür hab ich ein ffmpeg-Script vorschaubild.sh im besagten Ordner, das mit dem Syntax

 $ ./vorschaubild.sh  huth-v1.mp4  huth-v1.jpg  00:03:42

aufgerufen wird, wobei 03:42 jetzt der Zeitpunkt ist, zudem der Snapshot gemacht wird. Ffmpeg ist dabei leider etwas unperfomant und muss das komplette Video bis zu dem Zeitpunkt abspielen, was lange (nicht Echtzeit, also keine 3 Minuten in dem Fall, aber doch über eine Minute) dauert. Sicherlich gibt es Snapshotprogramme die das deutlich perfomanter hinkriegen, sodass man möglicherweise über eine Echtzeiterstellung nachdenken könnte (in der Wiki die Zeit angeben und der Rest läuft über PHP).

Wo konvertieren?

Auf dem ITP-Loginserver fehlen leider die Ubuntu-Packete ffmpeg2theora libavcodec-extra-53, was man ändern lassen könnte, aber vmtl. sind die ITP-ITler nicht begeistert wenn man ihnen erzählt, auf dem Login/Webserver 30GB große Inputvideos zu konvertieren.

Stattdessen mach ich das momentan auf dem POKAL-Devserver (elearning-dev), der als Quadcore flott von der Partie ist. Ideal ist natürlich der iMac selbst. Für ihn kommt ein voll funktionales ffmpeg` mit bei der App Miro Converter. Wenn man die App (OS X Apps sind Ordner) mal im Terminal öffnet, kann man das Binary darin finden (den Pfad weiß ich grad nich auswendig). Wie gesagt, möchte ich dafür ein OS X-Automatorscript schreiben, sodass man den Input-Dateinamen quasi per Drag & Drop reinziehen kannn und der Rest dann durchrattert, idealerweise inklusive Erstellung eines Vorschaubildes :)

Last modified 5 years ago Last modified on Jun 20, 2012 2:07:48 AM