【FFmpeg命令】使用x265库进行图像视频(批量)压缩编码

上一篇博文详细讲解了【FFmpeg命令】使用x264库进行图像视频(批量)压缩编码,本文介绍FFmpeg里x265库的命令使用,以实现图像视频(批量)压缩编码。

1. 了解libx265库

与用libx264编码的H.264视频相比,libx265编码器可以节省约25-50%的比特率,同时保持相同的视觉质量。这些优势在1080p以上的分辨率下最为明显。

最新版的FFmpeg Build已集成编译了libx265,可通过以下命令查看自己的FFmpeg版本以及是否支持x265编码:

ffmpeg -version

我的版本是git-2020-08-09-6e951d0。配置有–enable-libx265说明该版本是支持x265编码的。

在这里插入图片描述
此外,还可以通过以下命令查看版本所支持的编码器:

ffmpeg -encoders

据显示,FFmpeg支持的编码器非常多,其中包括x264和x265库。

在这里插入图片描述
点此可前往官网下载最新版本,还可参考此博文安装配置FFmpeg。

前往官方文档http://ffmpeg.org/ffmpeg-all.html#libx265,有关于libx265的配置说明,其列出了非常多的配置选项。

在这里插入图片描述
其中,有一个配置选项为x265-params,用于以:为分隔符,key=value的列表组设置x265的配置参数。

x265-params

  • Set x265 options using a list of key=value couples separated by “:”. See x265 --help for a list of options.

For example to specify libx265 encoding options with -x265-params(举个栗子):

ffmpeg -i input -c:v libx265 -x265-params crf=26:psy-rd=1 output.mp4

更多libx265使用说明还可以参看H.265/HEVC Video Encoding Guide.

2. 图像x265压缩编码

一般情况下, x265 的qp量化比例为0~51。qp越大,压缩越厉害,失真越严重,失去的信息越多,画面也就越模糊。

2.1 单命令

当前目录下有图像input.jpg,以预设中等,qp47将其进行x265压缩编码,输出为output.jpg.

ffmpeg -i input.jpg -c:v libx265 -x265-params qp=47 output.mkv
ffmpeg -i output.mkv -r 1 -f image2 output.jpg

-i:指定输入文件;
-c:v:指定视频编码库为libx265
-preset:指定预设,若选择medium,不加也没事;
-qp:指定量化参数为47.
第一条命令:将图像按指定qp进行x265编码压缩成mkv格式。

-i : 指定输入文件;
-r : 指定帧数 1
-f : 指定格式化的格式为image2
image2后面跟着的是输出文件名。
第二条命令:将视频按指定帧数分割成图片。

为什么分为两条命令?

这里有个小小疑问,在x264压缩编码已经做了必要的说明,这里不重复说了。

结果新生成两个文件:

在这里插入图片描述

原图(上)与qp47图片对比:

在这里插入图片描述
在这里插入图片描述
最右边那棵树已经模糊得看不见了。

2.2 裁剪预处理

有些朋友可能会在执行第一条命令的时候出现Conversion failed

Press [q] to stop, [?] for help
x265 [info]: HEVC encoder version 3.4+2-73ca1d7be377
x265 [info]: build info [Windows][GCC 10.2.1][64 bit] 8bit+10bit
x265 [info]: using cpu capabilities: MMX2 SSE2Fast LZCNT SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
x265 [error]: Picture width must be an integer multiple of the specified chroma subsampling
[libx265 @ 0000020723532980] Cannot open libx265 encoder.
Error initializing output stream 0:0 – Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
Conversion failed!

原因可能在于输入图像的宽或高不符合2的倍数。
若出现这种情况,莫慌,可参考这篇博文进行图像(批量)resize处理。

2.3 批量压缩编码

对于一组resize后的图像,我们想要分别得到qp21~51的压缩结果。图像很多,如何批量处理?

x265_VOC2007文件内容如下:

在这里插入图片描述

label_resize2文件内容如下:

在这里插入图片描述
mkv和jpg文件内容如下:

在这里插入图片描述
目标:对于每一个qp文件夹,生成对应qp的mkv或jpg文件,输入对象包括label中的全部文件。

话不多说,上码。

import os

labelFile_path=r"F:\SDDR\datasets\x265_VOC2007\label_resize2"
mkvFile_path=r"F:\SDDR\datasets\x265_VOC2007\mkv"
x265File_path=r"F:\SDDR\datasets\x265_VOC2007\jpg"

mkvFile_list=os.listdir(mkvFile_path)
for mkvFile in mkvFile_list:  #qpxx
    label_list=os.listdir(labelFile_path)
    for label in label_list:    #xxx.jpg
        '''
            jpg to mkv with qpxx
        '''
        os.chdir(labelFile_path)  # .../JPEGImages/
        cmd_jpg_to_mkv="ffmpeg -i "+label+" -c:v libx265 -x265-params qp="\
        			+mkvFile[2:]+" "+mkvFile_path+"/"+mkvFile+"/"+\
        			label[:len(label)-4]+".mkv"
        # print(cmd_jpg_to_mkv)
        os.system(cmd_jpg_to_mkv)

        '''
            mkv to jpg
        '''
        os.chdir(mkvFile_path+"/"+mkvFile) #.../x265_VOC2007/
        cmd_mkv_to_jpg = "ffmpeg -i  "+label[:len(label)-4]+".mkv -r 1 \
        				-f image2 "+x265File_path+"/"+mkvFile+"/"+label
        # print(cmd_mkv_to_jpg)
        os.system(cmd_mkv_to_jpg)


3. 视频x265压缩编码

视频与图像类似,参数一样,只是视频允许“一步到位”。假设当前目录下有MP4文件input.mp4.

3.1 单命令

ffmpeg -i input.mp4 -c:v libx265 -x265-params qp=51 output.mp4

视频原帧(上)和结果帧对比:

在这里插入图片描述

在这里插入图片描述
失真还是很明显的。

3.2 批量压缩编码

文件创建如下:

在这里插入图片描述
在这里插入图片描述

代码:

import os

labelFile_path=r"F:\SDDR\datasets\surveillance\label"
x265File_path=r"F:\SDDR\datasets\surveillance\x265"

os.chdir(labelFile_path)
x265File_list=os.listdir(x265File_path)
for x265File in x265File_list: #qpxx
    labelFile_list=os.listdir(labelFile_path)
    for label in labelFile_list:    #xxx.mp5
        cmd_x265="ffmpeg -i "+label+" -c:v libx265 -x265-params qp="\
                 +x265File[2:]+" "+x265File_path+"/"+x265File+"/"+label
        os.system(cmd_x265)

注:以上代码需要根据自己本地情况修改路径,并注意文件夹创建方式及命名方式

更多命令查看官方Documentation
更多libx265使用说明还可以参看H.265/HEVC Video Encoding Guide.

  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值