目的很明确就是批量把jpg图片转为YUV格式。
------------------------------------------------------------------
先看一下win下具体如何操作的:
1. 下载ffmpeg,转码图片和视频的利器啊!官方免费下载地址:https://ffmpeg.zeranoe.com/builds/win64/static/ffmpeg-4.2-win64-static.zip
2. 无需安装,解压缩之后即可使用。这时需要使用windows的cmd运行命令行来进行转码:
先定位到bin文件夹下面:
cd C:\ffmpeg-4.2-win64-static\bin
然后运行命令行:
ffmpeg -i test.jpg -s 640x480 -pix_fmt yuv420p test.yuv
也可以用test%d.jpg来批量处理图片,test1.jpg,test2.jpg 。。。
3. 这样输出的yuv文件就会出现在bin文件夹下面。如果需要转换其他格式图片,只需要将jpg替换成bmp或者png即可。需要注意的是:
-pix_fmt yuv420p需要添加上,如果不添加的话,往往转码结果为yuv444格式,不是一般读者所需要的。另外输入图片需要放在bin文件夹下面。
附:推荐一个yuv播放器: https://www.newasp.net/soft/373286.html
原文链接:https://blog.csdn.net/laoyouji/article/details/100051158
————————————————
我具体Linux下面操作如下:
先打开Anaconda Prompt,输入如下命令:
conda config --add channels conda-forge
conda install ffmpeg
pip install ffmpy
安装ffmpeg
官网(各种版本):ffmepg官网
window版:https://ffmpeg.zeranoe.com/builds/
将下载好的windows版解压,其中会有一个bin文件夹,把里面的ffmpeg.exe复制到你将要跑python代码的文件夹里
这里这样做的目的,为了下面的python代码可以直接加载运行EXE文件。
# -*- coding: utf-8 -*-
import
os
from
PIL
import
Image
from
ffmpy
import
FFmpeg
in_jpgDatasetPath
=
'I:/VOC/trainval'
out_yuvDatasetPath
=
'I:/VVC/loop/yuvdataset'
piclist
=
os.listdir(in_jpgDatasetPath)
for
pic
in
piclist:
picname
=
pic.split(
'.'
)[
0
]
picpath
=
os.path.join(in_jpgDatasetPath,pic)
img
=
Image.
open
(picpath)
in_wid,in_hei
=
img.size
out_wid
=
in_wid
/
/
16
*
16
out_hei
=
in_hei
/
/
16
*
16
size
=
'{}x{}'
.
format
(out_wid,out_hei)
#输出文件会缩放成这个大小
outname
=
out_yuvDatasetPath
+
'/'
+
picname
+
'_'
+
size
+
'.yuv'
ff
=
FFmpeg(inputs
=
{picpath:
None
},
outputs
=
{outname:
'-s {} -pix_fmt yuv420p'
.
format
(size)})
print
(ff.cmd)
ff.run()
以上这篇利用python和ffmpeg 批量将其他图片转换为.yuv格式的方法
======================================================================
YUV----》jpg
在win上操作的,前提是在win上安装好了FFmpeg工具。
打开cmd ,输入cd F:\YUV\ffmpeg-20191101-53c21c2-win64-static\bin 无效,继续 F:显示如下,生成的jpg默认放在F:\YUV\ffmpeg-20191101-53c21c2-win64-static\bin 里面,当然在代码里面可以指定具体路径。
ffmpeg 将jpg转为yuv420p
ffmpeg -i xxx.jpg -s 1624x1236 -pix_fmt yuvj420p xxx.yuv
1624*1236 为需要缩放的yuv分辨率,不用缩放的话,可以省略!
jpeg转yuv422p
ffmpeg -i a.jpg -s 640x480 -pix_fmt yuv422p a.yuv
ffmpeg -pix_fmt yuv422p -s 640x480 -i a.yuv b.jpg
yuv转jpeg或bmp
1. 生成yuv文件,yuv文件由Y,Cb, Cr三大部分组成,且每部分分块存储(例如,一帧320x240的视频存为yuv文件为 Y---240*320,Cb,Cr分别为240*160, 240*160。
2. 使用ffmpeg工具转换:
转换为jpg格式:ffmpeg -y -s 320x240 -i D:\yuv2jpg\capture0.yuv -b 20000000 xxd.jpg
转换为bmp格式:ffmpeg -y -s 320x240 -i D:\yuv2jpg\capture0.yuv -b 20000000 xxd.bmp
使用ffmpeg把多张jpeg与yuv相互转换的方法
jpeg转yuv ffmpeg -i gyuv%03d.png -pix_fmt yuv420p -r 29.970 -y goutput.yuv
yuv转jpeg ffmpeg -y -s 111×222 -i G:\yuv.yuv jpeg%04d.jpg -vcodec mjpeg
参考:https://www.jb51.net/article/154234.htm
https://blog.csdn.net/zhangpeterx/article/details/88581437
https://blog.csdn.net/smilestone_322/article/details/21104871