Heim >Backend-Entwicklung >PHP-Problem >So verwenden Sie Ffmpeg, um FLV-Video-Miniaturansichten und die Videolänge zu erhalten

So verwenden Sie Ffmpeg, um FLV-Video-Miniaturansichten und die Videolänge zu erhalten

醉折花枝作酒筹
醉折花枝作酒筹nach vorne
2021-07-14 15:35:302003Durchsuche

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.

So verwenden Sie Ffmpeg, um FLV-Video-Miniaturansichten und die Videolänge zu erhalten

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 Centos

rpm -Uhv http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5. rf.i386.rpm

Installieren 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

Installieren Sie FFMPEG-PHP

cd /usr/local/src

wget http://garr.dl.sourceforge.net/sourceforge/ffmpeg-php/ffmpeg-php- 0.6.0.tbz2

tar 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

extension=ffmpeg.so


Dann Apache neu starten

/etc/init.d/httpd restart


********** Beachten Sie, dass der Wget-Link möglicherweise ungültig ist. Sie können ihn wahrscheinlich online finden

----- ------ -------------------------------------------- ------ ----------------------------------------

Aber ich open phpinfo hat FFMPEG nicht gesehen. Die auf der offiziellen Website bereitgestellte Installationsmethode erfordert eine Neukompilierung von PHP, da alle Dienste auf Centos ausgeführt werden ,

dann kann ich einfach die Exec-Funktion von PHP verwenden, um den Shell-Befehl von Liunx aufzurufen, was bedeutet, dass FFMPEG-PHP nicht installiert werden muss

Informationen zur Exec-Funktion von PHP finden Sie unter: Verwenden von Exec-, System- und anderen Funktionen in PHP um Systembefehle aufzurufen

unten finden Sie einen allgemeinen Befehl zum Erhalten von Miniaturansichten:

Beispiel 1:

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. jpg

Beispiel 2:

Konvertieren Sie die ersten 30 Bilder des Videos in ein animiertes GIF:
ffmpeg -i test.asf -vframes 30 -y -f gif a.gif

Beispiel 3: Das ist es, was ich brauche!

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:

Konvertieren Sie das Video in eine FLV-Datei (dies wird am häufigsten verwendet, und mittlerweile ist FLV im Grunde zum Standard für Online-Videos geworden)

ffmpeg -i source -s 320×240 -b 700k -aspect 4:3 -y -f flv dest.flv .

Unter ihnen:

Quelle: ist der Name der Originaldatei, bei der es sich um die Formate MOV, MPEG, AVI, WMV handeln kann, ffmpeg unterstützt sie grundsätzlich.

  • -s bxh: Geben Sie die Breite und Höhe des Videos an.

  • -b: Legen Sie die Bitrate des Videos fest.

  • -aspect: Behalten Sie das Seitenverhältnis des Videos bei. Zum Beispiel 4:3 oder 16:9

  • -y: Wenn die Zieldatei vorhanden ist, überschreiben Sie direkt die ursprüngliche Zieldatei.

  • -f: Geben Sie das konvertierte Dateiformat an, hier ist das FLV-Format. (Wenn das Dateiformat nicht angegeben ist, konvertiert ffmpeg tatsächlich auch entsprechend dem Dateisuffixnamen.)

  • Ziel: Der Name der konvertierten Zieldatei muss nicht unbedingt flv sein, es kann sich um mov, mpeg und andere gängige Formate handeln.

  • Parameterbeschreibung:

    -L-Lizenz
-h Hilfe

-fromats Verfügbare Formate, Codecs, Protokolle anzeigen

-f fmt Erzwingen Sie das Format fmt

-I Dateiname Eingabedatei

-y überschreibt die Ausgabedatei

-t Dauer legt die Aufnahmezeit fest. hh:mm:ss[.xxx] Format Aufnahmezeit wird ebenfalls unterstützt

-ss Position sucht nach der angegebenen Zeit [-]hh:mm:ss[.xxx] Das Format wird auch unterstützt

s bxh: Geben Sie die Breite und Höhe des Videos an

*********************************** **** *****************************************

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

So verwenden Sie Ffmpeg, um FLV-Video-Miniaturansichten und die Videolänge zu erhalten

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:

So verwenden Sie Ffmpeg, um FLV-Video-Miniaturansichten und die Videolänge zu erhalten

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, &#39;rb&#39;);
	$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.&#39;:&#39;.$m.&#39;:&#39;.$s;
		return $tm;
	
	}

		 $t = getTime("22.flv");//显示数字时间如236722 
		echo fn($t);//显示时间格式0:03:56 
		?>

Vorschaueffekt:

So verwenden Sie Ffmpeg, um FLV-Video-Miniaturansichten und die Videolänge zu erhalten

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen