使用python和ffmpeg 批量将其他图片转换为.yuv格式

由于跑编码的需要,所以需要制作一个.yuv格式的图片数据集,但是手头只有.png/.jpg格式的,故记录下转换过程。其他图片格式也可以。

需要注意的是如果要转成YUV420格式,那么输入分辨率必须是偶数,不然色度分量的尺寸会出问题。

 

首先安装ffmpeg

官网:ffmepg官网

window版:https://ffmpeg.zeranoe.com/builds/

安装好后添加到环境变量path中。

 

一、单个文件转换的命令:

转换成YUV420:

ffmpeg  -i xxx.png  -s WxH  -pix_fmt yuv420p  xxx.yuv

转换成YUV420P10:

ffmpeg  -i xxx.png  -s WxH  -pix_fmt yuv420p10le  xxx.yuv

-i表示输入的图片的路径  -s表示输出图片的分辨率;

-pix_fmt是图片格式,详见我的另一篇博客:ffmpeg中所有支持的图片存储格式(pixel format)

最后面是输出图片的路径。

 

 

二、批量转换可以自己写bat文件,也可以直接用以下的方式:

①安装ffmpeg的python3接口ffmpy3

在命令行中输入以下命令:

pip install ffmpy3

 

②python代码如下:

# -*- coding: utf-8 -*-
import os
from PIL import Image
from ffmpy3 import FFmpeg
 
inputPath = './inp'
outputYUVPath = './out'
 
piclist = os.listdir(inputPath)
for pic in piclist:
    picpath = os.path.join(inputPath,pic)
    img = Image.open(picpath)
    in_wid,in_hei = img.size
    out_wid = in_wid//2*2
    out_hei = in_hei//2*2
    size = '{}x{}'.format(out_wid,out_hei)  #输出文件会缩放成这个大小
    purename = os.path.splitext(pic)[0]
    outname = outputYUVPath + '/' + purename + '_' + size+ '.yuv'
    
    ff = FFmpeg(inputs={picpath:None},
                outputs={outname:'-s {} -pix_fmt yuv420p'.format(size)})
    print(ff.cmd)
    ff.run()

 

你可能感兴趣的:(多媒体)