【问题标题】:FFmpeg Flags for generating fixed amount of images related to video length用于生成与视频长度相关的固定数量图像的 FFmpeg 标志
【发布时间】:2025-12-05 09:10:01
【问题描述】:

我正在使用这个命令:

ffmpeg -i file.mp4 -vf fps=1/60 -s 274x175  thumb%d.png

每分钟从视频中提取一帧。 我想学习如何做的是: 从视频中提取总共 10 张与视频距离相关的图像,无论其长度如何。

例子:

1.如果视频长度为 15 分钟(900 秒),它将从每 90 秒的视频中提取一张图像。 2.如果视频长度为22分钟(1320秒),它将从每132秒的视频中提取一张图像。

还有一件事,是否可以使用 ffmpeg 设置这些图像的输出质量或限制将要输出的每个图像的最大尺寸(如文件大小,不是尺寸) ?

【问题讨论】:

    标签: video ffmpeg png


    【解决方案1】:

    您必须编写脚本。

    快速简便的方法

    将从ffprobe 获取持续时间:

    $ ffprobe -v error -select_streams 0:v -show_entries format=duration -of default=nw=1 input.mkv 
    duration=600.032000
    

    但是,这可能不准确。

    持续时间可能很“脆弱”

    如果您的输入被损坏或损坏,它可能会返回错误的持续时间。 (您可以使用dd 截断某些格式来测试它。)如果您确信您的输入没有问题,那么ffprobe 可以是一种快速简便的方法。

    一种较慢但更安全的方法

    如果您发现 ffprobe 返回不正确的值有问题,那么您必须完全解码文件:

    $ ffmpeg -i input -f null -
    

    解析控制台输出的倒数第二行,您将看到列出的实际持续时间如下:

    time=00:04:44.95
    

    这可能几乎是即时的,也可能需要几秒钟。这需要多长时间取决于您的输入持续时间、输入复杂性和您的硬件。

    图像质量

    你问:

    是否可以使用 ffmpeg 设置这些图像的输出质量

    PNG

    不,因为它是无损的。您可以使用-compression_level 选项控制压缩量,但ffmpeg 默认已使用最高压缩量。

    JPG

    是的,-q:v-b:v。对于-q:v,要测试的合理范围在 2-8 之间:值越高,质量越低,文件越小。

    【讨论】:

      【解决方案2】:

      没有真正的方法可以做到这一点,因为 FFmpeg 并不真正“知道”每个流的确切长度。但是,如果您事先运行 ffmpeg -i input,您可以使用它来“猜测”流的长度(基于容器的内容)并使用它,我想。

      【讨论】:

        最近更新 更多