Skip to content

Commit 478a07b

Browse files
committedJul 16, 2021
3.0.0
Add `install-ffmpeg-4_4.sh`
1 parent 014bb4f commit 478a07b

File tree

2 files changed

+228
-0
lines changed

2 files changed

+228
-0
lines changed
 

‎README.md

+1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ This branch is used for archiving the dependencies used for building the project
2020
| Branch | Description |
2121
| :-------------: | :-----------: |
2222
| `install-ffmpeg-4_0_6.sh` | Scripts for installing `ffmpeg 4.0.6` on Ubuntu. |
23+
| `install-ffmpeg-4_4.sh` | Scripts for installing `ffmpeg 4.4` on Ubuntu. |
2324

2425
[this-rel]:https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/tag/deps-3.0.0 "Release of dependencies"
2526
[master]:https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python "Windows source files"

‎install-ffmpeg-4_4.sh

+227
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,227 @@
1+
#!/bin/bash
2+
3+
# Make bashline configurations.
4+
set -e
5+
RESET='\033[0m'
6+
COLOR='\033[1;32m'
7+
COLOR_ERR='\033[1;31m'
8+
9+
function msg {
10+
echo -e "${COLOR}$(date): $1${RESET}"
11+
}
12+
13+
function msg_err {
14+
echo -e "${COLOR}$(date): $1${RESET}"
15+
}
16+
17+
function fail {
18+
msg_err "Error : $?"
19+
exit 1
20+
}
21+
22+
function mcd {
23+
mkdir -p "$1" || fail
24+
cd "$1" || fail
25+
}
26+
27+
msg "Install apt packages."
28+
sudo apt-get update -qq && sudo apt-get -y install \
29+
autoconf automake build-essential cmake \
30+
git-core libass-dev libfreetype6-dev \
31+
libgnutls28-dev libsdl2-dev libtool \
32+
libva-dev libvdpau-dev libvorbis-dev \
33+
libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev \
34+
meson ninja-build pkg-config texinfo wget yasm \
35+
zlib1g-dev libunistring-dev libssl-dev \
36+
libc6 libc6-dev unzip libnuma1 libnuma-dev || fail
37+
38+
sudo pip3 install --user meson || fail
39+
40+
sudo apt-get -y upgrade || fail
41+
sudo apt-get -y dist-upgrade || fail
42+
sudo apt-get -y autoremove || fail
43+
sudo apt-get -y autoclean || fail
44+
45+
# Create the compile folder
46+
SOURCE_PATH="/apps/source/ffmpeg"
47+
BUILD_PATH="/apps/build/ffmpeg-4.4"
48+
BIN_PATH="/usr/local/bin"
49+
mkdir -p $SOURCE_PATH $BUILD_PATH || fail
50+
sudo mkdir -p $BIN_PATH || fail
51+
52+
# Install dependencies: CMake
53+
msg "Install cmake 3.21.0."
54+
cd $SOURCE_PATH || fail
55+
wget -O- https://cmake.org/files/v3.21/cmake-3.21.0.tar.gz | tar xz -C . || fail
56+
cd cmake-3.21.0 || fail
57+
./bootstrap || fail
58+
make -j$(nproc) || fail
59+
sudo make install || fail
60+
61+
# Install dependencies: NASM
62+
msg "Install nasm 2.15.05."
63+
cd $SOURCE_PATH || fail
64+
wget -O- https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/nasm-2.15.05.tar.bz2 | tar xj -C . || fail
65+
cd nasm-2.15.05 || fail
66+
./autogen.sh || fail
67+
PATH="$BIN_PATH:$PATH" ./configure --prefix="$BUILD_PATH" --bindir="$BIN_PATH" || fail
68+
PATH="$BIN_PATH:$PATH" make -j$(nproc) || fail
69+
sudo make install || fail
70+
71+
# Install dependencies: libx264
72+
msg "Install the newest x264."
73+
cd $SOURCE_PATH || fail
74+
git -C x264 pull 2> /dev/null || git clone --depth 1 https://code.videolan.org/videolan/x264.git
75+
cd x264 || fail
76+
PATH="$BIN_PATH:$PATH" PKG_CONFIG_PATH="$BUILD_PATH/lib/pkgconfig:$PKG_CONFIG_PATH" ./configure --prefix="$BUILD_PATH" --bindir="$BIN_PATH" --enable-shared --enable-static --enable-pic || fail
77+
PATH="$BIN_PATH:$PATH" make -j$(nproc) || fail
78+
sudo make install || fail
79+
80+
# Install dependencies: libx265
81+
msg "Install x265 3.5."
82+
cd $SOURCE_PATH || fail
83+
git -C x265_git pull 2> /dev/null || git clone --depth 1 -b 3.5 https://bitbucket.org/multicoreware/x265_git
84+
cd x265_git/build/linux || fail
85+
PATH="$BIN_PATH:$PATH" CXXFLAGS="$CXXFLAGS -fpermissive" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$BUILD_PATH" -DENABLE_SHARED=on ../../source || fail
86+
PATH="$BIN_PATH:$PATH" CXXFLAGS="$CXXFLAGS -fpermissive" make -j$(nproc) || fail
87+
sudo make install || fail
88+
sudo cp $BUILD_PATH/bin/x265 $BIN_PATH || fail
89+
90+
# Install dependencies: libvpx
91+
msg "Install vpx 1.10.0."
92+
cd $SOURCE_PATH || fail
93+
git -C libvpx pull 2> /dev/null || git clone --depth 1 -b v1.10.0 https://chromium.googlesource.com/webm/libvpx.git
94+
cd libvpx || fail
95+
PATH="$BIN_PATH:$PATH" ./configure --prefix="$BUILD_PATH" --enable-pic --enable-shared --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=yasm || fail
96+
PATH="$BIN_PATH:$PATH" make -j$(nproc) || fail
97+
sudo make install || fail
98+
99+
# Install dependencies: libfdk-aac
100+
msg "Install fdk-aac 2.0.2."
101+
cd $SOURCE_PATH || fail
102+
git -C fdk-aac pull 2> /dev/null || git clone --depth 1 --branch v2.0.2 https://github.com/mstorsjo/fdk-aac
103+
cd fdk-aac || fail
104+
autoreconf -fiv || fail
105+
./configure --prefix="$BUILD_PATH" --enable-shared || fail
106+
PATH="$BIN_PATH:$PATH" make -j$(nproc) || fail
107+
sudo make install || fail
108+
109+
# Install dependencies: libmp3lame
110+
msg "Install lame 3.100."
111+
cd $SOURCE_PATH || fail
112+
wget -O- https://downloads.sourceforge.net/project/lame/lame/3.100/lame-3.100.tar.gz | tar xz -C . || fail
113+
cd lame-3.100 || fail
114+
PATH="$BIN_PATH:$PATH" ./configure --prefix="$BUILD_PATH" --bindir="$BIN_PATH" --enable-shared --enable-nasm || fail
115+
PATH="$BIN_PATH:$PATH" make -j$(nproc) || fail
116+
sudo make install || fail
117+
118+
# Install dependencies: libopus
119+
msg "Install the newest opus."
120+
cd $SOURCE_PATH || fail
121+
git -C opus pull 2> /dev/null || git clone --depth 1 https://github.com/xiph/opus.git
122+
cd opus || fail
123+
./autogen.sh || fail
124+
./configure --prefix="$BUILD_PATH" --enable-shared || fail
125+
PATH="$BIN_PATH:$PATH" make -j$(nproc) || fail
126+
sudo make install || fail
127+
128+
# Install dependencies: libaom
129+
msg "Install the newest aom."
130+
cd $SOURCE_PATH || fail
131+
git -C aom pull 2> /dev/null || git clone --depth 1 https://aomedia.googlesource.com/aom
132+
mkdir -p aom_build || fail
133+
cd aom || fail
134+
cd ../aom_build || fail
135+
PATH="$BIN_PATH:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$BUILD_PATH" -DENABLE_SHARED=on -DCONFIG_PIC=1 -DENABLE_NASM=on ../aom || fail
136+
PATH="$BIN_PATH:$PATH" make -j$(nproc) || fail
137+
sudo make install || fail
138+
sudo cp $BUILD_PATH/bin/aom* $BIN_PATH || fail
139+
140+
# Install dependencies: libsvtav1
141+
msg "Install the newest svtav1."
142+
cd $SOURCE_PATH || fail
143+
git -C SVT-AV1 pull 2> /dev/null || git clone --depth 1 https://gitlab.com/AOMediaCodec/SVT-AV1.git
144+
mkdir -p SVT-AV1/build || fail
145+
cd SVT-AV1/build || fail
146+
PATH="$BIN_PATH:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$BUILD_PATH" -DCMAKE_BUILD_TYPE=Release -DBUILD_DEC=ON -DBUILD_SHARED_LIBS=ON .. || fail
147+
PATH="$BIN_PATH:$PATH" make -j$(nproc) || fail
148+
sudo make install || fail
149+
sudo cp $BUILD_PATH/bin/SvtAv1* $BIN_PATH || fail
150+
151+
# Install dependencies: libdav1d
152+
msg "Install the newest dav1d."
153+
cd $SOURCE_PATH || fail
154+
git -C dav1d pull 2> /dev/null || git clone --depth 1 https://code.videolan.org/videolan/dav1d.git
155+
mkdir -p dav1d/build || fail
156+
cd dav1d/build || fail
157+
meson setup -Denable_tools=false -Denable_tests=false --default-library=static .. --prefix "$BUILD_PATH" --libdir="$BUILD_PATH/lib" || fail
158+
ninja -j $(nproc) || fail
159+
sudo ninja install || fail
160+
161+
# Install dependencies: libvmaf
162+
msg "Install vmaf 2.1.1."
163+
cd $SOURCE_PATH || fail
164+
wget -O- https://github.com/Netflix/vmaf/archive/v2.1.1.tar.gz | tar xz -C . || fail
165+
mkdir -p vmaf-2.1.1/libvmaf/build || fail
166+
cd vmaf-2.1.1/libvmaf/build || fail
167+
meson setup -Denable_tests=false -Denable_docs=false --buildtype=release --default-library=static .. --prefix "$BUILD_PATH" --bindir="$BUILD_PATH/bin" --libdir="$BUILD_PATH/lib" || fail
168+
ninja -j $(nproc) || fail
169+
sudo ninja install || fail
170+
sudo cp $BUILD_PATH/bin/SvtAv1* $BIN_PATH || fail
171+
172+
# Install dependencies for GPU: ffnvcodec
173+
msg "Install the newest ffnvcodec."
174+
cd $SOURCE_PATH || fail
175+
git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git || fail
176+
cd nv-codec-headers || fail
177+
PATH="$BIN_PATH:$PATH" make -j$(nproc) || fail
178+
sudo make install
179+
sudo cp $BUILD_PATH/bin/vmaf $BIN_PATH || fail
180+
181+
# Install ffmpeg
182+
msg "Install ffmpeg 4.4."
183+
cd $SOURCE_PATH || fail
184+
wget -O- http://ffmpeg.org/releases/ffmpeg-4.4.tar.xz | tar xJ -C . || fail
185+
cd ffmpeg-4.4 || fail
186+
PATH="$BIN_PATH:$PATH" PKG_CONFIG_PATH="$BUILD_PATH/lib/pkgconfig:$PKG_CONFIG_PATH" ./configure \
187+
--prefix="$BUILD_PATH" \
188+
--pkg-config-flags="--static" \
189+
--extra-cflags="-I$BUILD_PATH/include -I/usr/local/cuda/include" \
190+
--extra-ldflags="-L$BUILD_PATH/lib -L/usr/local/cuda/lib64" \
191+
--extra-libs="-lpthread -lm" \
192+
--ld="g++" \
193+
--bindir="$BIN_PATH" \
194+
--enable-gpl \
195+
--enable-gnutls \
196+
--enable-cuda-sdk \
197+
--enable-libnpp \
198+
--enable-libaom \
199+
--enable-libass \
200+
--enable-libfdk-aac \
201+
--enable-libfreetype \
202+
--enable-libmp3lame \
203+
--enable-libopus \
204+
--enable-libsvtav1 \
205+
--enable-libdav1d \
206+
--enable-libvmaf \
207+
--enable-libvorbis \
208+
--enable-libvpx \
209+
--enable-libx264 \
210+
--enable-libx265 \
211+
--enable-shared \
212+
--enable-nonfree
213+
PATH="$HOME/bin:$PATH" make -j$(nproc) || fail
214+
sudo make install || fail
215+
hash -r || fail
216+
217+
# Make path configurations
218+
echo "export LD_LIBRARY_PATH=$BUILD_PATH/lib:\$LD_LIBRARY_PATH" >> ~/.bashrc
219+
echo "export PATH=$BUILD_PATH:\$PATH" >> ~/.bashrc
220+
echo "export PKG_CONFIG_PATH=$BUILD_PATH/lib/pkgconfig:\$PKG_CONFIG_PATH" >> ~/.bashrc
221+
echo "export PKG_CONFIG_LIBDIR=$BUILD_PATH/lib/:\$PKG_CONFIG_LIBDIR" >> ~/.bashrc
222+
export LD_LIBRARY_PATH=$BUILD_PATH/lib:$LD_LIBRARY_PATH
223+
export PATH=$BUILD_PATH:$PATH
224+
export PKG_CONFIG_PATH=$BUILD_PATH/lib/pkgconfig:$PKG_CONFIG_PATH
225+
export PKG_CONFIG_LIBDIR=$BUILD_PATH/lib/:$PKG_CONFIG_LIBDIR
226+
227+
msg "According to the instructions from ffmpeg, you need to run \"source ~/.profile\" now."

0 commit comments

Comments
 (0)
Please sign in to comment.