以相同的时间/间隔从视频创建多个缩略图

  • 本文关键字:创建 视频 略图 时间 ffmpeg
  • 更新时间 :
  • 英文 :


我需要使用 ffmpeg 在相同的时间从视频中创建多个缩略图(例如 12(。 因此,例如,如果视频是 60 秒 - 我需要每 5 秒提取一次屏幕截图。

我使用以下命令在 5 秒内获取帧。

ffmpeg -ss 5 -i video.webm -frames:v 1 -s 120x90 thumbnail.jpeg

有没有办法用一个命令获取多个缩略图?

获取持续时间(可选(

使用ffprobe获取持续时间。这是一个可选步骤,但如果您要编写脚本或自动执行下一个命令,则此功能非常有用。

ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 input.mp4

示例结果:

60.000000

每 5 秒输出一帧

使用选择过滤器:

ffmpeg -i input.mp4 -vf "select='not(mod(t,5))',setpts=N/FRAME_RATE/TB" output_%04d.jpg

ffmpeg -i input.mp4 -vf "select='not(mod(t,5))'" -vsync vfr output_%04d.jpg
  • 文件将被命名为output_0001.jpgoutput_0002.jpgoutput_0003.jpg等。有关详细信息和选项,请参阅映像复用器文档。

  • 要调整 JPEG 质量,请参阅如何从带有ffmpeg的视频中提取高质量的 JPEG 图像?

输出特定数量的等间距帧

这将从 60 秒持续时间的输入中输出 12 帧:

ffmpeg -i input.mp4 -vf "select='not(mod(t,60/12))'" -vsync vfr output_%04d.jpg

您必须手动输入输入的持续时间(如上例中60所示(。请参阅下面的自动方法。

使用ffprobe自动提供持续时间值

Bash示例:

input=input.mp4; ffmpeg -i "$input" -vf "select='not(mod(t,$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 $input)/12))'" -vsync vfr output_%04d.jpg

带比例过滤器

使用缩放筛选器的示例:

ffmpeg -i input.mp4 -vf "select='not(mod(t,60/12))',scale=120:-1" -vsync vfr output_%04d.jpg

$ffmpegPath = exec('whatffmpeg'(; $ffprobePath = exec('what ffprobe'(;

$command = "$ffprobePath -v 错误 -show_entries 格式=持续时间 -默认值=noprint_wrappers=1:nokey=1 $input_video"; $video_持续时间 = shell_exec($command(;

$thumbnails_output = 'output%02d.png'; $command = "$ffmpegPath -i $input_video -vf fps=3/$video_duration $thumbnails_output"; shell_exec($command(;

最新更新