FFmpeg est une solution complète pour l'enregistrement, la conversion et le streaming audio et vidéo, une bibliothèque de codecs audio/vidéo leader. La version officielle de ffmpeg ne prend pas en charge les formats rmvb et rm. Aujourd'hui, nous allons le présenter.
Après une longue recherche sur Google, j'ai découvert que je pouvais utiliser Ffmpeg pour obtenir des informations sur les vidéos. Laissez-moi d'abord vous présenter FFMEPG
Voici une brève introduction : FFmpeg est une solution complète pour l'enregistrement et la conversion. et streaming audio et vidéo, un ensemble La principale bibliothèque de codecs audio/vidéo. La version officielle de ffmpeg ne prend pas en charge les formats rmvb et rm. Cependant, il existe de nombreuses solutions. Le site officiel de FFmpeg est http://ffmpeg.mplayerhq.hu/.
Le wiki chinois est http://www.ffmpeg.com.cn/, qui contient de nombreuses informations.
㈠Installation de FFMEPG
Système d'exploitation : centos6
J'ai trouvé tellement d'articles sur l'installation de FFMEPG, mais en gros il n'y a aucun commentaire, donc de nombreux logiciels doivent être installés et il n'y a aucune explication sur leur utilisation. Je suis confus. . De plus, il y a toujours des problèmes avec les étapes d'installation ci-dessus. Au final, je dois chercher le site officiel et y regarder attentivement. Il est vrai que les informations officielles sont très utiles, je dois donner la priorité au site officiel. informations dans le futur.
Étant donné que FFMEPG lui-même prend en charge le format flv, ce qui signifie qu'il n'est pas nécessaire d'installer de plug-ins pour le moment, seul FFMEPG doit être installé. Il existe deux façons d'installer FFMEPG : ① Installation du package de code source, je ne le fais pas. Je ne sais pas pourquoi cela signale toujours une erreur ② Installation de la commande Yum, centos Ce miam est la meilleure commande, haha
Voici les étapes d'installation :
㈠Installer l'environnement de compilation
#yum install -y automake autoconf libtool gcc gcc-c++
㈡Installez le package RPM de la bibliothèque requise sur centos
rpm -Uhv http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5 .rf.i386.rpm
Installez ffmpeg et d'autres modules
yum -y installez ffmpeg ffmpeg-devel
************************** ****************スntススL'installation suivante Déjà effectuée !
Installez le plug-in de support php : FFMPEG-PHP
Installez FFMPEG-PHP
cd /usr/local/srcwget 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
Puis modifiez le fichier php.ini
Ajoutez cette phrase au fichier php.ini
Puis redémarrer Apache
*********** Notez que le lien wget est peut-être invalide. Il est probablement bloqué en ligne
-----. ------ -------------------------------------------- ------ ---------------------------------------------
Mais je open phpinfo n'a pas vu FFMPEG. Je ne sais pas ce qui s'est passé. La méthode d'installation fournie sur le site officiel nécessite de recompiler PHP pour prendre en charge ffmpeg, étant donné que les services fonctionnent tous sur centos, puisque centos est déjà disponible. ,
alors je peux simplement utiliser la fonction exec de php pour appeler la commande shell de liunx, ce qui signifie qu'il n'est pas nécessaire d'installer FFMPEG-PHP
Pour plus d'informations sur la fonction exec de php, veuillez vous référer à : Utilisation d'exec, du système et d'autres fonctions en php pour appeler les commandes système
Vous trouverez ci-dessous une commande courante pour obtenir des vignettes :
Exemple 1 :
Découpez une image de taille 352x240 au format jpg :ffmpeg -i test.asf -y -f image2 -t 0.001 -s 352x240 a. jpg
Exemple 2 :
ffmpeg -i test.asf -vframes 30 -y -f gif a.gif
Exemple 3 : C'est ce dont j'ai besoin !
ffmpeg -i test.flv -y -f mjpeg -ss 3 -t 0.001 -s 320x240 test.jpg
Exemple 4 :
Convertir la vidéo en un fichier flv (c'est le plus couramment utilisé, et maintenant Flv est devenu le standard pour les vidéos en ligne)
ffmpeg -i source -s 320×240 -b 700k -aspect 4:3 -y -f flv dest.flv .
Parmi eux :
-L licence
-h aide
-fromats Afficher les formats, codecs, protocoles disponibles
-f fmt Forcer le format fmt
-I fichier d'entrée du nom de fichier
-y écrase le fichier de sortie
-t durée définit la durée d'enregistrement hh:mm:ss[.xxx] la durée d'enregistrement au format est également prise en charge
-ss recherche la position pour l'heure spécifiée [-]hh:mm:ss[.xxx] Le format est également pris en charge
s lxh : Spécifiez la largeur et la hauteur de la vidéo
********************************* ** *******************************************
Exemple 3 : Obtenez la vignette à l'emplacement spécifié pour la vidéo au format flv. N'oubliez pas que le format de conversion forcée -f est mjpeg car je souhaite obtenir la vignette .jpg. Il existe de nombreux articles écrits sur Internet qui le sont. écrit comme ffmpeg -i test. flv -y -f image2 -ss 08.010 -t 0.001 -s 352x240 b.jpg C'est une erreur et il est impossible de sortir
Grâce à la capture d'écran ci-dessus : nous pouvons voir le. informations flv d'entrée et informations sur l'image jpg de sortie, la durée est la longueur de la vidéo nécessaire pour cet article, mais je ne sais pas comment obtenir cette variable
Ce qui suit est le code pour appeler la commande shell en PHP pour obtenir le vignette
<?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是失败
********************* ************************* ************
Si aucune image n'est générée, les raisons possibles sont :
①Pour stocker les images générées Le dossier doit avoir une autorisation en écriture #chomd 777 /usr/local/apache/htdocs
②Il y a Disable_functions dans php.ini pour désactiver PHP appelant la fonction de commande Shell,
disable_functions = proc_open, popen,exec, system, shell_exec, passthru
Solution : commentez l'élément Disable_functions
#disable_functions = proc_open, popen ,exec, system, shell_exec, passthru
or Disable_functions = (supprimer la fonction interdite)
Enregistrer, fermer et activer
③Le mode sans échec dans php.ini doit être désactivé avant d'appeler la fonction exec
safe_mode = off
④L'interception du temps d'image est également très importante, il s'agit probablement d'une image invalide ou d'un écran noir
Il est recommandé d'ajouter des images clés, généralement les premières images sont des images clés, vous pouvez utiliser : vframes : paramètres d'image, ignorer les paramètres de microseconde , ne conservez que les paramètres temporels
/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
*************************** ******************* *******************************
Ce sont toutes des solutions pour obtenir des vignettes. J'ai vu quelqu'un utiliser ffmpeg pour obtenir des vignettes. de vidéos sur les téléphones mobiles pendant le développement d'Android étant donné que la couche inférieure d'Android est Linux, elle devrait être universelle ! Voici comment obtenir la durée de la vidéo. Bien que la durée soit la durée de la vidéo requise, je ne sais pas comment l'obtenir, pouvez-vous m'apprendre, s'il vous plaît !
Voici la durée d'une vidéo obtenue en PHP pur :
Vous pouvez effectuer une recherche sur Internet : Comment obtenir la longueur d'une vidéo flv avec php
Vous pouvez trouver de nombreux résultats, mais j'ai feuilleté plus de dix pages et J'ai découvert que les tmd sont tous copiés et réimprimés et qu'ils ne peuvent pas tous être utilisés, je ne sais pas pourquoi ? Ce code est bizarre. Vous pouvez exécuter le code sur Internet. Vous constaterez que ce n'est pas PHP, car l'éditeur n'affiche pas la coloration syntaxique. J'ai copié le code en ligne et j'ai trouvé que l'erreur est toujours bizarre. . . . Le message d'erreur est très étrange. Si vous êtes intéressé, vous pouvez l'essayer. Je n'ai pas décidé de rechercher des informations en anglais. Finalement, j'ai vu le code sur un site Web étranger, je peux l'essayer ! Hahaha, les trucs des étrangers fonctionnent si bien
Code incorrect :
Les mots clés ne sont pas mis en évidence
Ce qui suit est le code correct :
<?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 ?>
Effet d'aperçu :
Ma vidéo est55 Juste quelques secondes ! ok
Apprentissage recommandé : Tutoriel vidéo php
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!