2013-04-25 76 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