【问题标题】:Create Video Thumbnail of All Files in a Directory via FFmpeg and PHP通过 FFmpeg 和 PHP 创建目录中所有文件的视频缩略图
【发布时间】:2012-02-24 20:02:09
【问题描述】:

我已经在 Google 和 StackOverFlow 上进行了搜索,但仍然没有找到解决方案。

我想生成一个目录中所有mp4视频文件的视频缩略图,并将缩略图命名为“filename.mp4”.jpg

我的服务器上安装了 ffmpeg 和 ffmpeg-php。我还成功地一次创建了一个文件的缩略图。

所以情况就是这样,我有一个名为 uploads 的目录,里面有很多 mp4 视频。 现在,当我运行脚本时,应该自动创建大小为 100x100 的缩略图并将其放置在另一个文件夹“skrin”中。例如:xxx.mp4 应该有 xxx.mp4.jpg 有拇指名称。

重要提示:我的文件名中包含空格、单引号、括号等。所以脚本应该能够处理这个。

有人可以帮我吗?我在 php 中使用以下 shell 命令使用 exec 生成单个视频的缩略图。

exec("/usr/local/bin/ffmpeg -itsoffset -105 -i 'xxx haha.mp4' -vcodec mjpeg -vframes 1 -an -f rawvideo -s 100x100 'xxx haha.mp4.jpg'");

【问题讨论】:

    标签: php linux ffmpeg ffmpeg-php video-thumbnails


    【解决方案1】:

    这只是一个快速的:

    $videos_dir = 'path/to/videos';
    $videos_dir = opendir($videos_dir);
    $output_dir = 'path/to/output/dir/';
    while (false !== ($file = readdir($videos_dir))) {
        if ($file != '.' && $file != '..'){
            $in = $videos_dir.'/'.$file;
            $out = $output_dir.$file.'.jpg';
            exec("/usr/local/bin/ffmpeg -itsoffset -105 -i ".$in." -vcodec mjpeg -vframes 1 -an -f rawvideo -s 100x100 ".$out);
        }
    }
    

    【讨论】:

    • 几乎就是我要发布的内容。你比我早了 30 秒。 :)
    • 唯一要注意的是 OP 希望将输出文件命名为 *.jpg。
    • 我的视频标题中有空格。我应该如何处理? @ghoti
    • @VaibhavKadam ...在此答案中由exec() 函数运行的命令行无法引用文件名($in$out)。添加引号,你应该很高兴。更好的是,为了更清楚起见,请使用sprintf() 构造您的命令,而不是使用点运算符将管道绑起来。
    【解决方案2】:

    试试这个

    try
        {
            $directory = 'your directory name';
            $dir = new RecursiveDirectoryIterator($directory);
            $it = new RecursiveIteratorIterator($dir);
            while($it->valid()) {
    
                if (!$it->isDot()) {
                    //echo 'SubPathName: ' . $it->getSubPathName() . "\n";
                    //echo 'SubPath:     ' . $it->getSubPath() . "\n";
                    //echo 'Key:         ' . $it->key() . "\n\n";
                    echo $name = $it->key(),"\n";
                    exec("/usr/local/bin/ffmpeg -itsoffset -105 -i $name -vcodec mjpeg -vframes 1 -an -f rawvideo -s 100x100 $name.'.jpg'");    
                }
    
                $it->next();
            }
        }
        catch(Exception $e)
        {
            echo 'No files Found!<br />';
        }
    

    【讨论】:

      猜你喜欢
      • 2013-12-20
      • 2011-04-24
      • 2017-12-27
      • 2012-02-24
      • 2014-02-06
      • 2019-06-08
      • 1970-01-01
      • 2023-03-18
      相关资源
      最近更新 更多