为文件夹中的一堆mp4视频生成缩略图

时间:2013-02-02 12:46:16

标签: php ffmpeg thumbnails

我已阅读this,但没有太多帮助。

我有一个名为视频的文件夹和另一个名为缩略图的文件夹。我在视频文件夹中有很多mp4视频,并希望使用ffmpeg和php在第4秒捕捉到缩略图文件夹中的缩略图。

  1. 我在windows whit php 5.3.8和Apache 2.2.21
  2. 上使用Wamp server 2.2
  3. 我从ffmpeg download page FFmpeg Windows Builds 部分下载了ffmpeg,从this链接下载了静态32版本。
  4. 我将7z文件解压缩到我的网站root 这是我的PHP代码:

    $ffmpeg = "includes/ffmpeg/bin/ffmpeg";
    foreach(glob('files/videos/*.mp4') as $pathname){
      $filename = substr($pathname,13,strripos($pathname,'.mp4')-13);
      $thumbnail = 'files/thumbnails/'.$filename.'.jpg';
      exec("ffmpeg -i $pathname -an -y -f mjpeg -ss 00:00:04 -vframes 1 $thumbnail");
    }
    
  5. 但没有任何反应,缩略图文件夹始终为空! - 我怎么知道我的服务器上是否安装了ffmpeg? - 如何让我的脚本工作?
    请帮忙

3 个答案:

答案 0 :(得分:3)

试试这个:

$ffmpeg = "c:/wamp/www/includes/ffmpeg/bin/ffmpeg";
$videos = "c:/wamp/www/files/videos/*.mp4";
$ouput_path = "c:/wamp/www/files/thumbnails/";
foreach(glob($videos) as $v_file){
    $fname = basename($v_file, ".mp4");
    $thmb = $ouput_path.$fname.'_tn.jpg';
    $cmd = "$ffmpeg -i $v_file -an -y -f mjpeg -ss 00:00:04 -vframes 1 $thmb";
    $stat = system ($cmd);
}

答案 1 :(得分:2)

尝试使用命令中的绝对路径而不是依赖于PATH ENV变量: exec()system()都有效。解决路径定义。

/* Using Absolute paths */
$ffmpeg = "c:/wamp/www/includes/ffmpeg/bin/ffmpeg";
$videos = "c:/wamp/www/files/videos/*.mp4";
$ouput_path = "c:/wamp/www/files/thumbnails/";

foreach(glob($videos) as $video_file){

    $filename = basename($video_file, ".mp4");
    $thumbnail = $ouput_path.$filename.'_tn.jpg';
    $command = "$ffmpeg -i $video_file -an -y -f mjpeg -ss 00:00:04 -vframes 1 $thumbnail";

    $status = system ($command);
/*or
    $status = exec($command);

    if ($status === false) {
        var_dump("ERROR: Conversion Failed!!!!");
    } else
        var_dump($status);
*/
}

答案 2 :(得分:0)

我不允许添加评论,因此这里(作为帖子)是我在处理此问题时发现的: 文件名中的空格会阻止ffmpeg查找正确的文件。因此,一种方法是更改​​文件名。