【FFmpeg命令】jpg与yuv(批量)互转 您所在的位置:网站首页 怎么把图片转换成jpeg 【FFmpeg命令】jpg与yuv(批量)互转

【FFmpeg命令】jpg与yuv(批量)互转

2024-07-12 06:37| 来源: 网络整理| 查看: 265

目录 1. 单图像jpg转yuv2. 单图像yuv转jpg3. 批量jpg转yuv3.1 bat文件3.2 python的PIL模块3.3 实现思路3.4 参考代码3.5 小问题 4. 批量yuv转jpg

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源程序,其命令行十分丰富。

关于FFmpeg的安装与配置,上一篇博文已经做过介绍了,此文不再赘述。本文重点讲解如何使用 FFmpeg 命令行实现 jpg 与 yuv 图像格式的相互转换,并支持批量化。

1. 单图像jpg转yuv

倘若当前目录下有个jpg文件,名为000001_353x500.jpg,可用如下语句将其转换为yuv格式,并将新yuv文件命名为000001_353x500.yuv.

ffmpeg -pix_fmt yuv420p -s 353x500 -i 000001_353x500.jpg 000001_353x500.yuv

这里,-pix_fmt表示pixel format,指定像素格式,这里指定为yuv420p格式; -s表示size,后以宽x高格式指定图像的宽高大小; -i表示input,后接输入文件的url;

最后,指定output输出文件的url.

2. 单图像yuv转jpg

倘若当前目录下有个yuv文件,名为000001_353x500.yuv,可用如下命令将其转换为jpg格式,并将新jpg文件命名为000001_353x500.jpg.

ffmpeg -s 353x500 -i 000001.yuv 000001.jpg -y

这里,-s表示size,后接了输入yuv文件的图像大小; -i表示input文件的url; 然后接output输出文件的url; 最后,-y是一个通用选项,表示当前目录下倘若存在相同输出文件名,则直接替代它。

如果不加-y,遇到输出url已存在一个相同输出文件名文件,命令行会中断当前程序,询问是否覆盖文件:

File '000001_353x500.yuv' already exists. Overwrite? [y/N]

y覆盖,N不覆盖。

3. 批量jpg转yuv

到此已经会使用FFmpeg命令实现jpg和yuv的相互转换,想想还蛮激动的,正想交差呢,结果老板突然来了一句“帮我这10000张jpg图片都转换yuv一下”,瞬间原地去世……

大量数据集一条一条手动输命令本身就很麻烦,再加上不同图像-s参数不同,给的图像名也没有包含图像大小信息,难道还要一个一个属性查看设置,献身于重复劳动力的伪业吗?

迅哥说过:“学语言不会用等于白学。”这里不就有一个锻炼的好机会!本人没学过脚本,但学过python,所以接下来的解决方案将基于python.

3.1 bat文件

在说实现思路前,还得说说bat文件。

bat文件是dos下的批处理文件,它包含一条或多条命令。它的文件扩展名为.bat 或 .cmd。在命令提示下输入批处理文件的名称,或者双击该批处理文件,系统就会调用cmd.exe按照该文件中各个命令出现的顺序来逐个运行它们 。使用批处理文件(也被称为批处理程序或脚本),可以简化日常或重复性任务。(来源百度)

这么好用,安排安排~

3.2 python的PIL模块

注:倘若给定的图像集的文件名已包含图像大小信息,此步可省略!!!

PythonWare公司提供了免费的图像处理工具包PIL(Python Image Library),该软件包提供了基本的图像处理功能,其中当然包括读取图像的的大小。

PIL历史悠久,原来是只支持python2.x的版本的,后来移植到了python3的库pillow,我安装了python3.7,所以安装命令为:

pip install pillow

新键py文件,导入包:

from PIL import Image #提取py文件所在目录下的000001.jpg图像大小 jpgName="000001.jpg" jpgSize = Image.open(jpgName).size print(jpgSize)

输出结果以元组表示 (width, height):

(353, 500)

3.3 实现思路

既然每转换一张图像都需要一条对应命令,并设置对应参数,那我们就可以写一个py文件:

1.读取文件夹下的所有图像; 2.每读一个图像就读取它的图像大小并生成对应jpg转换yuv命令语句; 3.将所有图像的命令集成写到一个bat文件; 4.运行py文件,执行bat文件(双击即可)。

3.4 参考代码 import os from PIL import Image # jpg文件夹路径 jpg_path = r'D:\image\jpg' # yuv输出文件夹路径 yuv_path = r'D:\image\yuv' # 生成的bat文件路径 batfile_path = r'D:\image/cmd_list.bat' if not os.path.exists(jpg_path): print("jpg文件不存在!") exit(0) if not os.path.exists(yuv_path): os.mkdir(yuv_path) # cmd语句集合 cmd_str = "" # 读取文件夹下全部文件名,文件名格式:序号.jpg jpg_list = os.listdir(jpg_path) # change directory到指定目录下 os.chdir(jpg_path) for jpg_name in jpg_list: jpg = Image.open(jpg_name) jpgSize = jpg.size # (宽,高) x = jpg_name.split('.') # (序号,扩展名) # 重命名格式:序号_宽x高. yuv_name = x[0] + '_' + str(jpgSize[0]) + 'x' \ + str(jpgSize[1]) + '.yuv' #例ffmpeg -pix_fmt yuv420p -s 500x375 -i D:\image\jpg/000006.jpg D:\image\yuv/000006_500x375.yuv -y cmd_str += \ "ffmpeg -pix_fmt yuv420p -s " + str(jpgSize[0]) + "x" + str(jpgSize[1])+ " -i "+ jpg_path + "/" +jpg_name+" "+yuv_path + "/" + yuv_name + " -y\n" #防止命令运行完窗口自动退出 cmd_str+="pause" # 生成bat文件 outf = open(batfile_path, 'w') outf.write(cmd_str) outf.close()

以上代码亲测可试,但需要注意图像命名格式。此外,三个文件路径改成自己的,且保证文件夹下只有图像,无其他无关文件。

生成bat文件后,双击即可执行。

3.5 小问题

下面命令也能执行,且也能生成yuv文件,但我不是很清楚其与前者处理机制是否相同,希望知道的朋友能帮忙解答,感激。

ffmpeg -i 000001.jpg 000001.yuv 4. 批量yuv转jpg

有了批量jpg转yuv的经验,yuv转jpg也是类似的,这里不多赘述了,举一反三嘛~一般yuv文件会直接把大小信息嵌入文件名,直接上代码吧。

import os # jpg文件夹路径 jpg_path = r'D:\image\jpg2' # yuv文件夹路径 yuv_path = r'D:\image\yuv' # 生成的bat文件路径 batfile_path = r'D:\image/cmd_list2.bat' # cmd语句集合 cmd_str = "" if not os.path.exists(yuv_path): print("jpg文件不存在!") exit(0) if not os.path.exists(jpg_path): os.mkdir(jpg_path) # 读取文件夹下全部文件名,文件名格式:序号_宽x高.yuv yuv_list = os.listdir(yuv_path) # change directory到指定目录下 os.chdir(yuv_path) for yuv_name in yuv_list: x = yuv_name.split('.') # (序号_宽x高,扩展名) y=x[0].split('_') #(序号,宽x高) #例ffmpeg -s 500x375 -i D:\image\yuv/000006_500x375.yuv \ #D:\image\jpg2/000006_500x375.jpg -y cmd_str += \ "ffmpeg -s "+y[1]+" -i " + yuv_path + "/" +yuv_name + " " \ + jpg_path + "/" + x[0] + ".jpg -y\n" cmd_str+="pause" # 生成bat文件 outf = open(batfile_path, 'w') outf.write(cmd_str) outf.close()

同样,注意路径和命名,运行py文件,生成bat文件双击即运行。

更多命令可查看官方文档。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有