Php ffmpeg生成具有纵横比的缩略图,但在视频中为X秒
因此,此命令用于在视频中生成5秒大小为300x300的缩略图:Php ffmpeg生成具有纵横比的缩略图,但在视频中为X秒,php,ffmpeg,Php,Ffmpeg,因此,此命令用于在视频中生成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
$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;
难道你没有忘记
-filter:v
之前的比例
?@slhck是的,你应该把它作为答案发布。