使用 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);