0

我正在尝试images使用.mp4ffmpeg

我只想要文件中每个视频的前 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 秒的图像吗?非常感谢!

4

1 回答 1

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不是必需的。

  • 比例过滤器可以根据您的给定值自动调整高度或宽度,-1从而保留纵横比。这避免了绝对调整大小可能导致的拉伸或挤压。这意味着$ALL_PLACE_HEIGHT = 220;不需要。

  • 用于-frames:v 1输出一帧。

  • -ss是偏移时间,或您想要图像的时间。

于 2013-05-23T00:15:34.203 回答