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

Php 从视频中获取图像而不指定高度,php,ffmpeg,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 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"');
有人能告诉我这个解决方案吗?

首先,如果
echo“Y”
打算在没有提示的情况下覆盖现有缩略图,则
-Y
标志会执行此操作

现在,假设您希望图像在维度中不大于1170像素,您可以通过调用
缩放
视频过滤器和适当的参数来替换
-s
参数

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"');
这不会放大两个方向上小于1170像素的视频。如果您希望放大这些缩略图,请将
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)

如果图像应始终具有1170像素的宽度,即使这使其比1170像素高,也应使用
scale=1170:ih*1170/iw


最后,要将宽度减小到1170像素,仅当它更宽时,
scale=min(iw\,1170):min(ih\,ih*1170/iw)

我在图像的顶部/底部看到黑色部分,所以您能建议我解决方案吗?对不起,我不知道。我的视频没有这个问题。也许提出一个进一步的问题,看看是否有人经历过它?补充了一个新问题,如果你能在这个案例中帮助我的话。