由于跑编码的需要,所以需要制作一个.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()