1

我第一次尝试从视频文件创建缩略图预览,上传了 700mb .avi 电影,209747 帧。现在我正在尝试创建 1 个缩略图,但需要 4.7 秒,因为我已设置帧 10000,如果我将其设置为 1000,则生成缩略图只需 0.4 秒。

如何在不到一秒的时间内从不同的帧中生成 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 />';
4

1 回答 1

5

首先,您使用的是FFmpeg-php,而不是php-FFmpeg。这是两个不同的项目,您的 FFmpeg-php 项目(非常)旧。

将帧更改为第10,000帧或第1,000帧时的过程差异太大,可能是由于php-ffmpeg图像提取功能不佳造成的。你可以试试我预计需要 80 秒的第 200,000 帧吗?如果这是真的,那么这个toGDImage()功能真的太慢了​​!

然后你有一些选择来提高性能:

  1. 试试看是否可以toGDImage()直接从 FFmpeg-php 调整功能或使用命令,比如ffmpeg -ss 00:10:00 -i input.avi -vframes 1 output.jpg
  2. 或者尝试实现php-FFmpeg库,其中包含一个快速extractImage()函数,它使用上面的命令。
于 2013-04-25T10:12:32.610 回答