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

Posted

技术标签:

【中文标题】为文件夹中的一堆 mp4 视频生成缩略图【英文标题】:Generate thumbnail for a bunch of mp4 video in a folder 【发布时间】:2013-01-17 16:39:06 【问题描述】:

我已经阅读了this,但没有太大帮助。

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

    我在 windows whit php 5.3.8 和 Apache 2.2.21 上使用 Wamp server 2.2 我从ffmpeg download page 的FFmpeg Windows Builds 部分下载了ffmpeg,从this 链接下载了静态32 版本。

    我将 7z 文件提取到我的网站根目录 这是我的 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");
    
    

但没有任何反应,缩略图文件夹始终为空! - 如何知道我的服务器上是否安装了 ffmpeg? - 如何让我的脚本正常工作? 请帮忙

【问题讨论】:

你能检查权限和路径是否定义正确吗? @DoSparKot 什么权限?我正在使用 wamp 服务器,并且我有 windows 文件夹。我让每个人都可以完全访问视频和缩略图。但没有任何改变 【参考方案1】:

试试这个:

$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);

【讨论】:

【参考方案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);
*/

【讨论】:

有趣,你能把单个文件放在 `C:\temp` 并尝试修改路径吗? 它依赖于内部常量 DIRECTORY_SEPARATOR,它在代码中是 /,对于 windows 平台输出 `\`。 @PedarJepeto 无论如何,多亏了你,现在我知道如何动态生成视频缩略图了。 :-) 它真的适合你吗?我完全复制并粘贴了代码,但无法让它工作!! :(【参考方案3】:

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

【讨论】:

ffmpeg cli 工具可以通过适当的引用或转义很好地处理空格:ffmpeg -i input "output 1.mp4" 'output 2.mp4' output\ 3.mp4 谢谢,我会试试的 我不是 PHP 用户(问题标记为 php),所以我的三个示例可能适用于 PHP,也可能不适用于 PHP。 哦,它工作得很好,我在字符串中使用“输出 1.mp4”转义引号,如下所示: - \“输出 1.mp4\” - 瞧! :) 感谢您的提示,我相信这就是它不适用于 Pedar Jepeto 的原因。

以上是关于为文件夹中的一堆 mp4 视频生成缩略图的主要内容,如果未能解决你的问题,请参考以下文章

如何使用.mp4,webm,3gp格式从视频生成缩略图

使用 php GD 创建 MP4 视频缩略图

使用ffmpeg生成视频缩略图不失真

如何创建从Android视频文件路径视频缩略图

如何在没有 ffmpeg 的情况下在 php 中创建缩略图并将视频转换为 mp4? [关闭]

win7系统下 MP4文件的视频缩略图没有了,怎么才能弄出来?