0

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

2 回答 2

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);
    }
}
于 2012-02-02T06:00:19.587 回答
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 />';
    }
于 2012-02-02T06:15:04.493 回答