Toon posts:

FFMPEG - Duur van een film ophalen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Doormiddel van FFMPEG bewerk ik een geuploadde film. Ik maak er een thumbnail van en een preview van 20 seconden. Nu wil ik alleen dat beide ergens in het midden genomen worden.

Nu kan dat gedaan wordendoor simpel totale afspeeltijd - 20 seconden : 2 is de tijd voor en na de preview/thumbnail.

Maar hoe kan ik de totale duur (duration) van een film ophalen. Met het commando ffmpeg -i bestandsnaam is het mogelijk. Maar hoe kan ik dat weer teruggeven aan mijn PHP script zodat hij er wat mee doet?

Ik heb al diverse combinaties van php.net geprobeerd zoals: exec, shell_exec maar zonder resultaat. In cmd.exe toont hij wel de duration en nog wat meer gegevens maar die vallen wel weg te halen met PHP.

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 23:16

TeeDee

CQB 241

passthru

edit:

En dan heb ik geen kennis van PHP, alleen dit in Google gesmeten. Vervolgens kreeg ik ergens passthru te zien en passthru bekeken.
Leuk gevonden, maar die functie heeft in deze context geen voordeel tov exec.
Mjah, ik zag binary staan, en dacht dat het relevant was.

[ Voor 116% gewijzigd door TeeDee op 23-05-2008 10:15 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Leuk gevonden, maar die functie heeft in deze context geen voordeel tov exec. ;)

Waarom werkt exec niet? Blijft de output parameter leeg, krijg je rechten errors, etc etc. Debug wat meer en zeg niet enkel 'maar zonder resultaat'.

Overigens nooit met ffmpeg gewerkt, maar googlen naar 'ffmpeg php' geeft als 1e hit een extension welke gewoon hiervoor een mooie functie biedt. ;)

[ Voor 24% gewijzigd door Voutloos op 23-05-2008 09:57 ]

{signature}


Verwijderd

Topicstarter
Voutloos schreef op vrijdag 23 mei 2008 @ 09:55:
Leuk gevonden, maar die functie heeft in deze context geen voordeel tov exec. ;)

Waarom werkt exec niet? Blijft de output parameter leeg, krijg je rechten errors, etc etc. Debug wat meer en zeg niet enkel 'maar zonder resultaat'.

Overigens nooit met ffmpeg gewerkt, maar googlen naar 'ffmpeg php' geeft als 1e hit een extension welke gewoon hiervoor een mooie functie biedt. ;)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php

exec("C:\\ffmpeg -i upload/kauwgom.wmv 2>&1",$output);

foreach($output as $item){
    $tamanio=strlen($item);

        $string1="Duration:";
        $string1_len=strlen($string1)+11;
        $posicion=strpos($item,$string1); //position of the Duration string in the standar output
        $resultado_cortado=substr("$item",0,$string1_len); //here i cut the Durarion in the output

        if ($posicion != false) {
            echo $resultado_cortado;  //here i display thd duration
            break;
        }
}
?>


Dit heb ik gevonden op internet en werkt. Moet het alleen nog wel verder omzetten maar dat lukt wel.
Bedankt voor de hulp.

[ Voor 40% gewijzigd door Verwijderd op 23-05-2008 10:47 ]


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Wow, loop invariants, een ongebruikte variabele, onnodige function calls en een buggy check voor de return value van strpos() en absoluut debiele comments (strpos en substr functies zijn dermate basic dat ze echt geen uitleg behoeven hier).

{signature}


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 23:16

TeeDee

CQB 241

exec, shell_exec maar zonder resultaat.
Blijkbaar niet genoeg geprobeerd en/of gedebugged.

Heart..pumps blood.Has nothing to do with emotion! Bored


Verwijderd

Topicstarter
Voutloos schreef op vrijdag 23 mei 2008 @ 10:55:
Wow, loop invariants, een ongebruikte variabele, onnodige function calls en een buggy check voor de return value van strpos() en absoluut debiele comments (strpos en substr functies zijn dermate basic dat ze echt geen uitleg behoeven hier).
Het is een script van een ander dat ik nog aan moet passen. Heb er verder namelijk nog geen aandacht aan besteed. Ging in eerste geval om het resultaat.

Blijkbaar had ik ook een parameterfout gemaakt waardoor het niet allemaal juist werkte.

Verwijderd

Topicstarter
Voutloos schreef op vrijdag 23 mei 2008 @ 10:55:
Wow, loop invariants, een ongebruikte variabele, onnodige function calls en een buggy check voor de return value van strpos() en absoluut debiele comments (strpos en substr functies zijn dermate basic dat ze echt geen uitleg behoeven hier).
Zo is het beter geschreven lijkt mij:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// Haal duration (tijd) van de film op.
exec("C:\\ffmpeg -i upload/kauwgom.wmv 2>&1",$output);

// Voeg duration van film toe aan variabele.
foreach($output as $item){
    $positie = strpos($item,"Duration:"); //position of the Duration string in the standar output   
    $resultaat = substr("$item",0,20); 
    
    if ($positie != false) {
        // Toon alleen de tijd en breek de foreach lus af.
        $resultaat = substr($resultaat, -8); 
        break;
    }
}

  • Martine
  • Registratie: Mei 2002
  • Niet online
Ik gebruik altijd de onderstaande manier, misschien wel wat omslachtig maar werkt prima :)

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$output = shell_exec("/usr/bin/ffmpeg -i /home/foo/bar/sites.com/filename.flv 2>&1 | grep \"Duration\" | cut -d ' ' -f 4 | sed s/,//"); 

$exp = explode(":", $output);
$totalexp = floor(($exp[0]*3600)+($exp[1]*60)+$exp[2]);

function bloemen($seconds) {
   $ret = array();
   $levels = array(
      'days'      => (3600*24),
      'hours'     => 3600,
      'minutes'   => 60,
      'seconds'   => 1
   );
   
   foreach ($levels as $levelKey => $span) {
      $ret [$levelKey] = (int)($seconds / $span);
      $seconds %= $span;
   }
   return $ret;
}

$time = bloemen($totalexp/2);

$previewtime = str_pad($time['hours'], 2, "0", STR_PAD_LEFT).":".str_pad($time['minutes'], 2, "0", STR_PAD_LEFT).":".str_pad($time['seconds'], 2, "0", STR_PAD_LEFT);

shell_exec("/usr/bin/ffmpeg -i /home/foo/bar/sites.com/filename.flv -ss ".$previewtime." -vframes 1 -y -an /home/foo/bar/sites.com/%d.jpg");

  • LoBbY_1
  • Registratie: Juli 2002
  • Laatst online: 27-10 12:56
$VAR = exec("C:\\ffmpeg -i upload/kauwgom.wmv 2>&1",$output);

De output wordt zo toch naar een variabele geschreven? Tijdje geleden hoor...Kan je je checks op je variabele doen! (correct me if im wrong)

Een echte golver is nooit uitgeput


Verwijderd

Topicstarter
Martine schreef op vrijdag 23 mei 2008 @ 15:01:
Ik gebruik altijd de onderstaande manier, misschien wel wat omslachtig maar werkt prima :)

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$output = shell_exec("/usr/bin/ffmpeg -i /home/foo/bar/sites.com/filename.flv 2>&1 | grep \"Duration\" | cut -d ' ' -f 4 | sed s/,//"); 

$exp = explode(":", $output);
$totalexp = floor(($exp[0]*3600)+($exp[1]*60)+$exp[2]);

function bloemen($seconds) {
   $ret = array();
   $levels = array(
      'days'      => (3600*24),
      'hours'     => 3600,
      'minutes'   => 60,
      'seconds'   => 1
   );
   
   foreach ($levels as $levelKey => $span) {
      $ret [$levelKey] = (int)($seconds / $span);
      $seconds %= $span;
   }
   return $ret;
}

$time = bloemen($totalexp/2);

$previewtime = str_pad($time['hours'], 2, "0", STR_PAD_LEFT).":".str_pad($time['minutes'], 2, "0", STR_PAD_LEFT).":".str_pad($time['seconds'], 2, "0", STR_PAD_LEFT);

shell_exec("/usr/bin/ffmpeg -i /home/foo/bar/sites.com/filename.flv -ss ".$previewtime." -vframes 1 -y -an /home/foo/bar/sites.com/%d.jpg");
Kan je een beetje toelichten wat het allemaal betekent aub.
Voorald een van de laatste regels beginnende met $previewtime....

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
uitleg van begin regel 24 : http://nl3.php.net/str_pad de rest is ook daar in die buurt te vinden.
Oftewel RTFM

  • Martine
  • Registratie: Mei 2002
  • Niet online
Vervang die laatste shell_exec door een echo dan weet je precies wat er gebeurd :+

[ Voor 10% gewijzigd door Martine op 23-05-2008 21:35 ]

Pagina: 1