Posts mit dem Label avconv werden angezeigt. Alle Posts anzeigen
Posts mit dem Label avconv werden angezeigt. Alle Posts anzeigen

10.4.18

Avconv statt ffmpeg

Ich hatte Probleme mit dem Erstellen von Screenshots meiner Webcam. Auf dem RPI mit Raspbian lief es, auf dem anderen mit Ubuntu 16.04 nicht.
Beim Vergleich der avconv Versionen stellte ich fest, dass auf dem Ubuntu System ein Verweis auf ffmpeg eingerichtet ist. avconv war gar nicht installiert.

Lösung wie auf dieser Webseite:


apt-get remove --purge libav-tools

apt-get install build-essential
apt-get install yasm
apt-get install libfdk-aac-dev
apt-get install libx264-dev
 
## Version auf die derzeit aktuelle angepasst! 
wget https://libav.org/releases/libav-12.3.tar.gz  --no-check-certificate
tar zxvf libav-12.3.tar.gz
cd libav-12.3/
./configure --enable-libvo-aacenc --enable-gpl --enable-nonfree --enable-version3 --enable-libx264 --enable-static --disable-shared
make && make install 


24.4.15

Videos vom Matroska Format (mkv) umwandeln

Video ins MP4 Format konvertieren und gleichzeitg auf 640*360 Px verkleinern.
avconv -i test.mkv -s 640x360 -c:a copy test.mp4

3.4.15

Video aufnehmen von Webcam unter Linux

Wie meistens ist dies eher ein kleiner "Reminder For ME".

Um ein Video von einer angeschlossenen Webcam aufzuzeichnen, lässt sich natürlich wieder avconv nutzen.

Unter Ubuntu habe ich nacheinander verschiedene Cams angeschlossen, u.a. die PS3 EyeToy(!) und alles funktionierte auf Anhieb.
Unter Windows die EyeToy in Betrieb zu nehmen ist ein Graus. Dort wird ein kostenpflichtiges Treiberprogramm angeboten, was bei mir aber auch nich funktionierte.

Nun denn, um ein Video aufnehmen einfach die Webcam einstecken und gucken, ob sie unter /dev/video[x] erscheint (x=Nr. der Kamera).

Danach

avconv -f video4linux2 -r 25 -i /dev/video1 -vcodec mpeg4 -y webcam1.mp4

und ein MP4 Video der angeschlossenen Kamera (hier video1) wird erstellt.

Will man etwa ein Video einer Webcam aufnehmen und dazu ein Audiosignal eines Mikrofons (vom PC), so kann man folgendermaßen vorgehen.

Mittels

arecord -l

erhält man eine Liste der Audio-Geräte, in meinem Fall sieht die Ausgabe so aus:

 **** Liste der Hardware-Geräte (CAPTURE) ****
Karte 0: MID [HDA Intel MID], Gerät 0: 92HD81B1C5 Analog [92HD81B1C5 Analog]
  Sub-Geräte: 1/1
  Sub-Gerät #0: subdevice #0

Dieses Audio-Gerät ist also Gerät 0,0 (Sub-Gerät/Subdevice).

Mit plughw kann man dieses Gerät entsprechend eintragen und somit Video von der externen Webcam und Ton vom internen Mikro aufnehmen.
Meine Zeile sieht dann z.B. so aus:

avconv -f video4linux2 -i /dev/video1 -f alsa -i plughw:0,0 -ar 22050 -ab 64k -acodec ac3_fixed -vcodec mpeg4 -vb 2000k -y test.mp4



24.3.15

Videos umwandeln und per HTML5 wiedergeben

Ausgangslage:

Ich hatte einige Videos mit meinem neuen Quadrocopter erstellt und wollte dieses "mal eben" für andere bereit stellen.
HTML5 unterstützt das Streamen von mp4 Videos, nicht aber von avi´s.
Das die Videos im avi-Format und einer Auflösung von 1280*720 vorliegen, sollen diese zunächst umgewandelt werden.

Das ist sehr einfach unter Linux (hier Ubuntu 12) möglich, wenn avconv installiert ist.

apt-get install libav-tools

Da der benötigte Codec vermutlich auch noch nicht vorhanden ist, sollte auch ein

apt-get install libavcodec-extra-53

hinterher geschoben werden.

Danach lässt sich ein Video sehr einfach konvertieren mit

avconv -i MOVI0000.avi -s 640x360 -vcodec libx264 MOVIE0000.mp4

 Ein solches Video lässt sich sehr einfach einbetten in HTML-Code mit

 <video width="640" height="360" controls autoplay >..
    <source src="MOVIE0000.mp4" type="video/mp4">..
    Sorry, dein Browser unterstützt kein HTML5 Video...
    </video>


Um die spätere Anzeige grafisch etwas aufzupeppen, bietet es sich an, Thumbnails der Videos zu erstellen. Möchte man von jedem mp4 Video ein Screenshot erstellen und als jpg speichern, lässt sich folgender Einzeiler verwenden:

for i in *.mp4; do avconv -i "$i" -ss 00:00:05 -s 320x180 -vsync 1 -qscale 1 -vframes 1 "${i%.mp4}.jpg"; done

Damit wird das aktuelle Verzeichnis gescannt, alle mp4 Dateien mit avconv bearbeitet und nach 5 Sekunden Laufzeit ein jpg-Bild im Format 320*180 Pixel gespeichert. Die Auflösung müsste je nach Ausgangsmaterial angepasst werden, um unschöne Ergebnisse zu vermeiden.


Wenn das soweit läuft, lässt sich auch schnell etwas scripten. Mit diesem kleinen Beispiel werden alle mp4 Dateien im Ordner "videos" gescannt und per Link aufgeführt. Wenn unter dem gleichen Dateinamen - mit der Endung jpg - eine Datei existiert, wird diese als Vorschaubild angezeigt und bei Klick auf den Link wird das entsprechende Video angezeigt.

// Verzeichnis, in dem die Videos und Vorschaubilder abgelegt sind
//
$dir="videos";
$directory=scandir($dir);
// Wenn Aktion gewählt, erstelle HTML-Gerüst für die selektiert Videodatei
//
if($_GET['action']=="show")
{
    $datei=$dir . "/" . strip_tags($_GET['file']);
    echo "<video width=\"1280\" height=\"720\" controls autoplay >";
    echo "<source src=\"$datei\" type=\"video/mp4\">";
    echo "Sorry, your browser doesn't support HTML5 video...";
    echo "</video><hr>";
}
// Gehe alle Dateien des Verzeichnisses durch
//
foreach($directory as $file)
{
    // Endung mp4?
    if(preg_match("/mp4$/", $file))
    {
        $datei = $dir . "/" . $file;
        $size=filesize($datei); // Dateigröße holen
        $creationdate=date("Y-m-d" ,filectime($datei)); // Erstellungsdatum der Datei
        // Gibt es eine Vorschaudatei?
        $thumbnail=$dir . "/" . str_replace("mp4","jpg",$file);
        $description="";
        if(file_exists($thumbnail))
        {
                 $description ="<img src=\"$thumbnail\" width=\"300\"> <br>";
         }
       $description.=$file . " " . human_filesize($size) . "  [$creationdate]";
       echo "<a href=\"" . $_SERVER['PHP_SELF'] . "?action=show&    file=$file\">$description</a><br>";
    }
}
function human_filesize($bytes, $decimals = 2) {
  $sz = 'BKMGTP';
  $factor = floor((strlen($bytes) - 1) / 3);
  return sprintf("%.{$decimals}f", $bytes / pow(1024, $factor)) . @$sz[$factor];
}

Openhab und Ecoflow Max - API Anbindung

 Ich wollte die neu erworbene Powerstation in Openhab einbinden, um den aktuellen Status (Ladestand etc.) über Openhab auswerten zu können. ...