【问题标题】:Name ffmpeg generated images using timestamp rather than sequential numbers使用时间戳而不是序列号命名 ffmpeg 生成的图像
【发布时间】:2011-08-03 18:55:16
【问题描述】:

据我从 ffmpeg 文档中得知,它们没有提供在文件名中使用时间戳而不是序号的方法。他们提供的内容允许您创建 0001.jpg、0002.jpg、0003.jpg 但不能创建 2011-08-01 7:30:00.jpg、2011-08-01 7:30:01.jpg、2011-08- 01 7:30:02.jpg。谁能想到一个解决方案,可以从 ffmpeg 中获取按顺序命名的文件并使用它们创建的时间命名它们?

【问题讨论】:

标签: ffmpeg filenames


【解决方案1】:

至少ffmpeg 的较新版本具有strftime 选项,可让您为所欲为。

例如:

ffmpeg -f v4l2 -r 1 -i /dev/video0 -f image2 -strftime 1 "%Y-%m-%d_%H-%M-%S.jpg"

会生成文件如:

2015-11-20_16-25-06.jpg

【讨论】:

    【解决方案2】:

    在 unixoid 系统上,您可以使用 find + ImageMagick 来识别每个文件及其创建日期时间。 ImageMagick 通常必须安装:

    find -name "*.jpg" -execdir identify -verbose {} ";" -ls | egrep "(create|^Image)" 
    Image: ./logo-text-u-sinn.4.2.do.jpg
        date:create: 2011-08-03T12:16:55+02:00
    Image: ./tasten-in-tasse_3919.jpg
        date:create: 2011-06-14T22:37:07+02:00
    

    gnu:find 也可用于 Windows,但通常不由 Microsoft 分发。取而代之的是,Microsoft 有自己的、低级 (afaik) 类型的 find(.exe),其语法非常不同。

    因此,如果您安装 gnu-find,则必须使用整个路径调用它,或者重命名为 gfind,例如,以防止名称冲突。

    我会写一个小脚本

    #!/bin/bash
    name=$1 
    dt=$(identify -verbose $name grep "create:")
    datetime=${dt/*create:/}
    mv $name $datetime.jpg 
    

    容易受到文件名的影响,包括空白,但如果你的文件总是命名为 0001.jpg 等,那是没有问题的。

    脚本会生成2011-08-03T12:39:42+02:00,例如作为文件名,并且可以通过 find 调用:

    find -name "*.jpg" -execdir ./myscript.sh {} ";"
    

    如果你不使用/有 bash,你需要相应地修改它。

    警告:

    你必须小心。如果 2 个或更多文件的时间相同,它们将被静默覆盖。当然你可以在你的脚本中建立一个检查,也许你的文件系统可以比秒间隔更精确地存储日期。

    【讨论】:

    • 我认为您不需要运行识别。您可以只使用文件的创建日期。或者,您可以只搜索生成文件名的点并与当前时间进行交换。
    • 如果文件没有被移动而不保留它们的属性,是的。
    【解决方案3】:

    我在源代码上运行了这个 grep:

    ffmpeg$ fgrep -r snprintf *|grep name
    ...    
    ffmpeg.c:    snprintf(filename, sizeof(filename), "vstats_%02d%02d%02d.log", today->tm_hour, today->tm_min,
    ...
    

    肯定有生成带有日期的文件名的代码。 您可以尝试使用选项 -vstats 运行命令。也许它会为每个输出文件生成一个日志文件。

    不幸的是,代码相当复杂。我现在看不到创建 JPEG 文件名的位置。如果您的程序直接运行,请使用“strace”,但我懒得这样做。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-02
    • 1970-01-01
    • 2010-11-17
    • 1970-01-01
    • 1970-01-01
    • 2015-08-09
    • 2013-11-21
    • 2023-04-07
    相关资源
    最近更新 更多