【问题标题】:How can i create an mp4 out of an image sequance如何从图像序列中创建 mp4
【发布时间】:2021-10-13 10:00:00
【问题描述】:

我正在尝试创建一个程序,我可以给它一个源文件夹(包含例如 jpeg 图像)和一个目标文件夹(mp4 将转到)我希望能够设置一个特定的延迟例如,每张图片都会显示第一张图片 1 秒,第二张图片会显示 4 秒

我不想使用 FFmpeg 我想在这个过程中编辑图像,所以我宁愿有一个 for 循环或类似的东西,这样我就可以编辑每个图像

我尝试过使用 FFmpeg 和 moviepy 我不知道该怎么做 有什么想法吗?

如果有人知道我如何拍摄尺寸不正确的图像并将其复制到图像的背景上使其更大并模糊它,那是另一回事吗?所以图像有它的原始大小,背景模糊,是它的副本

【问题讨论】:

  • “我不想使用 FFmpeg” 为什么不呢?
  • 我希望能够使用更难的 ffmpeg 自定义代码
  • 您能否举例说明您想对图像执行什么处理?
  • 添加一个模糊的背景(我问题的最后 3 行..)可能会转换为灰度等..

标签: python image image-processing video-processing


【解决方案1】:

如果您想手动执行,并且假设您有一堆 .jpeg 文件并且您知道每个文件的持续时间,那么使用 opencv.VideoWriter(),您可以根据帧速率重复帧,然后写入所有帧进入输出。

import cv2

# Each video has a frame per second which is number of frames in every second
frame_per_second = 15

files_and_duration = [
    ('file1.jpeg', 4),
    ('file2.jpeg', 1),
    ('file3.jpeg', 2)
]

w, h = None, None
for file, duration in files_and_duration:
    frame = cv2.imread(file)

    if w is None:
        # Setting up the video writer
        h, w, _ = frame.shape
        fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')
        writer = cv2.VideoWriter('output.mp4', fourcc, frame_per_second, (w, h))

    # Repating the frame to fill the duration
    for repeat in range(duration * frame_per_second):
        writer.write(frame)

writer.release()

【讨论】:

  • 只是想知道是否真的有必要将内存中的所有帧累积到一个列表中……如果是长视频、大帧或高帧率怎么办?一次写一个不是更好吗?例如,1080p 24fps 视频的帧以每秒约 150MB 的视频累积...
  • @MarkSetchell 感谢您指出这一点,您是对的,我更改了代码,以便在加载后将每一帧写入磁盘
  • 酷 - 我认为/希望这是一个更好的方法。你已经有我的投票了?
  • 谢谢我试试
  • 它起作用了.. 我想是因为当我打开 mp4 时它告诉我:这个文件无法播放。这可能是因为文件类型不受支持、文件扩展名不正确或文件已损坏。
猜你喜欢
  • 1970-01-01
  • 2014-08-24
  • 1970-01-01
  • 2019-09-17
  • 2019-04-30
  • 2014-11-18
  • 2021-02-22
  • 2013-08-03
  • 2014-12-25
相关资源
最近更新 更多