[技术探索者手记] C++自学之路 × linux下构建自己的个性化的FFmpeg库
<blockquote><p>我是一名.NET开发者,最近开始学习C++。目前,我已经掌握了C++的基础语法和入门知识,并对FFmpeg产生了浓厚的兴趣。接下来,我计划自学与FFmpeg相关的技术内容,并记录自己的学习过程。欢迎大家提出宝贵意见,我会虚心接受并采纳大家的建议。谢谢!我是一名.NET开发者,最近开始学习C++。目前,我已经掌握了C++的基础语法和入门知识,并对FFmpeg产生了浓厚的兴趣。接下来,我计划自学与FFmpeg相关的技术内容,并记录自己的学习过程。欢迎大家提出宝贵意见,我会虚心接受并采纳大家的建议。谢谢!</p>
</blockquote>
<ul class="contains-task-list">
<li class="task-list-item"><input class="task-list-item-checkbox" checked="" disabled="" type="checkbox"><label> linux下构建自己的个性化的FFmpeg库</label></li>
</ul>
<hr>
<p>折腾了2个晚上,发现各种错误,不知如何解决!!!</p>
<h1 id="突然脑子开窍了发现无知了不要在傻傻百度了直接按照官方wiki自行构建即可">突然脑子开窍了,发现:无知了,不要在傻傻“百度”了,直接按照官方wiki自行构建即可</h1>
<p>ffmpeg build wiki</p>
<h1 id="根据我个人的需求构建了如下模块主要记录了一些官网没有和自行构建的配置">根据我个人的需求,构建了如下模块,主要记录了一些官网没有和自行构建的配置</h1>
<h2 id="get-the-dependencies">Get the Dependencies</h2>
<pre><code>sudo apt-get update -qq && sudo apt-get -y install \
autoconf \
automake \
build-essential \
cmake \
git-core \
libass-dev \
libfreetype6-dev \
libgnutls28-dev \
libmp3lame-dev \
libsdl2-dev \
libtool \
libva-dev \
libvdpau-dev \
libvorbis-dev \
libxcb1-dev \
libxcb-shm0-dev \
libxcb-xfixes0-dev \
meson \
ninja-build \
pkg-config \
texinfo \
wget \
yasm \
zlib1g-dev
</code></pre>
<h2 id="config-dir">config dir</h2>
<pre><code>mkdir -p ~/ffmpeg_sources ~/bin
</code></pre>
<h2 id="libx264">libx264</h2>
<pre><code>cd ~/ffmpeg_sources && \
git -C x264 pull 2> /dev/null || git clone --depth 1 https://code.videolan.org/videolan/x264.git && \
cd x264 && \
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/ffmpeg_build/bin" --enable-static --enable-pic && \
PATH="$HOME/bin:$PATH" make && \
make install
</code></pre>
<h2 id="libx265">libx265</h2>
<pre><code>sudo apt-get install mercurial libnuma-dev && \
cd ~/ffmpeg_sources && \
if cd x265 2> /dev/null; then git pull && cd ..; else git clone https://gitee.com/mirrors_videolan/x265.git; fi && \
cd x265/build/linux && \
PATH="$HOME/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_SHARED=off ../../source && \
PATH="$HOME/bin:$PATH" make && \
make install
</code></pre>
<h2 id="livbpx">livbpx</h2>
<pre><code>cd ~/ffmpeg_sources && \
git -C libvpx pull 2> /dev/null || git clone --depth 1 https://github.com/webmproject/libvpx.git && \
cd libvpx && \
PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=yasm --enable-pic && \
PATH="$HOME/bin:$PATH" make && \
make install
</code></pre>
<h2 id="libfdk-aac">libfdk-aac</h2>
<pre><code>cd ~/ffmpeg_sources && \
git -C fdk-aac pull 2> /dev/null || git clone --depth 1 https://github.com/mstorsjo/fdk-aac && \
cd fdk-aac && \
autoreconf -fiv && \
./configure CFLAGS=-fPIC --prefix="$HOME/ffmpeg_build" && \
make && \
make install
</code></pre>
<h2 id="libmp3lame">libmp3lame</h2>
<pre><code>cd ~/ffmpeg_sources && \
git clone--depth 1 https://gitee.com/hqiu/lame.git && \
cd lame && \
PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin"--enable-nasm --with-pic && \
PATH="$HOME/bin:$PATH" make && \
make install
</code></pre>
<h2 id="libopus">libopus</h2>
<pre><code>cd ~/ffmpeg_sources && \
git -C opus pull 2> /dev/null || git clone --depth 1 https://github.com/xiph/opus.git && \
cd opus && \
./autogen.sh && \
./configure --prefix="$HOME/ffmpeg_build"-with-pic&& \
make && \
make install
</code></pre>
<h2 id="srt">SRT</h2>
<pre><code>sudo apt-get update
sudo apt-get upgrade
sudo apt-get install tclsh pkg-config cmake libssl-dev build-essential
</code></pre>
<pre><code> cd ~/ffmpeg_sources && \
git -C srt pull 2> /dev/null || git clone --depth 1 https://github.com/Haivision/srt.git
cd srt
mkdir build
cd build
cmake ..
make
sudo make install
</code></pre>
<h2 id="ffmpeg">ffmpeg</h2>
<pre><code>cd ~/ffmpeg_sources && \
wget -O ffmpeg-snapshot.tar.bz2 https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2 && \
tar xjvf ffmpeg-snapshot.tar.bz2 && \
cd ffmpeg && \
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure \
--prefix="$HOME/ffmpeg_build" \
--pkg-config-flags="--static" \
--extra-cflags="-I$HOME/ffmpeg_build/include" \
--extra-ldflags="-L$HOME/ffmpeg_build/lib" \
--extra-libs="-lpthread -lm" \
--ld="g++" \
--bindir="$HOME/bin" \
--enable-shared \
--enable-gpl \
--enable-version3 \
--enable-nonfree \
--enable-libvpx \
--enable-libx264 \
--enable-libx265 \
--enable-libsrt \
--enable-libmp3lame \
--enable-libopus \
--enable-libfdk-aac \
--enable-pic \
--enable-gnutls && \
PATH="$HOME/bin:$PATH" make && \
make install && \
hash -r
</code></pre>
<blockquote>
<p>报错gnutls not found using pkg-config</p>
</blockquote>
<pre><code>sudo apt-get install libunistring-dev -y
</code></pre>
<h1 id="编译成功后通过-ffmpeg--version-查看构建信息如果出现缺少依赖请根据-ldd-ffmpeg-查看解决并创建-ln--s">编译成功后,通过 <code>ffmpeg -version</code> 查看构建信息,如果出现缺少依赖,请根据 <code>ldd ./ffmpeg</code> 查看解决,并创建 <code>ln -s</code></h1>
<pre><code>sudo ln -s /ffmpeg_build/lib/libavdevice.so /usr/lib/x86_64-linux-gnu/libavdevice.so.62
</code></pre>
<h2 id="demo-build-failed">demo build failed</h2>
<pre><code>echo "/root/project/cpp-journey/thirdparty/ffmpeg/lib" | sudo tee /etc/ld.so.conf.d/ffmpeg.conf
sudo ldconfig
</code></pre><br><br>
来源:https://www.cnblogs.com/netx/p/18856247
頁:
[1]