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