使用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()

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章