从视频中获取图像而不指定高度

时间:2016-06-22 10:22:46

标签: php ffmpeg

我正在使用以下代码从视频中提取图像。

shell_exec('echo "Y" | ffmpeg  -itsoffset -4  -i "'.base_path().'/assets/videos/'.$file_name.'.mp4" -vcodec mjpeg -vframes 1 -an -f rawvideo -s 1170x300 "'.base_path().'/assets/videos/thumbnail/'.$file_name.'.jpg"');

这里我给出了静态高度,因为图像是拉伸所以我不想指定高度,所以有任何方法可以通过保持图像质量自动调整高度。

我也试过以下代码,但没有用

shell_exec('echo "Y" | ffmpeg  -itsoffset -4  -i "'.base_path().'/assets/videos/'.$file_name.'.mp4" -vcodec mjpeg -vframes 1 -an -f rawvideo -s 1170x-1 "'.base_path().'/assets/videos/thumbnail/'.$file_name.'.jpg"');

有人可以告诉我解决方案吗?

1 个答案:

答案 0 :(得分:1)

首先,如果echo "Y" |打算在没有提示的情况下覆盖现有的缩略图,-y会有一个ffmpeg标记来执行此操作。

现在,假设您希望图片在 维度中不大于 1,170像素,您可以将-s参数替换为调用scale视频过滤器和相应的参数。

shell_exec(
    'ffmpeg -y -itsoffset -4  -i "'.base_path().'/assets/videos/'.$file_name.'.mp4"'
    . ' -vcodec mjpeg -vframes 1 -an -f rawvideo'
    . ' -filter:v "scale=iw*min(min(1170/iw\,1170/ih)\,1):ih*min(min(1170/iw\,1170/ih)\,1)"'
    . ' "'.base_path().'/assets/videos/thumbnail/'.$file_name.'.jpg"');

这并不能在两个方向上放大小于1,170像素的视频。如果您希望扩展这些缩略图,请将scale=iw*min(min(1170/iw\,1170/ih)\,1):ih*min(min(1170/iw\,1170/ih)\,1)替换为scale=iw*min(1170/iw\,1170/ih):ih*min(1170/iw\,1170/ih)

如果图像始终的宽度为1,170像素,即使它高于1,170像素高,也请使用scale=1170:ih*1170/iw

最后,只有宽度增加到1,170像素,scale=min(iw\,1170):min(ih\,ih*1170/iw)