【问题标题】:Convert single png file to mp4将单个 png 文件转换为 mp4
【发布时间】:2021-08-23 12:57:50
【问题描述】:

我正在尝试找到一种将单个 png 图像转换为具有指定长度的 mp4 文件的方法。在尝试制作更长(多个小时)的视频时,我发现的解决方案缓慢且不可靠。

这是我目前在 Python 3 中的解决方案:

import os
import cv2

video_name = 'video.avi'
frame = cv2.imread('image.png')
height, width, layers = frame.shape

time = 300
    
video = cv2.VideoWriter(video_name, 0, 1 / 10, (width,height))

for i in range(int(time / 10)):
    video.write(cv2.imread(os.path.join('.', 'image.png')))

video.write(cv2.imread('image.png'))

cv2.destroyAllWindows()
video.release()

基本上相同的图像被多次附加来组成视频,我发现合并非常费力,因此将 fps 设置为 0.1 秒。

这感觉像是错误的方法,所以任何解决方案都值得赞赏

【问题讨论】:

  • 也许您不应该读取视频中每一帧的图像文件。
  • 哦,fps 没有设置为 0.1 秒 (10 fps),而是 10 秒 (0.1 fps),因为 1/10 fps = 0.1 fps = 每帧 10 秒。

标签: python image opencv video


【解决方案1】:

你会喜欢 PyAV。它是对 ffmpeg 库的适当包装,而不是您在随机 python 包中找到的常见 subprocess kludges。

它有一个示例,其中使用自定义演示时间戳而不是固定帧速率写入帧。由于 ffmpeg 没有在他们自己的文档中明确说明这些事情,因此数学/用法有点模糊。

基本上你设置av.VideoFrame.pts 就是这样。

https://github.com/PyAV-Org/PyAV/blob/main/examples/numpy/generate_video_with_pts.py

请理解,对于某些视频播放器来说,帧之间的时间异常长的视频可能是一个挑战,至少在尝试寻找而不是顺序播放时是这样。

OpenCV 不是媒体库。它的视频 I/O 功能旨在方便而不灵活。

【讨论】:

    猜你喜欢
    • 2021-10-10
    • 1970-01-01
    • 2023-03-10
    • 2020-06-02
    • 2011-08-01
    • 1970-01-01
    • 2012-12-22
    • 2014-05-05
    • 2022-01-27
    相关资源
    最近更新 更多