关于视频:Python ImageIO警告:root:IMAGEIO FFMPEG_WRITER警告

Python ImageIO WARNING:root:IMAGEIO FFMPEG_WRITER WARNING

我正在使用python处理某些图像,并且尝试将大小为961x509的一系列图像转换为MP4电影文件。 我已经做过了,并且可以正常工作,但是我遇到了一个令人讨厌的问题,警告是这样的:

WARNING:root:IMAGEIO FFMPEG_WRITER WARNING: input image is not
divisible by macro_block_size=16, resizing from (509L, 961L) to (512L,
976L) to ensure video compatibility with most codecs and players. To
prevent resizing, make your input image divisible by the
macro_block_size or set the macro_block_size to None (risking
incompatibility). You may also see a FFMPEG warning concerning
speedloss due to data not being aligned. [swscaler @ 04f8ac40]
Warning: data is not aligned! This can lead to a speedloss

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

这是我的代码:

1
2
3
4
5
6
7
8
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(这是我唯一的方法):

1
2
3
4
5
6
7
8
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)

我将收到此错误消息:

Error while opening encoder for output stream #0:0 - maybe incorrect
parameters such as bit_rate, rate, width or height

Traceback (most recent call last): File"", line 146, in
run() File"", line 136, in run
for i, _ in tqdm(enumerate(pool.imap_unordered(generateGIFsWithThreads,
videoList))): File"", line 953, in iter
for obj in iterable: File"", line 673, in next
raise value IOError: [Errno 32] Broken pipe

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

FFMPEG STDERR OUTPUT:


只是为了跟进此步,以防万一来自Google的人正在寻找答案...最好添加额外的参数作为通配符。 您只需要以正确的格式将macro_block_size添加为karg。 例如:

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

在OP示例中,它将是:

1
2
3
4
5
6
7
8
9
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)