我在一个python脚本中使用OpenCV将PIL格式的图像转换为MP4视频.

尽管我可以在创建视频后正常播放它们,但之后我无法将它们上传到Twitter或Instagram上.

如果在创建视频后,我使用外部视频转换器将创建的MP4视频转换为相同的MP4视频格式,它现在可以上传到Twitter和Instagram上.因此,这个问题一定与OpenCV的编码格式有关.

我试着使用不同的编解码器格式,而不是我在网上找到的与MP4视频兼容的任何四通道编码格式,但问题仍然存在.

我还可以try 在导出设置中更改哪些内容,以便能够直接上传使用OpenCV创建的视频?

以下是我使用的示例代码:

import cv2
import numpy as np
from PIL import Image as Img

#Create a list of PIL images:
PILimages = []
for  i in range(20):
    digit = str(i)
    if i < 10:
        digit = "0" + digit 
    image = Img.open("animationframes/frame " + digit + ".png")
    PILimages.append(image)

#Convert the PIL image list to OpenCV format: 
def PILimageGroupToOpenCV(imageGroup):
    openCVimages = []
    for image in imageGroup:    
        opencvImage_ = np.asarray(image)
        opencvImage_ = cv2.cvtColor(opencvImage_, cv2.COLOR_RGB2BGR)
        openCVimages.append(opencvImage_)
    return openCVimages

#Save the frames as an MP4 video using openCV:
def SavePILimagesToMp4(images,PathAndName,FPS):
    #Convert the PIL images to numpy and then to OpenCV:
    openCVimages = PILimageGroupToOpenCV(images)
    #Create the new video:
    height,width, layers = openCVimages[0].shape
    size = (width,height)
    video = cv2.VideoWriter(PathAndName, cv2.VideoWriter_fourcc(*'mp4v'), FPS, size)
    #Add the images as frames into the video:
    for i in range(len(openCVimages)):
        video.write(openCVimages[i])
    video.release()

#Save the pil images:
SavePILimagesToMp4(PILimages,"out.MP4",25)

推荐答案

"mp4v"代表H.263、MPEG4、ASP.你可能听说过DivX和Xvid.就是这样.

你的目标网站似乎拒绝这种视频格式.

如果你想要H.264,MPEG4 AVC,你需要要求"avc1".

OpenCV通常附带ffmpeg,但对于H.264,ffmpeg通常是not附带encoder.

它可能支持思科在其Github上提供的OpenH2 64.您可以下载相应的DLL.确保它是OpenCV在找不到DLL时所要求的100.

Failed to load OpenH264 library: openh264-1.8.0-win64.dll
        Please check environment and/or download library: https://github.com/cisco/openh264/releases

[libopenh264 @ 0000018c889e9c40] Incorrect library version loaded
[ERROR:0@0.040] global cap_ffmpeg_impl.hpp:3049 open Could not open codec libopenh264, error: Unspecified error (-22)
[ERROR:0@0.040] global cap_ffmpeg_impl.hpp:3066 open VIDEOIO/FFMPEG: Failed to initialize VideoWriter

您需要确保DLL位于可以找到它的位置.On Windows, there is a defined algorithm for finding DLLs.101把它放在不属于它的地方.它不属于系统32目录.

在我的实验中,我可以把动态链接库放在current working directory位,然后它就被拿起来了.当它与当前进程(python进程)的可执行文件在同一目录中时,也应该 Select 它.

Python相关问答推荐

滚动和,句号来自Pandas列

删除最后一个pip安装的包

如何避免Chained when/then分配中的Mypy不兼容类型警告?

_repr_html_实现自定义__getattr_时未显示

在Pandas DataFrame操作中用链接替换'方法的更有效方法

无法通过python-jira访问jira工作日志(log)中的 comments

基于字符串匹配条件合并两个帧

Python虚拟环境的轻量级使用

基于索引值的Pandas DataFrame条件填充

使用BeautifulSoup抓取所有链接

幂集,其中每个元素可以是正或负""""

Flask Jinja2如果语句总是计算为false&

Python—为什么我的代码返回一个TypeError

在Google Drive中获取特定文件夹内的FolderID和文件夹名称

使用__json__的 pyramid 在客户端返回意外格式

jsonschema日期格式

如何获取包含`try`外部堆栈的`__traceback__`属性的异常

从列表中分离数据的最佳方式

如何删除剪裁圆的对角线的外部部分

有什么方法可以在不对多索引DataFrame的列进行排序的情况下避免词法排序警告吗?