因此,此命令适用于在视频中生成5秒的缩略图,大小为300x300:
$cmd = '/usr/local/bin/ffmpeg -i '.$this->getUploadRootDir().'/'.$fname.' -ss 00:00:05 -f image2 -vframes 1 -s 300x300 '.$this->getUploadRootDir().'/thumb_'.$output;
然而,我想保持纵横比,所以我把代码改为:
$cmd = "/usr/local/bin/ffmpeg -i ".$this->getUploadRootDir()."/".$fname." -ss 00:00:5 -f image2 scale='min(300', iw):-1' ".$this->getUploadRootDir()."/thumb_".$output;
上面的代码正确地调整了图像的大小,但它是视频中第一帧的。。我需要缩略图在5秒内。如果有任何帮助,我将不胜感激。
您可以使用类似于的命令行来完成此操作
ffmpeg -i inputVideo -vf scale='min(300,iw)':-1 -ss 00:00:05 -f image2 -vframes 1 thumbnail.jpg
因此,在您的脚本中,在缩放之前添加-vf
(视频过滤器),并重新排序输入和输出参数,如下所示:
$cmd = "/usr/local/bin/ffmpeg -i ".$this->getUploadRootDir()."/".$fname." -vf scale='min(300', iw):-1' -ss 00:00:5 -f image2 -vframes 1 ".$this->getUploadRootDir()."/thumb_".$output;
@alexbuisson有正确的答案,但只是为了确认我今天正在玩ffmpeg:
这对我有效:
ffmpeg -i "my_video.mp4" -ss 00:00:05 -f image2 -vf scale="min(300', iw):-1" -vframes 1 "capture.jpg"
我得到一个Jpeg 300像素宽与正确的图像比例。
如此适应您的代码,这就变成了:
$cmd = "/usr/local/bin/ffmpeg -i ".$this->getUploadRootDir()."/".$fname." -ss 00:00:05 -f image2 -vf scale='min(300', iw):-1' ".$this->getUploadRootDir()."/thumb_".$output;