Php Imagemagick创建拇指
我有一个tube站点,我使用这个功能从视频文件生成拇指Php Imagemagick创建拇指,php,imagemagick,Php,Imagemagick,我有一个tube站点,我使用这个功能从视频文件生成拇指 $thumbwidth = 240; //thumb width $thumbheight = 180; //thumb height $imagick_command = "-modulate 110,102,100 -sharpen 1x1 -enhance"; shell_exec("$ffmpeg_path -ss $first -i \"".$row[file]."\" -vcodec mjpeg -vframes 1 -an
$thumbwidth = 240; //thumb width
$thumbheight = 180; //thumb height
$imagick_command = "-modulate 110,102,100 -sharpen 1x1 -enhance";
shell_exec("$ffmpeg_path -ss $first -i \"".$row[file]."\" -vcodec mjpeg -vframes 1 -an -f rawvideo -s ".$thumbwidth."x".$thumbheight." \"$image\"");
shell_exec("/usr/local/bin/mogrify $imagick_command $image");
这是拇指的结果,这张图片正是我需要的,没有边框等等
但有时根据视频,我会有这样的拇指
从拇指上删除此黑色空间的最佳方法是什么,但需要保持拇指大小为240x180您需要:
-vf scale=“.$thumbwidth.”:trunc(ow/a/2)*2
-调整“$thumbwidth.”x“$thumbheight.”的大小代码>如下
$thumbwidth = 240; //thumb width
$thumbheight = 180; //thumb height
$imagick_command = "-modulate 110,102,100 -sharpen 1x1 -enhance -resize ".$thumbwidth."x".$thumbheight."\!";
shell_exec("$ffmpeg_path -ss $first -i \"".$row[file]."\" -vcodec mjpeg -vframes 1 -an -f rawvideo -vf scale=".$thumbwidth.":trunc(ow/a/2)*2 \"$image\"");
shell_exec("/usr/local/bin/mogrify $imagick_command $image");
在ffmpeg上测试,从去年9月开始构建,参数设置为实际值,以便于阅读:
ffmpeg -ss 1 -i GOPR9876.MP4 -vcodec mjpeg -vframes 1 -an -f rawvideo -vf scale=240:trunc\(ow/a/2\)*2 "foo.jpg"
使用ffmpeg缩放过滤器创建溢出240x180像素区域的缩略图 假设您有一个320x256像素的视频。要获得240的宽度,需要使用因子0.75进行缩放。要获得180的高度,需要使用0.70进行缩放。如果取两个因子中的最大值,则会得到大小为240x192的缩略图,该缩略图会溢出目标区域而没有任何黑色边框 接下来进行中心裁剪,以获得完美的240x180缩略图,上下移动6px 如果视频高度大于其宽度,则计算结果相同。调整大小后,您将有一个高度为180、宽度稍大的缩略图,裁剪将占据缩略图的中心部分,使其更加完美 使用ffmpeg,可以在过滤器链中使用缩放和裁剪过滤器:
-vf scale='iw*max(240/iw\, 180/ih):-1', crop=240:180`
从外部输入创建命令行字符串时,应使用escapeshellarg()
。以下是您可以使用的PHP代码:
<?php
// static configuration - safe
$thumbwidth = 240;
$thumbheight = 180;
$ffmpeg_path = 'ffmpeg';
// foreign input - unsafe
$first = '00:00:30';
$row = array('file' => '/home/goran/File Name.avi');
$image = '/home/goran/File Name.jpg';
$cmd = sprintf('%s ' .
'-ss %s -i %s -vcodec mjpeg -vframes 1 -an -f rawvideo ' .
'-vf scale=\'iw*max(%d/iw\, %d/ih):-1\', crop=%d:%d '.
'%s',
$ffmpeg_path,
escapeshellarg($first), escapeshellarg($row['file']),
$thumbwidth, $thumbheight, $thumbwidth, $thumbheight,
escapeshellarg($image));
shell_exec($cmd);
Hmm这行shell\u exec(“$ffmpeg\u path-ss$first-i\”.$row[file]。“\”-vcodec mjpeg-vframes 1-an-f rawvideo-vf scale=“.$thumbwidth.”:trunc(ow/a/2)*2\“$image\”代码>日志显示:每秒创建thumb#0:1…失败!无法创建缩略图!是的,我已经在尝试使用scale=240:trunc\(ow/a/2\)*2
,但不知道这里有什么问题您的ffmpeg版本可能不支持它-让我们来测试一下我的ffmpeg版本,使用固定大小的ffmpeg-ss 1-i GOPR9876.MP4-vcodec mjpeg-vframes 1-an-f rawvideo-s 400x100“foo3.jpg”
我没有黑色边框。这很奇怪。你的源视频是被设置为变形的还是什么的?或者更有趣的是,实际视频上有黑色边框?你的意思是从命令行ffmpeg-ss50-i2.flv-vcodec mjpeg-vframes 1-an-f rawvideo-vf scale='iw*max(240/iw\,180/ih):-1'-vf crop='240:180'“1.jpg”
?是的,拇指被创建了,但同样带有黑色边框。。。六羟甲基三聚氰胺六甲醚。。也许我需要创建和youtube上相同尺寸的拇指,如果我能看到youtube生成16:9的拇指?尝试使用-vf scale='iw*max(240/iw\,180/ih):-1',裁剪=240:180