9

我正在使用 python 处理一些图像,我正在尝试将一系列大小为 961x509 的图像转换为 MP4 电影文件。我已经这样做了,它正在工作,但是我有一个非常烦人的问题,警告说如下:

WARNING:root:IMAGEIO FFMPEG_WRITER WARNING: 输入图像不能被 macro_block_size=16 整除,从 (509L, 961L) 调整到 (512L, 976L) 以确保视频与大多数编解码器和播放器的兼容性。为防止调整大小,请使您的输入图像可被 macro_block_size 整除或将 macro_block_size 设置为 None(存在不兼容的风险)。由于数据未对齐,您可能还会看到有关速度损失的 FFMPEG 警告。[swscaler @ 04f8ac40] 警告:数据未对齐!这可能会导致速度损失

出现警告的问题是我的图像分辨率,该分辨率应该能被 2 整除,但我的不是。有没有可能让这个警告不再出现?因为我无法更改图像的大小,同时我不想调整所有图像的大小。

这是我的代码:

ready_images = []

for img in videos['Images']:
    image = imageio.imread(img.fileName)
    ready_images.append(image)

videoName = videos['Images'][0].gifLocationPath + "//" + videos['Name']
imageio.mimwrite(videoName, ready_images, 'MP4')

有人在这里对我有解决方案吗?

更新:

如果我要以这种方式将macro_block_size 设置为 None (这是我知道的唯一方法):

ready_images = []

for img in videos['Images']:
    image = imageio.imread(img.fileName)
    ready_images.append(image)

video_name = videos['Images'][0].gifLocationPath + "//" + videos['Name']
imageio.mimwrite(video_name, ready_images, 'MP4', macro_block_size = None)

我将收到此错误消息:

为输出流 #0:0 打开编码器时出错 - 可能是不正确的参数,例如 bit_rate、rate、width 或 height

Traceback(最近一次调用最后一次):文件“”,第 146 行,在 run() 文件“”,第 136 行,在 run for i,_ in tqdm(enumerate(pool.imap_unordered(generateGIFsWithThreads, videoList))):文件“ ",第 953 行,在iter for obj in iterable: 文件 "",第 673 行,在下一个提升值 IOError: [Errno 32] Broken pipe

FFMPEG 命令: ffmpeg -y -f rawvideo -vcodec rawvideo -s 961x509 -pix_fmt rgb24 -r 10.00 -i - -an -vcodec libx264 -pix_fmt yuv420p -crf 25 -v 警告 D:\work\hero_forge\build\win32\Documents \GIFs\CH3_M1_0.mp4

FFMPEG标准错误输出:

4

1 回答 1

3

只是为了跟进这一点,以防谷歌的任何人正在寻找答案......最好添加额外的参数作为通配符。您只需要以正确格式将 macro_block_size 添加为 karg。例如:

kargs = { 'fps': 3, 'quality': 10, 'macro_block_size': None, 
    'ffmpeg_params': ['-s','600x450'] }
imageio.mimsave(gifOutputPath, images, 'FFMPEG', **kargs)

在 OP 示例中,它将是:

ready_images = []

for img in videos['Images']:
    image = imageio.imread(img.fileName)
    ready_images.append(image)

video_name = videos['Images'][0].gifLocationPath + "//" + videos['Name']
kargs = { 'macro_block_size': None }
imageio.mimwrite(video_name, ready_images, 'MP4', **kargs)
于 2018-01-21T22:14:00.120 回答