Da Sie tatsächlich drei in einer Frage lassen Sie mich Schritt für Schritt durch diesen Schritt gehen, aber vor einiger alle Informationen über die Version und aktivierte Funktionen des ffmpeg Build i mit getestet haben dies.
ffmpeg version 2.6.2 Copyright (c) 2000-2015 the FFmpeg developers
built with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
configuration: --extra-libs=-ldl --prefix=/opt/ffmpeg --enable-avresample --disable-debug --enable-nonfree --enable-gpl --enable-version3 --enable-libopencore-amrnb --enable-libopencore-amrwb --disable-decoder=amrnb --disable-decoder=amrwb --enable-libpulse --enable-libx264 --enable-libx265 --enable-libfdk-aac --enable-libvorbis --enable-libmp3lame --enable-libopus --enable-libvpx --enable-libspeex --enable-libass --enable-avisynth --enable-libsoxr --enable-libxvid --enable-libvo-aacenc --enable-libvidstab
libavutil 54. 20.100/54. 20.100
libavcodec 56. 26.100/56. 26.100
libavformat 56. 25.101/56. 25.101
libavdevice 56. 4.100/56. 4.100
libavfilter 5. 11.102/5. 11.102
libavresample 2. 1. 0/2. 1. 0
libswscale 3. 1.101/3. 1.101
libswresample 1. 1.100/1. 1.100
libpostproc 53. 3.100/53. 3.100
Hyper fast Audio and Video encoder
Dauer
Da Sie ffmpeg installiert haben wahrscheinlich Sie haben ffprobe auch.
ffprobe
ffprobe sammelt Informationen von Multimedia-Streams und es druckt in human- und maschinenlesbare Art und Weise ...
So die Dauer erhalten mit ffprobe Sie das tun könnte folgende:
exec('ffprobe -i input-file.mp4 -show_format | grep duration 2>&1', $result);
echo "<pre>";
var_dump($result[0]); // string(19) "duration=104.022000"
echo "</pre>";
- Upd aß -
LordNeckbeard so freundlich war, darauf hinzuweisen, dass es keine Notwendigkeit gibt, die grep
Dienstprogramm hier zu verwenden. Und da es ein Unix-basiertes Tool ist und daher nicht auf allen Betriebssystemen vorhanden ist, ist sein Vorschlag absolut korrekt.
Also hier ist ein Beispiel ohne die Verwendung von grep
, die auf der folgenden http://trac.ffmpeg.org/wiki/FFprobeTips Seite gefunden werden kann.
exec('ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 input-file.mov 2>&1', $result);
echo "<pre>";
var_dump($result[0]); // string(11) "5634.401068"
echo "</pre>";
Thumbnail
Es ist ein Beispiel auf der ffmpeg docs Seite, die erklärt, wie mehrere Vorschaubilder aus einem Video extrahieren Aufruf ffmpeg mit den folgenden Parametern:
ffmpeg -i foo.avi -r 1 -s WxH -f image2 foo-%03d.jpeg
Dies wird extrahiert o ne Videobild pro Sekunde aus dem Video und gibt sie in Dateien mit den Namen foo-001.jpeg, foo-002.jpeg usw. aus. Bilder werden so skaliert, dass sie den neuen WxH-Werten entsprechen.
Wenn Sie nur eine begrenzte Anzahl von Frames extrahieren möchten, können Sie den obigen Befehl in Kombination mit der Option -vframes oder -t oder in Kombination mit -ss verwenden, um mit dem Extrahieren ab einem bestimmten Zeitpunkt zu beginnen.
Um ein Miniaturbild von einem bestimmten Zeitpunkt extrahieren Sie den -ss
Befehl in Kombination mit -vframes
der für -frames:v
ein Alias verwenden würden. Hier ist ein Beispiel, wie Sie das tun würden:
exec('ffmpeg -i input.mp4 -r 1 -ss 00:00:50 -vf scale=1024:-1 -vframes 1 output.jpeg 2>&1', $result);
echo "<pre>";
print_r($result);
echo "</pre>";
Aber die folgenden Informationen auf dem -ss
Befehl bewusst sein.
Beachten Sie, dass es in den meisten Formaten nicht möglich ist, genau zu suchen, so dass ffmpeg den nächsten Suchpunkt vor der Position sucht. Wenn Transcodierung und -accurate_seek aktiviert ist (Standardeinstellung), wird dieses zusätzliche Segment zwischen dem Suchpunkt und der Position decodiert und verworfen. Wenn Stream-Kopien erstellt werden oder wenn -noaccurate_seek verwendet wird, werden diese beibehalten.
Stellen Sie außerdem sicher, dass der Ausgabepfad beschreibbar ist. Andernfalls wird ein Fehler, die wie folgt erhalten:
[image2 @ 0x35ae280] Could not open file : /output/path/to/your/file
Theora und Vorbis Encoding
Dies ist die einzige Sache, die ich nicht wegen der Tatsache, testen konnte, dass meine Version von ffmpeg nicht haben die
--enable-libtheora
Flagge, wie Sie durch die obigen Informationen berichten. Sie müssen im Wesentlichen ffmpeg kompilieren, damit die benötigten Bibliotheken das Theora-Videoformat und das Vorbis-Audioformat entschlüsseln und dekodieren können.
Hier sind einige Informationen, mit denen Sie damit beginnen können.
A Brief Theora and Vorbis Encoding Guide
Wenn Sie eine benutzerdefinierte bauen mit den genannten Bibliotheken haben, sollten Sie in der Lage sein, Folgendes zu tun:
exec('ffmpeg -i input.mkv -codec:v libtheora -qscale:v 7 -codec:a libvorbis -qscale:a 5 output.ogv 2>&1', $result);
echo "<pre>";
print_r($result);
echo "</pre>";
Here ist der Link zu wo die meisten dieser Informationen zu finden.
Hoffe, das hilft.
Warum wollen Sie Theora in OGG? Wenn Sie in diese Richtung gehen, warum nicht stattdessen VP8 (oder VP9) in WebM verwenden?Es ist ein moderneres Videoformat, und (ich vermute hier) Browser, die Theora + OGG unterstützen, sollten VP8 + WebM unterstützen. – LordNeckbeard