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