yuv 和jpg互相转

目的很明确就是批量把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

yuv 和jpg互相转_第1张图片

 

参考:https://www.jb51.net/article/154234.htm

https://blog.csdn.net/zhangpeterx/article/details/88581437

https://blog.csdn.net/smilestone_322/article/details/21104871

 

 

 

 

 

你可能感兴趣的:(Linux)