FFmpeg开发笔记(七十二)Linux给FFmpeg集成MPEG-5视频编解码器EVC
<span data-cke-copybin-start="1"><span data-cke-copybin-start="1"></span></span><span id="cke_bm_1232S">MPEG-5是新一代的国际音视频编解码标准,像我们熟悉的MP3、MP4等音视频格式就来自于MPEG系列。MP3格式的说明介绍参见《FFmpeg开发实战:从零基础到短视频上线》一书的“5.2 MP3音频”,MP4格式的说明介绍参见《FFmpeg开发实战:从零基础到短视频上线》一书的“2.1.2 音视频文件的封装格式”。</span><p><span id="cke_bm_1232S"> MPEG-5有关视频编解码的内容主要有两部分,一个是Part 1的基本视频编码(Essential Video Coding,EVC),另一个是Part 2的低复杂度增强视频编码(Low Complexity Enhancement Video Coding,LCEVC)。其中Part 1的EVC是由三星、华为、高通、Divideon 支持的MPEG标准,它由两个配置文件组成,一个为只使用过期专利且免版税的基线规范,另一个为需要版税并使用创新编码工具的主规范。EVC旨在提供比现有视频编码标准更高的压缩效率,同时解决专利许可问题,实现免专利费的编码方案。<br>
相比现有的H.624和H.265标准,EVC在视频编解码方面拥有下列几点优势:<br>
1、在主模式下,EVC的平均比特率比H.265低26%;在基线模式下,比H.264低31%。<br>
2、EVC的解码时间比H.264减少60%。<br>
3、EVC的基线方案包含了超过20年的技术,可以实现免专利费的要求。<br>
MPEG-5现已开源MPEG-5 EVC的视频编解码器,其中视频解码器的开源库叫libxevd,视频编码器的开源库叫libxeve。如今EVC的编解码器libxevd和libxeve日渐成熟,从7.0版本开始的最新FFmpeg源码已经支持EVC的编解码器libxevd和libxeve。<br>
接下来以华为的欧拉系统为例,介绍如何在Linux环境给FFmpeg集成MPEG-5 EVC视频编解码器libxevd和libxeve,具体的操作步骤说明如下:</span></p>
<h1>一、安装libxevd</h1>
<p>libxevd是一款MPEG-5的EVC视频解码器。它的源码托管页面在https://github.com/mpeg5/xevd/,最新版本是2024年4月发布的xevd-0.5.0,该版本的源码包下载地址是https://codeload.github.com/mpeg5/xevd/tar.gz/refs/tags/v0.5.0。<br>
libxevd的安装步骤说明如下。<br>
1、将下载好的压缩包上传到服务器并解压,也就是依次执行以下命令。</p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-display-name="代码段" data-cke-filter="off" data-cke-widget-id="15" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22code%22%3A%22tar%20zxvf%20xevd-0.5.0.tar.gz%5Cncd%20xevd-0.5.0%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="hljs">tar zxvf xevd-0.5.0.tar.gz
cd xevd-0.5.0</code></pre>
</div>
<p>2、在xevd目录下创建新文件version.txt,文件内容填入“v0.5.0”,表示解码器的版本为0.5.0。<br>
3、执行以下命令配置libxevd</p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-display-name="代码段" data-cke-filter="off" data-cke-widget-id="14" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22code%22%3A%22mkdir%20build%5Cncd%20build%5Cncmake%20-DBUILD_SHARED_LIBS%3D1%20--install-prefix%3D%2Fusr%2Flocal%20..%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="hljs">mkdir build
cd build
cmake -DBUILD_SHARED_LIBS=1 --install-prefix=/usr/local ..</code></pre>
</div>
<p>配置完成后,打开src_main/CMakeFiles/xevd_dynamic.dir/link.txt,在“-shared”后面补充“ -lm”,表示生成的动态库要链接数学函数库。<br>
4、运行下面命令编译libxevd。</p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-display-name="代码段" data-cke-filter="off" data-cke-widget-id="13" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22code%22%3A%22make%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="hljs">make</code></pre>
</div>
<p>5、编译完成后,运行下面命令安装libxevd。</p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-display-name="代码段" data-cke-filter="off" data-cke-widget-id="12" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22code%22%3A%22make%20install%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="hljs">make install</code></pre>
</div>
<h1>二、安装libxeve</h1>
<p>libxeve是一款MPEG-5的EVC视频编码器。它的源码托管页面在https://github.com/mpeg5/xeve/,最新版本是2024年6月发布的xeve-0.5.1,该版本的源码包下载地址是https://codeload.github.com/mpeg5/xeve/tar.gz/refs/tags/v0.5.1。<br>
注意:由于FFmpeg仅支持版本号大于等于0.5.1的libxeve,因此务必下载xeve-0.5.1,不可下载xeve-0.5.0。<br>
libxeve的安装步骤说明如下。<br>
1、将下载好的压缩包上传到服务器并解压,也就是依次执行以下命令。</p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-display-name="代码段" data-cke-filter="off" data-cke-widget-id="11" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22code%22%3A%22tar%20zxvf%20xeve-0.5.1.tar.gz%5Cncd%20xeve-0.5.1%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="hljs">tar zxvf xeve-0.5.1.tar.gz
cd xeve-0.5.1</code></pre>
</div>
<p>2、在xeve目录下创建新文件version.txt,文件内容填入“v0.5.1”,表示编码器的版本为0.5.1。<br>
3、执行以下命令配置libxeve</p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-display-name="代码段" data-cke-filter="off" data-cke-widget-id="10" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22code%22%3A%22mkdir%20build%5Cncd%20build%5Cncmake%20-DBUILD_SHARED_LIBS%3D1%20--install-prefix%3D%2Fusr%2Flocal%20..%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="hljs">mkdir build
cd build
cmake -DBUILD_SHARED_LIBS=1 --install-prefix=/usr/local ..</code></pre>
</div>
<p>配置完成后,打开src_main/CMakeFiles/xeve_dynamic.dir/link.txt,在“-shared”后面补充“ -lm”,表示生成的动态库要链接数学函数库。<br>
4、运行下面命令编译libxeve。</p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-display-name="代码段" data-cke-filter="off" data-cke-widget-id="9" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22code%22%3A%22make%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="hljs">make</code></pre>
</div>
<p>5、编译完成后,运行下面命令安装libxeve。</p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-display-name="代码段" data-cke-filter="off" data-cke-widget-id="8" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22code%22%3A%22make%20install%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="hljs">make install</code></pre>
</div>
<h1>三、让FFmpeg启用libxevd和libxeve</h1>
<p>由于FFmpeg默认未启用libxevd和libxeve,因此需要重新配置FFmpeg,标明启用libxevd和libxeve,然后重新编译安装FFmpeg。<br>
先下载最新的FFmpeg源码(版本号需大于等于7.0),再把FFmpeg源码包上传到Linux服务器的/usr/local/src目录下。接着登录Linux服务器的控制台,执行下面命令解压源码包:</p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-display-name="代码段" data-cke-filter="off" data-cke-widget-id="7" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22code%22%3A%22cd%20%2Fusr%2Flocal%2Fsrc%5Cnunzip%20ffmpeg-n7.1.1.zip%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="hljs">cd /usr/local/src
unzip ffmpeg-n7.1.1.zip</code></pre>
</div>
<p>确保Linux环境已经按照《FFmpeg开发实战:从零基础到短视频上线》该书第一章的“1.2 Linux系统安装FFmpeg”安装了H.264的编码器libx264和H.265的编码器libx265,并且按照之前的文章安装了H.266的编码器libvvenc,然后执行以下的liblc3启用步骤。<br>
1、回到FFmpeg源码的目录,执行以下命令重新配置FFmpeg,主要增加启用libxevd和libxeve。(增加了选项“ --enable-libxevd --enable-libxeve”)</p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-display-name="代码段" data-cke-filter="off" data-cke-widget-id="6" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22code%22%3A%22cd%20ffmpeg-n7.1.1%5Cnexport%20LD_LIBRARY_PATH%3D%2Fusr%2Flocal%2Flib64%3A%24LD_LIBRARY_PATH%5Cnexport%20PKG_CONFIG_PATH%3D%2Fusr%2Flocal%2Flib64%2Fpkgconfig%3A%24PKG_CONFIG_PATH%5Cn.%2Fconfigure%20--prefix%3D%2Fusr%2Flocal%2Fffmpeg%20--enable-shared%20--disable-static%20--disable-doc%20--enable-zlib%20--enable-libx264%20--enable-libx265%20--enable-libvvenc%20--enable-liblc3%20--enable-libxevd%20--enable-libxeve%20--enable-libxevd%20--enable-libxeve%20--enable-iconv%20--enable-gpl%20--enable-nonfree%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="hljs">cd ffmpeg-n7.1.1
export LD_LIBRARY_PATH=/usr/local/lib64:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:$PKG_CONFIG_PATH
./configure --prefix=/usr/local/ffmpeg --enable-shared --disable-static --disable-doc --enable-zlib --enable-libx264 --enable-libx265 --enable-libvvenc --enable-liblc3 --enable-libxevd --enable-libxeve --enable-libxevd --enable-libxeve --enable-iconv --enable-gpl --enable-nonfree</code></pre>
</div>
<p>2、运行下面命令编译FFmpeg。</p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-display-name="代码段" data-cke-filter="off" data-cke-widget-id="5" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22code%22%3A%22make%20clean%5Cnmake%20-j4%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="hljs">make clean
make -j4</code></pre>
</div>
<p>3、执行下面命令安装FFmpeg。</p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-display-name="代码段" data-cke-filter="off" data-cke-widget-id="4" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22code%22%3A%22make%20install%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="hljs">make install</code></pre>
</div>
<h1>四、查看FFmpeg的安装结果</h1>
<p>运行下面命令查看FFmpeg的安装版本:</p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-display-name="代码段" data-cke-filter="off" data-cke-widget-id="3" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22code%22%3A%22ffmpeg%20-version%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="hljs">ffmpeg -version</code></pre>
</div>
<p>上面命令返回的FFmpeg版本信息如下:</p>
<div class="cke_widget_wrapper cke_widget_block cke_widget_codeSnippet cke_widget_selected" data-cke-display-name="代码段" data-cke-filter="off" data-cke-widget-id="2" data-cke-widget-wrapper="1">
<pre class="cke_widget_element" data-cke-widget-data="%7B%22code%22%3A%22ffmpeg%20version%207.1.1%20Copyright%20(c)%202000-2025%20the%20FFmpeg%20developers%5Cnbuilt%20with%20gcc%2010.3.1%20(GCC)%5Cnconfiguration%3A%20--prefix%3D%2Fusr%2Flocal%2Fffmpeg%20--enable-shared%20--disable-static%20--disable-doc%20--enable-zlib%20--enable-libx264%20--enable-libx265%20--enable-libvvenc%20--enable-liblc3%20--enable-libxevd%20--enable-libxeve%20--enable-iconv%20--enable-gpl%20--enable-nonfree%5Cnlibavutil%20%C2%A0%20%C2%A0%20%C2%A059.%2039.100%20%2F%2059.%2039.100%5Cnlibavcodec%20%C2%A0%20%C2%A0%2061.%2019.101%20%2F%2061.%2019.101%5Cnlibavformat%20%C2%A0%20%C2%A061.%20%C2%A07.100%20%2F%2061.%20%C2%A07.100%5Cnlibavdevice%20%C2%A0%20%C2%A061.%20%C2%A03.100%20%2F%2061.%20%C2%A03.100%5Cnlibavfilter%20%C2%A0%20%C2%A010.%20%C2%A04.100%20%2F%2010.%20%C2%A04.100%5Cnlibswscale%20%C2%A0%20%C2%A0%20%C2%A08.%20%C2%A03.100%20%2F%20%C2%A08.%20%C2%A03.100%5Cnlibswresample%20%C2%A0%205.%20%C2%A03.100%20%2F%20%C2%A05.%20%C2%A03.100%5Cnlibpostproc%20%C2%A0%20%C2%A058.%20%C2%A03.100%20%2F%2058.%20%C2%A03.100%22%2C%22classes%22%3Anull%7D" data-cke-widget-keep-attr="0" data-cke-widget-upcasted="1" data-widget="codeSnippet"><code class="hljs">ffmpeg version 7.1.1 Copyright (c) 2000-2025 the FFmpeg developers
built with gcc 10.3.1 (GCC)
configuration: --prefix=/usr/local/ffmpeg --enable-shared --disable-static --disable-doc --enable-zlib --enable-libx264 --enable-libx265 --enable-libvvenc --enable-liblc3 --enable-libxevd --enable-libxeve --enable-iconv --enable-gpl --enable-nonfree
libavutil 59. 39.100 / 59. 39.100
libavcodec 61. 19.101 / 61. 19.101
libavformat 61. 7.100 / 61. 7.100
libavdevice 61. 3.100 / 61. 3.100
libavfilter 10. 4.100 / 10. 4.100
libswscale 8. 3.100 / 8. 3.100
libswresample 5. 3.100 / 5. 3.100
libpostproc 58. 3.100 / 58. 3.100</code></pre>
</div>
<p>根据以上返回的版本信息,可知已安装的FFmpeg版本号为7.1.1,同时configuration这行找到“--enable-libxevd --enable-libxeve”,说明FFmpeg已经启用了MPEG-5 EVC视频编解码器libxevd和libxeve。</p>
<p>更多详细的FFmpeg开发知识参见<span class="cke_widget_wrapper cke_widget_inline cke_widget_csdnlink cke_widget_selected" data-cke-display-name="a" data-cke-filter="off" data-cke-widget-id="1" data-cke-widget-wrapper="1">《FFmpeg开发实战:从零基础到短视频上线》一书。</span></p><br><br>
来源:https://www.cnblogs.com/aqi00/p/18967127
頁:
[1]