我需要使用 ffmpeg 同时从视频创建多个缩略图(例如 12)。例如,如果视频时长 60 秒,我需要每 5 秒提取一次屏幕截图。
我使用以下命令在第 5 秒内获取帧。
ffmpeg -ss 5 -i video.webm -frames:v 1 -s 120x90 thumbnail.jpeg
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以通过一个命令获取多个缩略图?
llo*_*gan 10
使用 获取持续时间ffprobe。这是一个可选步骤,但如果您要编写脚本或自动执行后续命令,则会很有帮助。
ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 input.mp4
Run Code Online (Sandbox Code Playgroud)
结果示例:
60.000000
Run Code Online (Sandbox Code Playgroud)
使用选择过滤器:
ffmpeg -i input.mp4 -vf "select='not(mod(t,5))',setpts=N/FRAME_RATE/TB" output_%04d.jpg
Run Code Online (Sandbox Code Playgroud)
或者
ffmpeg -i input.mp4 -vf "select='not(mod(t,5))'" -vsync vfr output_%04d.jpg
Run Code Online (Sandbox Code Playgroud)
文件将被命名为output_0001.jpg、output_0002.jpg、output_0003.jpg等。有关更多信息和选项,请参阅图像复用器文档。
要调整 JPEG 质量,请参阅如何从视频中提取高质量的 JPEG 图像ffmpeg?
这将从 60 秒持续时间的输入中输出 12 帧:
ffmpeg -i input.mp4 -vf "select='not(mod(t,60/12))'" -vsync vfr output_%04d.jpg
Run Code Online (Sandbox Code Playgroud)
您必须手动输入输入的持续时间(60如上例所示)。请参阅下面的自动方法。
ffprobe自动提供持续时间值重击示例:
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
Run Code Online (Sandbox Code Playgroud)
使用比例过滤器的示例:
ffmpeg -i input.mp4 -vf "select='not(mod(t,60/12))',scale=120:-1" -vsync vfr output_%04d.jpg
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5345 次 |
| 最近记录: |