2013-04-25 134 views
0

我第一次嘗試從視頻文件創建縮略圖預覽,上傳了帶有209747幀的700mb .avi電影。現在我正在嘗試創建1個縮略圖,但它需要4.7秒,因爲我設置了10000幀,如果將其設置爲1000,則只需要0.4秒即可生成縮略圖。php-ffmpeg太慢 - 生成縮略圖?

我怎麼能在不到一秒的時間內從不同的框架中生成5-10個縮略圖?它甚至有可能嗎?使用exec(ffmpeg)還是php-ffmpeg有什麼不同? 在機器2x Xeon L5420上使用0.6-svn ffmpeg,Debian 6.0.7,php 5.4.14,仍然很慢......任何想法?如何使用視頻ffmpeg +時間而不是幀?

$movie = 'ai.avi'; 
$thumbnail = 'thumbnail.jpg'; 

$mov = new ffmpeg_movie($movie); 
$frame = 10000; 
$frame = $mov->getFrame($frame); 

if($frame) { 
    $gd_image = $frame->toGDImage(); 
    if($gd_image) { 
    imagejpeg($gd_image, $thumbnail, 100); 
    imagedestroy($gd_image); 
    } 
} 
echo '<img src="'.$thumbnail.'" ><br />'; 

回答

5

首先,您使用的是FFmpeg-php而不是php-FFmpeg。這是兩個不同的項目,您的FFmpeg-php項目(非常)舊。

將框架更改爲第10,000或第1,000幀時的過程差異太高,可能是由於較差的php-ffmpeg圖像提取功能造成的。你可以嘗試第200,000幀,我預計它會花費80秒嗎?如果這是真的,那麼toGDImage()功能太嚴重了!

然後你有一些選項來提高性能:

  1. 試圖找出如果你能調整toGDImage()功能或使用從FFmpeg的,PHP的直接命令,像ffmpeg -ss 00:10:00 -i input.avi -vframes 1 output.jpg
  2. 或嘗試實施php-FFmpeg庫,它包含一個快速的extractImage()函數,它使用上面的命令。
+0

是的我使用的是FFmpeg-php那個舊的,在dotdeb包裏它叫做php5-ffmpeg ....我花了51秒生成200k幀,現在安裝了ffmpeg並完成了exec(),image被保存在0.08s,這是令人印象深刻的!非常感謝 - upvote!一個問題:我在哪裏可以找到ffmpeg的一些變量列表?如果我想將圖像質量降低到80或者提取一些關於視頻文件的信息 - 比如幀數,長度等等?感謝:] – 2013-04-25 12:39:48

+0

這51秒解釋它是如何非常慢,更新的好工作!嘗試閱讀[FFmpeg CLI文檔](http://www.ffmpeg.org/ffmpeg.html),它描述了您剛剛要求的所有內容。互聯網上也有很多教程。 – 2013-04-25 12:45:14