我正在尝试使用images
从mp4
视频文件生成ffmpeg
。
我只想要文件中每个视频的前3秒。
我有以下命令..
$videoFile = $mp4File; //I have many mp4 files
$ffmpeg ="/usr/ffmpeg";
$image_path = $videoFile;
$ALL_PLACE_WIDTH = 300;
$ALL_PLACE_HEIGHT = 220;
$image_cmd = " -r 1 -r 0.03 -s ".$ALL_PLACE_WIDTH."x".$ALL_PLACE_HEIGHT." -f image2 ";
$dest_path = 'project/image-%01d.png';
$str_command= $ffmpeg ." -i " . $image_path . $image_cmd .$dest_path;
shell_exec($str_command);
我正在尝试为每个mp4
文件生成第3张图像,但我的脚本会生成大量图像,并在整个mp4
文件中创建图像。
我可以限制脚本只获取前3秒图像吗?非常感谢!
答案 0 :(得分:1)
如果我理解正确,你需要三秒内的一张图片。
变化:
$image_cmd = " -r 1 -r 0.03 -s ".$ALL_PLACE_WIDTH."x".$ALL_PLACE_HEIGHT." -f image2 ";
为:
$image_cmd = " -vf scale=".$ALL_PLACE_WIDTH.":-1 -frames:v 1 -ss 3 ";
有什么不同?
-r
和-f image2
不是必需的。
scale filter可以根据您的给定值自动调整-1
的高度或宽度,以保留方面。这样可以避免因绝对调整大小而导致拉伸或压扁。这意味着不需要$ALL_PLACE_HEIGHT = 220;
。
使用-frames:v 1
输出一帧。
-ss
是偏移时间,或您想要图像的时间。