Last active
January 19, 2021 09:43
-
-
Save teamblubee/21937f6b606c6577f8c2a40da76d64e5 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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