Python ImageIO警告:root:IMAGEIO FFMPEG_WRITER警告

时间:2017-10-27 13:40:14

标签: python video ffmpeg mp4 python-imageio

我在python中使用一些图像工作,我试图将一系列尺寸= 961x509的图像转换为MP4电影文件。我已经做过这个并且它正在工作但是我有一个非常恼人的问题,警告上写着这样的话:

  

警告:root:IMAGEIO FFMPEG_WRITER警告:输入图像不是   可被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 置于无(这是我所知道的唯一方式):

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

     

回溯(最近一次呼叫最后一次):文件"",第146行,in       运行()文件"",第136行,运行中       for i,_ in tqdm(enumerate(pool.imap_unordered(generateGIFsWithThreads,   videoList))):文件"",第953行, iter       for obj in iterable:File"",line 673,next       提升值IOError:[Errno 32]管道损坏

     

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 warning   d:\工作\ hero_forge \构建\ WIN32 \文件\的GIF \ CH3_M1_0.mp4

     

FFMPEG STDERR输出:

1 个答案:

答案 0 :(得分:0)

如果谷歌的任何人正在寻找答案,请跟进此问题...最好添加额外的参数作为通配符。您只需要将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)