webForumDet fria alternativet

Problem med FFMPEG

21 svar · 1 261 visningar · startad av Guldstrand

GuldstrandMedlem sedan juli 20041 271 inlägg
#1

Jag får inte scriptet nedan att fungera. :l

Får bara:

Något gick fel!

Finns det någat exempel -och/eller sätt för att se om ffmpeg är installerat KORREKT!?

I konsolen (använder putty för att komma åt servern från min windows-burk), ser jag följande:

[root@localhost ~]# whereis ffmpeg.exe
ffmpeg: /usr/bin/ffmpeg /usr/share/man/man1/ffmpeg.1.bz2

Är tacksam för ALL hjälp. :birp

(Kör Mandriva linux på en egen server.)

Här är scriptet:

<?php
 
function convert_video($source, $format, $ffmpeg, $quality, $width, $height, $bitrate, $channel, $screenshot, $seek, $pic_w, $pic_h) {
 
$screen = $width .'x'. $height;
$pic_size = $pic_w .'x'. $pic_h;
$seek = date("H:i:s", strtotime("00:00:00 +$seek seconds"));
$destination = preg_replace('/\.[a-z]{2,4}$/', '', $source);
 
$cmd = "-qscale $quality -s $screen -ab $bitrate -ac $channel";
 
   // konvertera rullen...
   exec("START $ffmpeg/ffmpeg -i $source $cmd {$destination}.$format");
   
   
   // kontrollera så att den konverterade filen verkligen finns...
   /////////////////////////////////////////////////////////////////////////////////////////////////////////////
   if (file_exists("{$destination}.$format")) {
   
   
         // Ta en screendump av filmen och spara som png
         /////////////////////////////////////////////////////////////////////////////////////////////////////////////
         if ($screenshot) {
      
            exec("START $ffmpeg/ffmpeg -i $source -vcodec png -ss $seek -s {$pic_size} -vframes 1 {$destination}_%d.png");
         
            $screen = $destination . "_1.png";
         
         } else {
      
            $screen = false;
      
         }
      
      
      return array('video' => "{$destination}.$format", 'screen' => $screen);
   
   
   } else {
   
      return false;
      
   }
 
 
}
 
 
 
if (isset($_POST['submit'])) {
 
 
$movie = $_FILES['movie']['name'];
$path = "filmer/$movie"; // vart ska filmen sparas?
 
 
   // Flytta rullen till $path
   if(move_uploaded_file($_FILES['movie']['tmp_name'], $path)) {
 
      $type = 'flv';         // format att konvertera till
      $ffmpeg = '/user/bin/ffmpeg';   // Sökväg till mappen där ffmpeg ligger
      $q = 10;            // Kvalité på konverteringen (0=bäst, 31=sämst)
      $w = 320;            // Bredd i px
      $h = 240;            // Höjd i px
      $b = 96;            // Kvalite på ljudet: 96 kb/s
      $c = 1;               // Kanaler (1=mono, 2=stereo)
      $s = true;            // Ta screenshot? (boolean)
      $t = 3;               // hur många sekunder in i filmen ska screenshot´en tas?
      $s_w = 120;            // screenshot-bredd i px
      $s_h = 90;            // screenshot-höjd i px
      
      $convert = convert_video($path, $type, $ffmpeg, $q, $w, $h, $b, $c, $s, $t, $s_w, $s_h);
 
         // Lyckades konverteringen?
         if ($convert) {
         
            $msg = "<img src=\"$convert[screen]\" alt=\"\" /><br />
            <a href=\"$convert[video]\">". basename($convert['video']) ."</a> - Hårdrock, allt ok!";
         
         } else {
         
            $msg = "Något gick fel!";
         
         }
   
   
   
      // Radera den uppladdade filmen
      unlink($path);
      
   } else {
   
      $msg = "A problem occured while uploading $movie!";
   
   }
   
   echo $msg;
   
}
 
 
?><form method="post" action="" enctype="multipart/form-data">
<input type="file" name="movie" /><br />
<input type="submit" name="submit" value="Upload Clip!" />
</form>
GuldstrandMedlem sedan juli 20041 271 inlägg
#2

Ingen som vet..?

The_HulkMedlem sedan juni 20031 837 inlägg
#3

när du kör whereis får du reda på att ffmpeg finns i /usr/bin/ där den hela sökvägen är /usr/bin/ffmpeg men när du försöker använda det i ditt skript skriver du /usr/bin/ffmpeg/ som path och /usr/bin/ffmpeg/ffmpeg som hela sökvägen.

GuldstrandMedlem sedan juli 20041 271 inlägg
#4

The_Hulk skrev:

när du kör whereis får du reda på att ffmpeg finns i /usr/bin/ där den hela sökvägen är /usr/bin/ffmpeg men när du försöker använda det i ditt skript skriver du /usr/bin/ffmpeg/ som path och /usr/bin/ffmpeg/ffmpeg som hela sökvägen.

Sorry.. men jag förstår inte riktigt nu. :x :l
(Får skylla på sömnbrist.)

Hur löser jag det då?

colioneMedlem sedan juni 20014 421 inlägg
#5

du tar bort ffmpeg från /user/bin/ffmpeg

GuldstrandMedlem sedan juli 20041 271 inlägg
#6

colione skrev:

du tar bort ffmpeg från /user/bin/ffmpeg

Suck... verkar inte heller fungera/hjälpa. :l :(
Får fortfarande:

Något gick fel!

colioneMedlem sedan juni 20014 421 inlägg
#7

Lägg till lite mer felhantering. Kolla exempelvis senaste felet, eller jobba med exceptions. php.net har mer information om båda sätten.

GuldstrandMedlem sedan juli 20041 271 inlägg
#8

Om jag skriver följande direkt i konsolen (använder putty), får jag följande:

[root@localhost ~]# ffmpeg -i /home/var/www/***/filmer/bilen.avi /home/var/www/***/filmer/test.avi
ffmpeg version 0.4.9-pre1, build 4718, Copyright (c) 2000-2004 Fabrice Bellard
built on Dec 10 2004 17:35:43, gcc: 3.4.3 (Mandrakelinux 10.2 3.4.3-1mdk)
Input #0, avi, from '/home/var/www/***/filmer/bilen.avi':
Duration: 00:00:00.0, bitrate: 1238956 kb/s
Stream #0.0: Video: mpeg4, 160x128, 12.36 fps
Output #0, avi, to '/home/var/www/***/filmer/test.avi':
Stream #0.0: Video: mpeg4, 160x128, 12.36 fps, q=2-31, 200 kb/s
Stream mapping:
Stream #0.0 -> #0.0
Press [q] to stop encoding
frame= 1892 q=3.0 Lsize= 3828kB time=153.0 bitrate= 204.9kbits/s
video:3779kB audio:0kB global headers:0kB muxing overhead 1.317676%

..varför fungerar det då inte direkt i scriptet? :o

GeinMedlem sedan sep. 20005 700 inlägg
#9

Lägg in

echo "START $ffmpeg/ffmpeg -i $source $cmd {$destination}.$format"

Alldeles före exec(...)-raden då så får du se vad som faktiskt körs. Men har du verkligen skrivit rätt när du skriver /user/bin/ffmpeg. Jag gissar att det ska vara /usr/bin/ffmpeg

colioneMedlem sedan juni 20014 421 inlägg
#10

Läste du vad jag skrev?

colione skrev:

Lägg till lite mer felhantering. Kolla exempelvis senaste felet, eller jobba med exceptions. php.net har mer information om båda sätten.

Det kan bero på behörighetsfel, det kan bero på att du skickar argumenten fel...att jorden är rund eller att flickan har bröst. Lite svårt att säga om du inte hjälper till med felsökningen.

GuldstrandMedlem sedan juli 20041 271 inlägg
#11

colione skrev:

Läste du vad jag skrev?

Det kan bero på behörighetsfel, det kan bero på att du skickar argumenten fel...att jorden är rund eller att flickan har bröst. Lite svårt att säga om du inte hjälper till med felsökningen.

Jo, jag läste vad du skrev.
Vet dock inte HUR jag ska kunna felsöka det hela. :r

GuldstrandMedlem sedan juli 20041 271 inlägg
#12

Gein skrev:

Lägg in

echo "START $ffmpeg/ffmpeg -i $source $cmd {$destination}.$format"

Alldeles före exec(...)-raden då så får du se vad som faktiskt körs. Men har du verkligen skrivit rätt när du skriver /user/bin/ffmpeg. Jag gissar att det ska vara /usr/bin/ffmpeg

Då fick jag:

START /usr/bin/ffmpeg/ffmpeg -i filmer/1.mpg -qscale 10 -s 320x240 -ab 96 -ac 1 filmer/1.flvNågot gick fel!

P.s. Skrev fel innan, ska såklart vara "/usr/bin/ffmpeg".

GeinMedlem sedan sep. 20005 700 inlägg
#13

Och vad är START för något kommando? Testa eventuellt att ta bort START från raden.

GuldstrandMedlem sedan juli 20041 271 inlägg
#14

Verkar fungera nu... ÄNTLIGEN. :birp
Det enda som inte verkar fungera, är att skapa en "screenshot" av filmen.
Någon som kan se felet?

<?php
 
function convert_video($source, $format, $ffmpeg, $quality, $width, $height, $bitrate, $channel, $screenshot, $seek, $pic_w, $pic_h) {
 
$screen = $width .'x'. $height;
$pic_size = $pic_w .'x'. $pic_h;
$seek = date("H:i:s", strtotime("00:00:00 +$seek seconds"));
$destination = preg_replace('/\.[a-z]{2,4}$/', '', $source);
 
$cmd = "-qscale $quality -s $screen -ab $bitrate -ac $channel";
 
   // konvertera rullen...
   echo ("ffmpeg -i $source $cmd {$destination}.$format");
   exec("ffmpeg -i $source $cmd {$destination}.$format");
   
   
   // kontrollera så att den konverterade filen verkligen finns...
   /////////////////////////////////////////////////////////////////////////////////////////////////////////////
   if (file_exists("{$destination}.$format")) {
   
   
         // Ta en screendump av filmen och spara som png
         /////////////////////////////////////////////////////////////////////////////////////////////////////////////
         if ($screenshot) {
      
            echo("ffmpeg -i $source -vcodec png -ss $seek -s {$pic_size} -vframes 1 {$destination}_%d.png");
            exec("ffmpeg -i $source -vcodec png -ss $seek -s {$pic_size} -vframes 1 {$destination}_%d.png");
         
            $screen = $destination . "_1.png";
         
         } else {
      
            $screen = false;
      
         }
      
      
      return array('video' => "{$destination}.$format", 'screen' => $screen);
   
   
   } else {
   
      return false;
      
   }
 
 
}
 
 
 
if (isset($_POST['submit'])) {
 
 
$movie = $_FILES['movie']['name'];
$path = "filmer/$movie"; // vart ska filmen sparas?
 
 
   // Flytta rullen till $path
   if(move_uploaded_file($_FILES['movie']['tmp_name'], $path)) {
 
      $type = 'flv';         // format att konvertera till
      $ffmpeg = '';   // Sökväg till mappen där ffmpeg ligger
      $q = 10;            // Kvalité på konverteringen (0=bäst, 31=sämst)
      $w = 320;            // Bredd i px
      $h = 240;            // Höjd i px
      $b = 96;            // Kvalite på ljudet: 96 kb/s
      $c = 1;               // Kanaler (1=mono, 2=stereo)
      $s = true;            // Ta screenshot? (boolean)
      $t = 3;               // hur många sekunder in i filmen ska screenshot´en tas?
      $s_w = 120;            // screenshot-bredd i px
      $s_h = 90;            // screenshot-höjd i px
      
      $convert = convert_video($path, $type, $ffmpeg, $q, $w, $h, $b, $c, $s, $t, $s_w, $s_h);
 
         // Lyckades konverteringen?
         if ($convert) {
         
            $msg = "<img src=\"$convert[screen]\" alt=\"\" /><br />
            <a href=\"$convert[video]\">". basename($convert['video']) ."</a> - Hårdrock, allt ok!";
         
         } else {
         
            $msg = "Något gick fel!";
         
         }
   
   
   
      // Radera den uppladdade filmen
      unlink($path);
      
   } else {
   
      $msg = "A problem occured while uploading $movie!";
   
   }
   
   echo $msg;
   
}

?>

<form method="post" action="filmer_test.php" enctype="multipart/form-data">
<input type="file" name="movie" size="40" /><br />
<input type="submit" name="submit" value="Ladda upp film!" />
</form>

EDIT: Hmm.. verkar inte fungera att konvertera avi-filer. :(

GuldstrandMedlem sedan juli 20041 271 inlägg
#15

Körde (i konsolen):

[root@localhost ~]# ffmpeg -i /home/var/www/***/filmer/bilen .mpg -vcodec png -ss 00:00:05 -s 140x110 -vframes 1 /home/var/www/***/f ilmer/test.png

För att ta en screenshot på 140x110, 5 sekunder in i filmen.
..och fick:

ffmpeg version 0.4.9-pre1, build 4718, Copyright (c) 2000-2004 Fabrice Bellard
built on Dec 10 2004 17:35:43, gcc: 3.4.3 (Mandrakelinux 10.2 3.4.3-1mdk)
Input #0, mpeg, from '/home/var/www/***/filmer/bilen.mpg':
Duration: 00:00:05.3, bitrate: 1581 kb/s
Stream #0.0: Video: mpeg1video, 320x236, 29.97 fps
Stream #0.1: Audio: mp2, 44100 Hz, mono, 32 kb/s
Unknown video codec 'png'

:q

GuldstrandMedlem sedan juli 20041 271 inlägg
#16

Ingen som vet hur jag löser detta? :(

GuldstrandMedlem sedan juli 20041 271 inlägg
#17

Är tacksam för hjälp. :r

GeinMedlem sedan sep. 20005 700 inlägg
#18

Du får nog göra lite mer efterforskningar vad som inte fungerar mer än att bara skriva "det fungerar inte".
Prova kör exakt samma kommando i ett konsolfönster, som du kör via php-skriptet.

GuldstrandMedlem sedan juli 20041 271 inlägg
#19

Gein skrev:

Du får nog göra lite mer efterforskningar vad som inte fungerar mer än att bara skriva "det fungerar inte".
Prova kör exakt samma kommando i ett konsolfönster, som du kör via php-skriptet.

Var ju det jag gjorde ovan, och fick...

ffmpeg version 0.4.9-pre1, build 4718, Copyright (c) 2000-2004 Fabrice Bellard
built on Dec 10 2004 17:35:43, gcc: 3.4.3 (Mandrakelinux 10.2 3.4.3-1mdk)
Input #0, mpeg, from '/home/var/www/***/filmer/bilen.mpg':
Duration: 00:00:05.3, bitrate: 1581 kb/s
Stream #0.0: Video: mpeg1video, 320x236, 29.97 fps
Stream #0.1: Audio: mp2, 44100 Hz, mono, 32 kb/s
Unknown video codec 'png'

GeinMedlem sedan sep. 20005 700 inlägg
#20

Jaha, missade det, sorry. Vet dock tyvärr inte varför du får det felet.

130 ms totalt · 3 externa anrop · v20260731065814-full.0e50b1ef
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)