通过FFmpeg和PHP创建目录中所有文件的视频缩略图

时间:2012-02-02 05:43:50

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

我搜索了整个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'");

2 个答案:

答案 0 :(得分:3)

这只是一个快速的问题:

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

答案 1 :(得分: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 />';
    }