Heim >Backend-Entwicklung >PHP-Problem >So verwenden Sie Ffmpeg, um FLV-Video-Miniaturansichten und die Videolänge zu erhalten
FFmpeg ist eine Komplettlösung zum Aufzeichnen, Konvertieren und Streamen von Audio und Video, eine führende Audio-/Video-Codec-Bibliothek. Die offizielle Version von ffmpeg unterstützt die Formate rmvb und rm nicht. Heute stellen wir es vor.
Nachdem ich lange bei Google gesucht habe, habe ich herausgefunden, dass ich Ffmpeg verwenden kann, um einige Informationen über Videos zu erhalten.
Hier eine kurze Einführung: FFmpeg ist eine Komplettlösung zum Aufnehmen und Konvertieren und Streaming von Audio und Video, ein Set. Die führende Audio-/Video-Codec-Bibliothek. Die offizielle Version von ffmpeg unterstützt die Formate rmvb und rm nicht. Es gibt jedoch viele Lösungen. Die offizielle Website von FFmpeg ist http://ffmpeg.mplayerhq.hu.
Das chinesische Wiki ist http://www.ffmpeg.com.cn/, das viele Informationen enthält.
㈠Installieren von FFMEPG
Betriebssystem: centos6
Ich habe so viele Artikel über die Installation von FFMEPG gefunden, aber im Grunde gibt es keine Kommentare, so viele Softwarepakete müssen installiert werden und es gibt keine Erklärung, wofür sie verwendet werden. Ich bin verwirrt. . Darüber hinaus gibt es bei den oben genannten Installationsschritten immer Probleme. Am Ende muss ich nach der offiziellen Website suchen und mir die offiziellen Informationen ansehen Informationen in der Zukunft.
Da FFMEPG selbst das FLV-Format unterstützt, müssen derzeit keine Plug-Ins installiert werden, sondern nur FFMEPG. Es gibt zwei Möglichkeiten, FFMEPG zu installieren: ① Installation des Quellcodepakets, ich nicht Ich weiß, warum dies immer einen Fehler meldet. ② Yum-Befehlsinstallation, Centos. Dieses Yum ist der beste Befehl, haha.
Hier sind die Installationsschritte:
㈠Installieren Sie die Kompilierungsumgebung
㈡Installieren Sie das RPM-Paket der erforderlichen Bibliothek in Centosrpm -Uhv http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5. rf.i386.rpmInstallieren Sie ffmpeg und andere Module
yum -y install ffmpeg ffmpeg-devel
****************************** ***************スntススDie folgende Installation ist bereits erledigt!
PHP-Unterstützungs-Plugin installieren: FFMPEG-PHP
cd /usr/local/src
wget http://garr.dl.sourceforge.net/sourceforge/ffmpeg-php/ffmpeg-php- 0.6.0.tbz2tar jxvf ffmpeg-php-0.6.0.tbz2
cd ffmpeg-php-0.6.0/usr/local/php/bin/phpize
./configure --with-php-config=/ usr/ local/php/bin/php-confi
make
make install
Ändern Sie dann die php.ini-Datei
vi php.ini
Fügen Sie diesen Satz zur php.ini-Datei hinzu
Dann Apache neu starten
********** Beachten Sie, dass der Wget-Link möglicherweise ungültig ist. Sie können ihn wahrscheinlich online finden
----- ------ -------------------------------------------- ------ ----------------------------------------
Schneiden Sie ein Bild der Größe 352x240 im JPG-Format aus:
ffmpeg -i test.asf -y -f image2 -t 0.001 -s 352x240 a. jpgBeispiel 2:
Konvertieren Sie die ersten 30 Bilder des Videos in ein animiertes GIF:
ffmpeg -i test.asf -vframes 30 -y -f gif a.gif
Nehmen Sie ein 320*240-Miniaturbild bei 8,01 Sekunden des Videos auf
ffmpeg -i test.flv -y -f mjpeg -ss 3 -t 0.001 -s 320x240 test.jpg
Beispiel 4:
Beispiel 3: Holen Sie sich das Miniaturbild an der angegebenen Stelle für das Video im FLV-Format. Denken Sie daran, dass das Format der erzwungenen Konvertierung mit -f mjpeg ist, da ich das Miniaturbild im JPG-Format erhalten möchte geschrieben als ffmpeg -i test. flv -y -f image2 -ss 08.010 -t 0.001 -s 352x240 b.jpg Dies ist ein Fehler und kann nicht ausgegeben werden
Durch den Screenshot oben können wir sehen Eingabe von FLV-Informationen und Ausgabe von JPG-Bildinformationen. Die Dauer ist die Länge des Videos, die für diesen Artikel benötigt wird, aber ich weiß nicht, wie ich diese Variable erhalten kann
Das Folgende ist der Code zum Aufrufen des Shell-Befehls in PHP, um die zu erhalten Miniaturansicht
<?php exec("/usr/bin/ffmpeg -i /usr/local/apache/htdocs/test.flv -y -f mjpeg -ss 3 -t 0.001 -s 320x240 /usr/local/apache/htdocs/test.jpg",$out,$status); print_r($status);//0是成功 1是失败
**************************** ********************* **************
Wenn kein Bild generiert wird, sind die möglichen Gründe:
①Zum Speichern generierter Bilder muss der Ordner über Schreibberechtigung verfügen #chomd 777 /usr/local/Apache /htdocs
②Es gibt „disable_functions“ in php.ini, um den Aufruf der Shell-Befehlsfunktion durch PHP zu deaktivieren,
disable_functions = proc_open, popen,exec, system, shell_exec , passhru
Lösung: Kommentieren Sie das Element „disable_functions“ aus
#disable_functions = proc_open , popen,exec, system, shell_exec, passhru
oder disable_functions = (die gesperrte Funktion entfernen)
Speichern, schließen und aktivieren
③Der abgesicherte Modus in php.ini muss vor dem Aufruf der Exec-Funktion ausgeschaltet werden
safe_mode = aus
④Das Abfangen der Bildzeit ist ebenfalls sehr wichtig, es handelt sich wahrscheinlich um ein ungültiges Bild oder einen schwarzen Bildschirm
Es wird empfohlen, Keyframes hinzuzufügen. Normalerweise sind die ersten Frames Keyframes. Sie können Folgendes verwenden: vframes: Frame-Parameter, verwerfen Mikrosekundenparameter, nur Zeitparameter beibehalten
/usr/bin/ffmpeg -i /usr/local/apache/htdocs/test.flv -y -f mjpeg - ss 3 -vframes 1 -s 320x240 /usr/local/apache/ htdocs/test.jpg
**************************** *************** *********************************
Die oben genannten sind alles Lösungen, um Miniaturansichten zu erhalten. Ich habe gesehen, dass jemand ffmpeg verwendet Erhalten Sie während der Android-Entwicklung Miniaturansichten von Videos auf Mobiltelefonen. Da die unterste Ebene von Android Liunx ist, sollte sie universell sein! Im Folgenden erfahren Sie, wie Sie die Länge des Videos ermitteln. Obwohl die Dauer die erforderliche Videolänge ist, weiß ich nicht, wie ich sie ermitteln kann. Können Sie mir das bitte beibringen?
Das Folgende ist die Länge von Videos, die mit reinem PHP erhalten wurden:
Sie können im Internet suchen: So erhalten Sie die Länge von FLV-Videos mit PHP
Sie können viele Ergebnisse finden, aber ich habe mehr als zehn Seiten umgeblättert und Ich habe herausgefunden, dass alle TMDs kopiert und nachgedruckt werden und nicht alle verwendet werden können. Ich weiß nicht, warum? Dieser Code ist seltsam. Sie werden feststellen, dass dies kein PHP ist, da der Editor keine Syntaxhervorhebung anzeigt. Ich habe festgestellt, dass der Fehler immer noch seltsam ist . . . Der gemeldete Fehler ist sehr seltsam. Ich habe mich auf keinen Fall für die Suche nach englischen Informationen entschieden. Hahaha Es sind Ausländer-Sachen, die so gut funktionieren
Falscher Code:
Schlüsselwörter werden nicht hervorgehoben
Das Folgende ist der richtige Code:
<?php function BigEndian2Int($byte_word, $signed = false) { $int_value = 0; $byte_wordlen = strlen($byte_word); for ($i = 0; $i < $byte_wordlen; $i++) { $int_value += ord($byte_word{$i}) * pow(256, ($byte_wordlen - 1 - $i)); } if ($signed) { $sign_mask_bit = 0x80 << (8 * ($byte_wordlen - 1)); if ($int_value & $sign_mask_bit) { $int_value = 0 - ($int_value & ($sign_mask_bit - 1)); } } return $int_value; } //获得视频的数字时间 function getTime($name){ if(!file_exists($name)){ return; } $flv_data_length=filesize($name); $fp = @fopen($name, 'rb'); $flv_header = fread($fp, 5); fseek($fp, 5, SEEK_SET); $frame_size_data_length =BigEndian2Int(fread($fp, 4)); $flv_header_frame_length = 9; if ($frame_size_data_length > $flv_header_frame_length) { fseek($fp, $frame_size_data_length - $flv_header_frame_length, SEEK_CUR); } $duration = 0; while ((ftell($fp) + 1) < $flv_data_length) { $this_tag_header = fread($fp, 16); $data_length = BigEndian2Int(substr($this_tag_header, 5, 3)); $timestamp = BigEndian2Int(substr($this_tag_header, 8, 3)); $next_offset = ftell($fp) - 1 + $data_length; if ($timestamp > $duration) { $duration = $timestamp; } fseek($fp, $next_offset, SEEK_SET); } fclose($fp); return $duration; } //转化为0:03:56的时间格式 function fn($time){ $num = $time; $sec = intval($num/1000); $h = intval($sec/3600); $m = intval(($sec%3600)/60); $s = intval(($sec%60)); $tm = $h.':'.$m.':'.$s; return $tm; } $t = getTime("22.flv");//显示数字时间如236722 echo fn($t);//显示时间格式0:03:56 ?>
Vorschaueffekt:
Mein Video ist55 Nur Sekunden! ok
Empfohlenes Lernen: php-Video-Tutorial
Das obige ist der detaillierte Inhalt vonSo verwenden Sie Ffmpeg, um FLV-Video-Miniaturansichten und die Videolänge zu erhalten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!