由於跑編碼的需要,所以需要製作一個.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()