2012-02-02 35 views
0

我已經搜索了Google和StackOverFlow的所有內容,但仍未找到解決方案。通過FFmpeg和PHP創建目錄中的所有文件的視頻縮略圖

我要生成目錄中的所有的MP4視頻文件的視頻縮略圖,並命名爲縮略圖「filename.mp4」的.jpg

我的ffmpeg和安裝在我的服務器上的ffmpeg的PHP。我同時也成功創建了一個文件的縮略圖。

所以這就是情況,我有一個名爲uploads的目錄,它有很多mp4視頻。 現在,當我運行腳本時,應自動創建大小爲100x100的縮略圖,並將其放置在另一個文件夾「skrin」中。例如:xxx.mp4應該有xxx.mp4.jpg有拇指名稱。

重要提示:我的文件名在其文件名中有空格,單引號,括號等。所以腳本應該能夠處理這個問題。

有人能幫助我嗎?我使用下面的shell命令在php中使用exec來生成單個視頻的大拇指。

exec("/usr/local/bin/ffmpeg -itsoffset -105 -i 'xxx haha.mp4' -vcodec mjpeg -vframes 1 -an -f rawvideo -s 100x100 'xxx haha.mp4.jpg'"); 

回答

3

這只是一個快速:

$videos_dir = 'path/to/videos'; 
$videos_dir = opendir($videos_dir); 
$output_dir = 'path/to/output/dir/'; 
while (false !== ($file = readdir($videos_dir))) { 
    if ($file != '.' && $file != '..'){ 
     $in = $videos_dir.'/'.$file; 
     $out = $output_dir.$file.'.jpg'; 
     exec("/usr/local/bin/ffmpeg -itsoffset -105 -i ".$in." -vcodec mjpeg -vframes 1 -an -f rawvideo -s 100x100 ".$out); 
    } 
} 
+0

幾乎正是我要發佈。你擊敗了我30秒。 :) – ghoti 2012-02-02 06:04:50

+0

正如我所說這是一個快速的!大聲笑 – sally 2012-02-02 06:08:08

+0

唯一的問題是OP希望輸出文件被命名爲* .jpg。 – ghoti 2012-02-02 15:11:26

2

試試這個

try 
    { 
     $directory = 'your directory name'; 
     $dir = new RecursiveDirectoryIterator($directory); 
     $it = new RecursiveIteratorIterator($dir); 
     while($it->valid()) { 

      if (!$it->isDot()) { 
       //echo 'SubPathName: ' . $it->getSubPathName() . "\n"; 
       //echo 'SubPath:  ' . $it->getSubPath() . "\n"; 
       //echo 'Key:   ' . $it->key() . "\n\n"; 
       echo $name = $it->key(),"\n"; 
       exec("/usr/local/bin/ffmpeg -itsoffset -105 -i $name -vcodec mjpeg -vframes 1 -an -f rawvideo -s 100x100 $name.'.jpg'");  
      } 

      $it->next(); 
     } 
    } 
    catch(Exception $e) 
    { 
     echo 'No files Found!<br />'; 
    }