【问题标题】:Make a video in sequential order from frames从帧按顺序制作视频
【发布时间】:2021-09-11 16:48:59
【问题描述】:

我以连续格式保存图像 - 0.jpg、1.jpg、---、99.jpg、100.jpg。我正在通过使用 ffmpeg 进行转换从这些帧制作视频:

cmd1 = 'ffmpeg -framerate 25 -pattern_type glob -i "/home/ubuntu/17/1_1/*.jpg" /home/ubuntu/17_a.avi'

但是 ffmpeg 没有按顺序读取图像。如何制作按顺序拍摄帧的视频。

【问题讨论】:

  • -vf drawtext=text='%{frame_num}': start_number=1: x=(w-tw)/2: y=h-(2*lh): fontcolor=black: fontsize=20: box=1: boxcolor=white: boxborderw=5如果传drawtext,其实可以打印帧号。

标签: python ffmpeg


【解决方案1】:

ffmpeg 的默认行为是以连续数字序列读取图像。但既然你已经指定了glob 模式,它就会使用它。删除 pattern_type 并在文件名字段中指定正确的模式。

ffmpeg -framerate 25 -i "/home/ubuntu/17/1_1/%d.jpg" /home/ubuntu/17_a.avi'

【讨论】:

  • 什么是全局模式序列? glob 模式按什么顺序读取文件?
【解决方案2】:

但是 ffmpeg 没有按顺序读取图像。如何制作按顺序拍摄帧的视频。

globs 通常提供字典顺序,即 09 因此被视为字母,如果你将数字从 1100(包括)排序,它就像 110、@ 987654327@、1112...

我不知道ffmpeg 的 glob 是否可以选择使用 natsort,但如果您可以重命名文件,使用python 填充零应该很容易,从而使字典顺序与 natsort 相同。请使用您的 jpg 文件创建目录副本,然后按照python 代码在那里运行

import glob,os
for jpg in glob.glob("*.jpg"):
    os.rename(jpg,jpg.zfill(7))

应该重命名

0.jpg, 1.jpg, ---,99.jpg, 100.jpg

000.jpg, 001.jpg, ---,099.jpg, 100.jpg

然后运行您的ffmpeg 命令并检查它是否正常工作。 .zfill 用零填充到指定宽度,我使用 7 作为姓氏 100.jpg 有 7 个字符。如果是 1000.jpg,则至少需要 8 个,依此类推。

【讨论】:

    猜你喜欢
    • 2011-01-18
    • 2023-04-09
    • 1970-01-01
    • 2020-09-17
    • 2011-04-29
    • 2016-05-19
    • 2021-03-12
    • 2016-02-13
    • 1970-01-01
    相关资源
    最近更新 更多