2010-10-26 6 views
3

J'ai un fichier flv téléchargé sur un serveur. Je voudrais afficher sa durée dans le format suivant "minutes: secondes". Quelqu'un peut-il m'aider avec ça ?Obtenir la durée FLV avec php

Merci

Répondre

4

Voici mon code pour saisir une image et générer l'image de la vidéo ...

// get the duration and a random place within that 
$cmd = "ffmpeg -i " . $videoPath . " 2>&1"; 
if (preg_match('/Duration: ((\d+):(\d+):(\d+))/s', `$cmd`, $time)) { 
    $total = ($time[2] * 3600) + ($time[3] * 60) + $time[4]; 
    $second = rand(1, ($total - 1)); 
} 
exec($cmd); 

// get the screenshot 
exec("ffmpeg -i " . $videoPath . " -deinterlace -an -ss $second -t 00:00:01 -r 1 -y -vcodec mjpeg -f mjpeg " . $imageOutput . " 2>&1"); 

seconde variable $ est le nombre aléatoire entre 0 et durée totale. et le second exec() consiste à créer un fichier image à partir de l'image sélectionnée.

$ imageOutput est l'emplacement absolu du chemin vers l'image générée. par exemple: /home/ariawan/image-generated.jpg

+1

Ariawan, merci beaucoup pour votre aide. Je suis en mesure d'obtenir l'image dans le dossier, mais il est vide 0 octets. Voici ce que j'ai: – Ciprian

+1

Je ne suis pas sûr de ce qui s'est passé, mais le serveur sur lequel je travaillais a été redémarré, et tout fonctionne bien maintenant. Merci beaucoup l'homme! – Ciprian

+0

okay .. super ... – ariawan

2

je suis en utilisant php et ffmpeg pour obtenir la durée de la vidéo.

$cmd = "ffmpeg -i " . $videoPath . " 2>&1"; 
    if (preg_match('/Duration: ((\d+):(\d+):(\d+))/s', `$cmd`, $time)) { 
     $total = ($time[2] * 3600) + ($time[3] * 60) + $time[4]; 
    } 
    exec($cmd); 

print_r() la variable $ heure à voir. assurez-vous que ffmpeg est installé sur votre machine .. espérons que cela aidera.

+0

merci l'homme je vais l'essayer. Je sais que ffmpeg est installé. – Ciprian

+0

Je ne suis pas sûr de savoir comment faire cela. J'ai créé une variable $ videoPath = 'skittles.flv'; et j'ai appelé la variable $ time avec print_r (time); Le résultat est Array() – Ciprian

+0

try ffmpeg -i /path/path/videofile.flv. est-ce qu'il fonctionne? – ariawan

7

Il existe également une extension PHP FFMPEG ie. apt-get install php5-ffmpeg puis

 
$movie = new ffmepg_movie("path/to/movie.flv"); 
$duration_in_seconds = $movie->getDuration(); 

Ceci a fonctionné pour moi précédemment. L'extension est bonne pour récupérer des méta-données et tester si un fichier téléchargé est un FLV, etc.

+1

puis diviser par 60 pour obtenir les minutes et modulo 60 pour obtenir les secondes restantes –

+0

cool ... je vais essayer cette option aussi. Merci beaucoup! – Ciprian

3

Je utiliserais le getID3 PHP library, écrit en PHP pur sans aucune dépendance.

Non seulement vous donne la durée du film .flv en secondes, mais le convertit au format minute:seconds déjà. Voici un exemple de code avec v 1.7.9 (dernière version stable de getid3).

<?php 

// getId3 library uses deprecated eregi_* functions 
// which generate errors under PHP 5.3 - so I excluded them 
error_reporting(E_ALL^E_DEPRECATED); 

// just for debugging/sample 
header('Content-Type: text/plain'); 

// include the getid3 base class in order to use the lib 
require_once('./lib/getid3.php'); 

// path to your .flv file 
$filename = './sample.flv'; 

$getID3 = new getID3(); 
$fileInfo = $getID3->analyze($filename); 

// echoes something like 127.8743 
print 'Playtime in seconds: ' . $fileInfo['playtime_seconds']; 

print chr(10); 

// echoes something like: 2:07 
print 'Playtime in minute:seconds format: ' . $fileInfo['playtime_string']; 
+0

remercie l'homme. J'apprécie ton aide. Mais j'ai fini par utiliser la deuxième suggestion. Une idée sur comment attraper la vignette? – Ciprian

+0

+1 pour getid3 car il n'a pas de dépendances –

+0

@ciprian comment saisir la vignette devrait être une question distincte. –

1

Merci pour votre aide. Je voudrais également générer une vignette à partir du fichier flv. J'essaye actuellement d'accomplir ceci en utilisant ce code. Mais je semble faire quelque chose de mal.

$cmd = "ffmpeg -i /home/web1/wpmu.site.com/htdocs/wp-content/blogs.dir/7/files/2010/10/4973_3.flv -f image2 -vframes 1 -ss 00:00:01 -y -s 100x100 /home/web1/wpmu.site.com/htdocs/wp-content/blogs.dir/7/files/2010/10/4973_3.png"; 

exec($cmd, $output, $return); 

Je l'ai inclus sur une page test.php. Il devrait fonctionner juste en rafraîchissant la page droite? J'ai ajouté le chemin d'accès au fichier png moi-même. Quel peut être le problème avec ça?

Merci

+0

J'ai déjà ajouté une autre réponse à votre question de miniature. J'ai joint le code aussi, mais l'option que j'ai utilisée sur ffmpeg est jpeg. – ariawan

Questions connexes