我已经读过这篇文章,但没有太大帮助。
我有一个名为视频的文件夹和另一个称为缩略图的文件夹。我在视频文件夹中有很多 mp4 视频,并希望使用 ffmpeg 和 php 在第 4 秒捕获缩略图文件夹的缩略图。
- 我在 Windows 上使用 Wamp 服务器 2.2 和 php 5.3.8 和 Apache 2.2.21 我从ffmpeg下载
- 页面的FFmpeg Windows构建部分下载了ffmpeg,并从此链接下载了静态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?
- 如何让我的脚本工作?
请帮忙
试试这个:
$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);
}
尝试在命令中使用绝对路径,而不是依赖于 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);
*/
}
我不允许添加评论,所以这里(作为帖子)是我在处理这个问题时发现的:文件名中的空格会阻止 ffmpeg 找到正确的文件。因此,一种方法是更改文件名。