Skip to content

Instantly share code, notes, and snippets.

@teamblubee
Last active January 19, 2021 09:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save teamblubee/21937f6b606c6577f8c2a40da76d64e5 to your computer and use it in GitHub Desktop.
Save teamblubee/21937f6b606c6577f8c2a40da76d64e5 to your computer and use it in GitHub Desktop.
This is an opencl/amd build meaning I didn't enable any intel or nvidia specific options,
this build is also based on ubuntu style package names; That was my intentions.
```bash
#!/bin/bash
echo "Error! Edit this ffmpeg_build to change base_dir" 1>&2
exit 64
base_dir=/dev/null
sources_dir=$base_dir/sources
build_dir=$base_dir/build
bin_dir=$base_dir/bin
sudo apt -y update -qq && sudo apt -y install \
libopenmpt-dev
libmysofa-dev
libgsm1-dev
autoconf \
automake \
build-essential \
cmake \
git-core \
libass-dev \
libfreetype6-dev \
libsdl2-dev \
libtool \
gnutls-dev \
libva-dev \
libvdpau-dev \
libvorbis-dev \
libxcb1-dev \
libxcb-shm0-dev \
libxcb-xfixes0-dev \
pkg-config \
texinfo \
wget \
libdrm-amdgpu-dev \
zlib1g-dev \
frei0r-plugins-dev \
libchromaprint-dev \
libunistring-dev \
ladspa-sdk \
libaom-dev \
liblilv-dev \
libiec61883-dev \
libavc1394-dev \
libbs2b-dev \
libcaca-dev \
libpciaccess-dev \
meson \
libcodec2-dev \
libdav1d-dev \
libfdk-aac-dev \
libfontconfig-dev \
libfreetype-dev \
libfribidi-dev \
libdc1394-22-dev \
libdrm-dev \
libgme-dev \
libopenjp2-7-dev \
librsvg2-dev \
librtmp-dev \
librubberband-dev \
libshine-dev \
libsnappy-dev \
libsoxr-dev \
libssh-dev \
libspeex-dev \
libsrt-gnutls-dev \
libtheora-dev \
libtwolame-dev \
libvidstab-dev \
libwebp-dev \
libxvidcore-dev \
libzmq3-dev \
python-dev \
bison \
autoconf \
libtool-bin \
swig \
libpulse-dev \
libzvbi-dev \
libxml2-dev \
liblzma-dev \
libopenal-dev \
opencl-headers \
ocl-icd-opencl-dev \
libomxil-bellagio-dev
cd $sources_dir && \
wget -nc https://www.nasm.us/pub/nasm/releasebuilds/2.14.02/nasm-2.14.02.tar.bz2 && \
tar xjvf nasm-2.14.02.tar.bz2 && \
cd nasm-2.14.02 && \
./autogen.sh && \
PATH="$bin_dir:$PATH" ./configure --prefix="$build_dir" --bindir="$bin_dir" && \
PATH="$bin_dir:$HOME/bin:$PATH" make && make install
cd $sources_dir && \
wget -nc https://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz && \
tar xzvf yasm-1.3.0.tar.gz && \
cd yasm-1.3.0 && \
./configure --prefix="$build_dir" --bindir="$bin_dir" && \
PATH="$bin_dir:$HOME/bin:$PATH" make && make install
cd $sources_dir && \
git -C libdrm pull 2> /dev/null || git clone https://gitlab.freedesktop.org/mesa/drm.git libdrm && \
cd libdrm && \
if [ -d "$sources_dir/libdrm/build" ]; then ninja -C $sources_dir/libdrm/build uninstall && \
rm -rf "$sources_dir/libdrm/build" && meson -Dprefix="$build_dir" "$sources_dir/libdrm/build" && \
PATH="$bin_dir:$PATH" PKG_CONFIG_PATH="$build_dir/lib/pkgconfig:$PKG_CONFIG_PATH" ninja -C $sources_dir/libdrm/build install ; else \
cd $sources_dir/libdrm && \
PATH="$bin_dir:$PATH" PKG_CONFIG_PATH="$build_dir/lib/pkgconfig:$PKG_CONFIG_PATH" \
meson -Dprefix="$build_dir" "$sources_dir/libdrm/build" && \
PATH="$bin_dir:$PATH" PKG_CONFIG_PATH="$build_dir/lib/pkgconfig:$PKG_CONFIG_PATH" \
ninja -C $sources_dir/libdrm/build install ; fi
cd $sources_dir && \
git -C sphinxbase pull 2> /dev/null || git clone https://github.com/cmusphinx/sphinxbase.git sphinxbase && \
cd sphinxbase && \
PATH="$bin_dir:$PATH" PKG_CONFIG_PATH="$build_dir/lib/pkgconfig:$PKG_CONFIG_PATH" \
./autogen.sh --prefix="$build_dir" --bindir="$bin_dir" --enable-static --disable-shared --enable-pic && \
PATH="$bin_dir:$PATH" PKG_CONFIG_PATH="$build_dir/lib/pkgconfig:$PKG_CONFIG_PATH" \
./configure --prefix="$build_dir" --bindir="$bin_dir" --enable-static --disable-shared --enable-pic && \
PATH="$bin_dir:$HOME/bin:$PATH" make && make install
git -C pocketsphinx pull 2> /dev/null || git clone https://github.com/cmusphinx/pocketsphinx.git pocketsphinx && \
cd pocketsphinx && \
PATH="$bin_dir:$PATH" PKG_CONFIG_PATH="$build_dir/lib/pkgconfig:$PKG_CONFIG_PATH" \
./autogen.sh --prefix="$build_dir" --bindir="$bin_dir" --enable-static --disable-shared --enable-pic && \
PATH="$bin_dir:$PATH" PKG_CONFIG_PATH="$build_dir/lib/pkgconfig:$PKG_CONFIG_PATH" \
./configure --prefix="$build_dir" --bindir="$bin_dir" --enable-static --disable-shared --enable-pic && \
PATH="$bin_dir:$HOME/bin:$PATH" make && make install
cd $sources_dir && \
git -C x264 pull 2> /dev/null || git clone --depth 1 https://code.videolan.org/videolan/x264.git x264 && \
cd x264 && \
PATH="$bin_dir:$PATH" PKG_CONFIG_PATH="$build_dir/lib/pkgconfig" ./configure --prefix="$build_dir" --bindir="$bin_dir" --enable-static --enable-pic && \
PATH="$bin_dir:$HOME/bin:$PATH" make && make install
cd $sources_dir && \
git -C flite pull 2> /dev/null || git clone https://github.com/festvox/flite.git flite && \
cd flite && \
PATH="$bin_dir:$PATH" PKG_CONFIG_PATH="$build_dir/lib/pkgconfig:$build_dir/lib/x86_64-linux-gnu/pkgconfig:$PKG_CONFIG_PATH" && \
./configure --prefix="$build_dir" --disable-shared --enable-static --with-pic --with-audio=linux && \
PATH="$bin_dir:$HOME/bin:$PATH" make && make install
cd $sources_dir && \
git -C x265 pull 2> /dev/null || git clone https://bitbucket.org/multicoreware/x265_git.git x265 && \
cd x265/build/linux && \
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$build_dir" -DENABLE_SHARED=off ../../source && \
PATH="$bin_dir:$HOME/bin:$PATH" make && make install
cd $sources_dir && \
git -C libvpx pull 2> /dev/null || git clone --depth 1 https://chromium.googlesource.com/webm/libvpx.git && \
cd libvpx && \
PATH="$bin_dir:$PATH" ./configure --prefix="$build_dir" --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=yasm && \
PATH="$bin_dir:$HOME/bin:$PATH" make && make install
cd $sources_dir && \
git -C fdk-aac pull 2> /dev/null || git clone --depth 1 https://github.com/mstorsjo/fdk-aac && \
cd fdk-aac && \
autoreconf -fiv && \
./configure --prefix="$build_dir" --disable-shared && \
PATH="$bin_dir:$HOME/bin:$PATH" make && make install
cd $sources_dir && \
wget -nc https://github.com/alanxz/rabbitmq-c/archive/v0.10.0.tar.gz && \
tar xzvf v0.10.0.tar.gz && \
cd rabbitmq-c-0.10.0 && \
mkdir -p build && cd build && \
PATH="$bin_dir:$PATH" cmake -DCMAKE_INSTALL_PREFIX="$build_dir" -DBUILD_SHARED_LIBS=OFF -DBUILD_STATIC_LIBS=ON -DBUILD_EXAMPLES=OFF -DBUILD_TESTS=OFF ../ && \
PATH="$bin_dir:$PATH" cmake --build . --config Release --target install
cd $sources_dir && \
wget -nc https://downloads.sourceforge.net/project/lame/lame/3.100/lame-3.100.tar.gz && \
tar xzvf lame-3.100.tar.gz && \
cd lame-3.100 && \
PATH="$bin_dir:$PATH" ./configure --prefix="$build_dir" --bindir="$bin_dir" --disable-shared --enable-nasm && \
PATH="$bin_dir:$HOME/bin:$PATH" make && make install
cd $sources_dir && \
git -C opus pull 2> /dev/null || git clone --depth 1 https://github.com/xiph/opus.git && \
cd opus && \
./autogen.sh && \
./configure --prefix="$build_dir" --disable-shared && \
PATH="$bin_dir:$HOME/bin:$PATH" make && make install
cd $sources_dir && \
git -C ffmpeg-git pull 2> /dev/null || git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg-git && \
cd ffmpeg-git && \
PATH="$bin_dir:$PATH" PKG_CONFIG_PATH="$build_dir/lib/pkgconfig:$build_dir/lib/x86_64-linux-gnu/pkgconfig:$PKG_CONFIG_PATH" ./configure \
--prefix="$build_dir" \
--extra-cflags="-I$build_dir/include -I/usr/include" \
--extra-ldflags="-L$build_dir/lib -L$build_dir/lib/x86_64-linux-gnu -Wl,-rpath=$build_dir/lib/x86_64-linux-gnu -ldrm -L/usr/lib" \
--pkg-config-flags="--static" \
--extra-libs="-lpthread -lm" \
--bindir="$bin_dir" \
--arch=amd64 \
--disable-shared \
--disable-ffprobe \
--disable-ffplay \
--disable-gnutls \
--enable-openssl \
--enable-zlib \
--enable-librtmp \
--enable-static \
--enable-chromaprint \
--enable-gpl \
--enable-libass \
--enable-libfdk-aac \
--enable-libfreetype \
--enable-libmp3lame \
--enable-libopus \
--enable-libvorbis \
--enable-libvpx \
--enable-libx264 \
--enable-libx265 \
--enable-nonfree \
--enable-vdpau \
--enable-ladspa \
--enable-libaom \
--enable-libbs2b \
--enable-libcaca \
--enable-libcodec2 \
--enable-libdav1d \
--enable-libfontconfig \
--enable-libfribidi \
--enable-libgme \
--enable-libopenjpeg \
--enable-librsvg \
--enable-librubberband \
--enable-libshine \
--enable-libsnappy \
--enable-libsoxr \
--enable-libspeex \
--enable-libsrt \
--enable-libssh \
--enable-libtheora \
--enable-libtwolame \
--enable-libvidstab \
--enable-libwebp \
--enable-libxml2 \
--enable-libxvid \
--enable-libzmq \
--enable-libzvbi \
--enable-lv2 \
--enable-omx \
--enable-openal \
--enable-opencl \
--enable-opengl \
--enable-sdl2 \
--enable-pocketsphinx \
--enable-libdc1394 \
--enable-libdrm \
--enable-libiec61883 \
--enable-libass \
--enable-libfreetype \
--enable-libgsm \
--enable-libmp3lame \
--enable-libmysofa \
--enable-libopenjpeg \
--enable-libopenmpt \
--enable-libopus \
--enable-librabbitmq \
--enable-libvorbis \
--enable-libvpx \
--enable-libflite \
--enable-chromaprint \
--enable-frei0r && \
PATH="$bin_dir:$HOME/bin:$PATH" make && make install && \
hash -r
```
after running the script for the first time you'll get this error:
```shell
Already up to date.
ERROR: librabbitmq >= 0.7.1 not found using pkg-config
```
This is a problem with librabbitmq pkg-config file.
Steps to proceed
1) edit the ffmpeg_build.sh script and comment out the lines to rebuild librabbitmq
```bash
cd $sources_dir && \
wget -nc https://github.com/alanxz/rabbitmq-c/archive/v0.10.0.tar.gz && \
tar xzvf v0.10.0.tar.gz && \
cd rabbitmq-c-0.10.0 && \
mkdir -p build && cd build && \
PATH="$bin_dir:$PATH" cmake -DCMAKE_INSTALL_PREFIX="$build_dir" -DBUILD_SHARED_LIBS=OFF -DBUILD_STATIC_LIBS=ON -DBUILD_EXAMPLES=OFF -DBUILD_TESTS=OFF ../ && \
PATH="$bin_dir:$PATH" cmake --build . --config Release --target install
```
becomes
```bash
# cd $sources_dir && \
# wget -nc https://github.com/alanxz/rabbitmq-c/archive/v0.10.0.tar.gz && \
# tar xzvf v0.10.0.tar.gz && \
# cd rabbitmq-c-0.10.0 && \
# mkdir -p build && cd build && \
# PATH="$bin_dir:$PATH" cmake -DCMAKE_INSTALL_PREFIX="$build_dir" -DBUILD_SHARED_LIBS=OFF -DBUILD_STATIC_LIBS=ON -DBUILD_EXAMPLES=OFF -DBUILD_TESTS=OFF ../ && \
# PATH="$bin_dir:$PATH" cmake --build . --config Release --target install
```
so that the edits that you do in the next steps are not overwritten
then
edit $basedir/build/lib/x86_64-linux-gnu/pkgconfig/librabbitmq.pc
change
```bash
Name: rabbitmq-c
Description: An AMQP 0-9-1 client library
Version: 0.10.0
URL: https://github.com/alanxz/rabbitmq-c
Requires.private: openssl
Libs: -L${libdir} -lrabbitmq
Libs.private: rt;-pthread
CFlags: -I${includedir}
```
by editing Libs.private;
to "-t -pthread"
```bash
Name: rabbitmq-c
Description: An AMQP 0-9-1 client library
Version: 0.10.0
URL: https://github.com/alanxz/rabbitmq-c
Requires.private: openssl
Libs: -L${libdir} -lrabbitmq
Libs.private: -t -pthread
CFlags: -I${includedir}
```
I created an issue: https://github.com/alanxz/rabbitmq-c/issues/642
After you make this edit, rerun ffmpeg_build.sh script
you might also get an error for libflite
if that's the case, you need to edit ffmpeg-git/configure
change this line
```bash
flite_extralibs="-lflite_cmu_time_awb -lflite_cmu_us_awb -lflite_cmu_us_kal -lflite_cmu_us_kal16 -lflite_cmu_us_rms -lflite_cmu_us_slt -lflite_usenglish -lflite_cmulex -lflite"
```
to this line
```bash
flite_extralibs="-lflite_cmu_time_awb -lflite_cmu_us_awb -lflite_cmu_us_kal -lflite_cmu_us_kal16 -lflite_cmu_us_rms -lflite_cmu_us_slt -lflite_usenglish -lflite_cmulex -lflite -lasound"
```
==== After Install ====
```shell
./bin/ffmpeg
ffmpeg version N-100671-gc48110a4a4 Copyright (c) 2000-2021 the FFmpeg developers
built with gcc 10 (Ubuntu 10.2.0-13ubuntu1)
configuration: --prefix=/home/bb/Dev/ffmpeg_build/build --extra-cflags='-I/home/bb/Dev/ffmpeg_build/build/include -I/usr/include' --extra-ldflags='-L/home/bb/Dev/ffmpeg_build/build/lib -L/home/bb/Dev/ffmpeg_build/build/lib/x86_64-linux-gnu -Wl,-rpath=/home/bb/Dev/ffmpeg_build/build/lib/x86_64-linux-gnu -ldrm -L/usr/lib' --pkg-config-flags=--static --extra-libs='-lpthread -lm' --bindir=/home/bb/Dev/ffmpeg_build/bin --arch=amd64 --disable-shared --disable-ffprobe --disable-ffplay --disable-gnutls --enable-openssl --enable-zlib --enable-librtmp --enable-static --enable-chromaprint --enable-gpl --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-nonfree --enable-vdpau --enable-ladspa --enable-libaom --enable-libbs2b --enable-libcaca --enable-libcodec2 --enable-libdav1d --enable-libfontconfig --enable-libfribidi --enable-libgme --enable-libopenjpeg --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libwebp --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-pocketsphinx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-libass --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-librabbitmq --enable-libvorbis --enable-libvpx --enable-libflite --enable-chromaprint --enable-frei0r
libavutil 56. 63.101 / 56. 63.101
libavcodec 58.117.101 / 58.117.101
libavformat 58. 65.101 / 58. 65.101
libavdevice 58. 11.103 / 58. 11.103
libavfilter 7. 96.100 / 7. 96.100
libswscale 5. 8.100 / 5. 8.100
libswresample 3. 8.100 / 3. 8.100
libpostproc 55. 8.100 / 55. 8.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
Use -h to get full help or, even better, run 'man ffmpeg'
```
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment