-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathinstall-ffmpeg-4_4.sh
More file actions
327 lines (294 loc) · 12.6 KB
/
install-ffmpeg-4_4.sh
File metadata and controls
327 lines (294 loc) · 12.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
#!/bin/bash
# Make bashline configurations.
set -e
RESET='\033[0m'
COLOR='\033[1;32m'
COLOR_ERR='\033[1;31m'
function msg {
echo -e "${COLOR}$(date): $1${RESET}"
}
function msg_err {
echo -e "${COLOR}$(date): $1${RESET}"
}
function fail {
msg_err "Error : $?"
exit 1
}
function mcd {
mkdir -p "$1" || fail
cd "$1" || fail
}
msg "Install apt packages."
sudo apt-get update -qq || fail
sudo apt-get -y install \
autoconf automake build-essential cmake \
git-core libass-dev libfreetype6-dev \
libgnutls28-dev libsdl1.2-dev libsdl2-dev libtool \
libva-dev libvdpau-dev libogg-dev libvorbis-dev \
libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev \
meson ninja-build pkg-config texinfo wget yasm \
zlib1g-dev libunistring-dev libssl-dev \
libopenmpt-dev libopencore-amrwb-dev \
libc6 libc6-dev unzip libnuma1 libnuma-dev \
perl clang libomp-dev libssh-dev libssl-dev || fail
msg "Install rustc and cargo 1.53.0."
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh || fail
source $HOME/.cargo/env || fail
rustup toolchain install 1.53.0 || fail
cargo install cargo-c || fail
msg "Install the newest meson."
sudo pip3 install --user meson || fail
sudo apt-get -y upgrade || fail
sudo apt-get -y dist-upgrade || fail
sudo apt-get -y autoremove || fail
sudo apt-get -y autoclean || fail
# Create the compile folder
SOURCE_PATH="/apps/source/ffmpeg"
BUILD_PATH="/apps/build/ffmpeg-4.4"
BIN_PATH="/usr/local/bin"
mkdir -p $SOURCE_PATH $BUILD_PATH || fail
sudo mkdir -p $BIN_PATH || fail
# Install dependencies: CMake
msg "Install cmake 3.21.0."
cd $SOURCE_PATH || fail
wget -O- https://cmake.org/files/v3.21/cmake-3.21.0.tar.gz | tar xz -C . || fail
cd cmake-3.21.0 || fail
./bootstrap || fail
make -j$(nproc) || fail
sudo make install || fail
# Install dependencies: NASM
msg "Install nasm 2.15.05."
cd $SOURCE_PATH || fail
wget -O- https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/nasm-2.15.05.tar.bz2 | tar xj -C . || fail
cd nasm-2.15.05 || fail
./autogen.sh || fail
PATH="$BIN_PATH:$PATH" ./configure --prefix="$BUILD_PATH" --bindir="$BIN_PATH" || fail
PATH="$BIN_PATH:$PATH" make -j$(nproc) || fail
sudo make install || fail
# Install dependencies: YASM
msg "Install yasm 1.3.0."
cd $SOURCE_PATH || fail
git -C yasm pull 2> /dev/null || git clone -b v1.3.0 --single-branch --depth 1 https://github.com/yasm/yasm.git
cd yasm || fail
./autogen.sh || fail
PATH="$BIN_PATH:$PATH" ./configure --prefix=$BUILD_PATH --bindir=$BIN_PATH || fail
PATH="$BIN_PATH:$PATH" make -j$(nproc) || fail
sudo make install || fail
# Install dependencies: libsrt
msg "Install srt 1.4.3."
cd $SOURCE_PATH || fail
git -C srt pull 2> /dev/null || git clone -b v1.4.3 --single-branch --depth 1 https://github.com/Haivision/srt.git
mkdir -p srt/build || fail
cd srt/build || fail
PATH="$BIN_PATH:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$BUILD_PATH" -DENABLE_CXX11=ON -DENABLE_CXX_DEPS=ON -DENABLE_SHARED=ON -DENABLE_STATIC=ON .. || fail
PATH="$BIN_PATH:$PATH" make -j$(nproc) || fail
sudo make install || fail
sudo cp $BUILD_PATH/bin/srt-* $BIN_PATH || fail
# Install dependencies: libopenjpeg
msg "Install openjpeg 2.4.0."
cd $SOURCE_PATH || fail
git -C openjpeg pull 2> /dev/null || git clone -b v2.4.0 --single-branch --depth 1 https://github.com/uclouvain/openjpeg.git
mkdir -p openjpeg/build || fail
cd openjpeg/build || fail
PATH="$BIN_PATH:$PATH" cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="$BUILD_PATH" .. || fail
PATH="$BIN_PATH:$PATH" make -j$(nproc) || fail
sudo make install || fail
sudo cp $BUILD_PATH/bin/opj_decompress $BIN_PATH || fail
sudo cp $BUILD_PATH/bin/opj_compress $BIN_PATH || fail
sudo cp $BUILD_PATH/bin/opj_dump $BIN_PATH || fail
# Install dependencies: libxvid
msg "Install xvidcore 1.3.7."
cd $SOURCE_PATH || fail
wget -O- https://downloads.xvid.com/downloads/xvidcore-1.3.7.tar.gz | tar xz -C . || fail
cd xvidcore/build/generic || fail
PATH="$BIN_PATH:$PATH" ./configure --bindir="$BIN_PATH" --prefix="$BUILD_PATH" || fail
PATH="$BIN_PATH:$PATH" make -j$(nproc) || fail
sudo make install || fail
# Install dependencies: libvidstab
msg "Install the newest vid.stab."
cd $SOURCE_PATH || fail
git -C vid.stab pull 2> /dev/null || git clone --depth 1 https://github.com/georgmartius/vid.stab.git
mkdir -p vid.stab/build || fail
cd vid.stab/build || fail
PATH="$BIN_PATH:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX:PATH="$BUILD_PATH" .. || fail
PATH="$BIN_PATH:$PATH" make -j$(nproc) || fail
sudo make install || fail
# Install dependencies: libtheora
msg "Install theora 1.2.0 alpha1."
cd $SOURCE_PATH || fail
wget -O- http://downloads.xiph.org/releases/theora/libtheora-1.2.0alpha1.tar.xz | tar xJ -C . || fail
cd libtheora-1.2.0alpha1 || fail
./autogen.sh || fail
PATH="$BIN_PATH:$PATH" ./configure --disable-examples --disable-oggtest --prefix="$BUILD_PATH" --bindir="$BIN_PATH" --enable-shared --enable-static || fail
PATH="$BIN_PATH:$PATH" make -j$(nproc) || fail
sudo make install || fail
# Install dependencies: libx264
msg "Install the newest x264."
cd $SOURCE_PATH || fail
git -C x264 pull 2> /dev/null || git clone --depth 1 https://code.videolan.org/videolan/x264.git
cd x264 || fail
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
PATH="$BIN_PATH:$PATH" make -j$(nproc) || fail
sudo make install || fail
# Install dependencies: libx265
msg "Install x265 3.5."
cd $SOURCE_PATH || fail
git -C x265_git pull 2> /dev/null || git clone --depth 1 -b 3.5 https://bitbucket.org/multicoreware/x265_git
cd x265_git/build/linux || fail
PATH="$BIN_PATH:$PATH" CXXFLAGS="$CXXFLAGS -fpermissive" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$BUILD_PATH" -DENABLE_SHARED=on ../../source || fail
PATH="$BIN_PATH:$PATH" CXXFLAGS="$CXXFLAGS -fpermissive" make -j$(nproc) || fail
sudo make install || fail
sudo cp $BUILD_PATH/bin/x265 $BIN_PATH || fail
# Install dependencies: libvpx
msg "Install vpx 1.10.0."
cd $SOURCE_PATH || fail
git -C libvpx pull 2> /dev/null || git clone --depth 1 -b v1.10.0 https://chromium.googlesource.com/webm/libvpx.git
cd libvpx || fail
PATH="$BIN_PATH:$PATH" ./configure --prefix="$BUILD_PATH" --enable-pic --enable-shared --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=yasm || fail
PATH="$BIN_PATH:$PATH" make -j$(nproc) || fail
sudo make install || fail
# Install dependencies: libfdk-aac
msg "Install fdk-aac 2.0.2."
cd $SOURCE_PATH || fail
git -C fdk-aac pull 2> /dev/null || git clone --depth 1 --branch v2.0.2 https://github.com/mstorsjo/fdk-aac
cd fdk-aac || fail
autoreconf -fiv || fail
./configure --prefix="$BUILD_PATH" --enable-shared || fail
PATH="$BIN_PATH:$PATH" make -j$(nproc) || fail
sudo make install || fail
# Install dependencies: libmp3lame
msg "Install lame 3.100."
cd $SOURCE_PATH || fail
wget -O- https://downloads.sourceforge.net/project/lame/lame/3.100/lame-3.100.tar.gz | tar xz -C . || fail
cd lame-3.100 || fail
PATH="$BIN_PATH:$PATH" ./configure --prefix="$BUILD_PATH" --bindir="$BIN_PATH" --enable-shared --enable-nasm || fail
PATH="$BIN_PATH:$PATH" make -j$(nproc) || fail
sudo make install || fail
# Install dependencies: libopus
msg "Install the newest opus."
cd $SOURCE_PATH || fail
git -C opus pull 2> /dev/null || git clone --depth 1 https://github.com/xiph/opus.git
cd opus || fail
./autogen.sh || fail
./configure --prefix="$BUILD_PATH" --enable-shared || fail
PATH="$BIN_PATH:$PATH" make -j$(nproc) || fail
sudo make install || fail
# Install dependencies: libaom
msg "Install the newest aom."
cd $SOURCE_PATH || fail
git -C aom pull 2> /dev/null || git clone --depth 1 https://aomedia.googlesource.com/aom
mkdir -p aom_build || fail
cd aom || fail
cd ../aom_build || fail
PATH="$BIN_PATH:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$BUILD_PATH" -DENABLE_SHARED=on -DCONFIG_PIC=1 -DENABLE_NASM=on ../aom || fail
PATH="$BIN_PATH:$PATH" make -j$(nproc) || fail
sudo make install || fail
sudo cp $BUILD_PATH/bin/aom* $BIN_PATH || fail
# Install dependencies: libsvtav1
msg "Install the newest svtav1."
cd $SOURCE_PATH || fail
git -C SVT-AV1 pull 2> /dev/null || git clone --depth 1 https://gitlab.com/AOMediaCodec/SVT-AV1.git
mkdir -p SVT-AV1/build || fail
cd SVT-AV1/build || fail
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
PATH="$BIN_PATH:$PATH" make -j$(nproc) || fail
sudo make install || fail
sudo cp $BUILD_PATH/bin/SvtAv1* $BIN_PATH || fail
# Install dependencies: libdav1d
msg "Install the newest dav1d."
cd $SOURCE_PATH || fail
git -C dav1d pull 2> /dev/null || git clone --depth 1 https://code.videolan.org/videolan/dav1d.git
mkdir -p dav1d/build || fail
cd dav1d/build || fail
PATH="$BIN_PATH:$PATH" meson setup -Denable_tools=false -Denable_tests=false --default-library=static .. --prefix "$BUILD_PATH" --libdir="$BUILD_PATH/lib" || fail
PATH="$BIN_PATH:$PATH" ninja -j $(nproc) || fail
sudo ninja install || fail
# Install dependencies: libvmaf
msg "Install vmaf 2.1.1."
cd $SOURCE_PATH || fail
wget -O- https://github.com/Netflix/vmaf/archive/v2.1.1.tar.gz | tar xz -C . || fail
mkdir -p vmaf-2.1.1/libvmaf/build || fail
cd vmaf-2.1.1/libvmaf/build || fail
PATH="$BIN_PATH:$PATH" 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
PATH="$BIN_PATH:$PATH" ninja -j $(nproc) || fail
sudo ninja install || fail
sudo cp $BUILD_PATH/bin/vmaf $BIN_PATH || fail
# Install dependencies: librav1e
msg "Install rav1e p20210713."
cd $SOURCE_PATH || fail
git -C rav1e pull 2> /dev/null || git clone --depth 1 -b p20210713 --single-branch https://github.com/xiph/rav1e.git
cd rav1e || fail
PATH="$BIN_PATH:$PATH" cargo cbuild --release || fail
sudo cp target/x86_64-unknown-linux-gnu/release/rav1e.h $BUILD_PATH/include/
sudo cp -r target/x86_64-unknown-linux-gnu/release/rav1e $BUILD_PATH/include/
sudo cp target/x86_64-unknown-linux-gnu/release/rav1e.pc $BUILD_PATH/lib/pkgconfig/
sudo cp target/x86_64-unknown-linux-gnu/release/librav1e.* $BUILD_PATH/lib/
cd $BUILD_PATH/lib || fail
sudo ln -s librav1e.so librav1e.so.0
# Install dependencies for GPU: ffnvcodec
msg "Install the newest ffnvcodec."
cd $SOURCE_PATH || fail
git -C nv-codec-headers pull 2> /dev/null || git clone --depth 1 https://git.videolan.org/git/ffmpeg/nv-codec-headers.git || fail
cd nv-codec-headers || fail
PATH="$BIN_PATH:$PATH" make -j$(nproc) || fail
sudo make install
# Install ffmpeg
msg "Install ffmpeg 4.4."
cd $SOURCE_PATH || fail
wget -O- http://ffmpeg.org/releases/ffmpeg-4.4.tar.xz | tar xJ -C . || fail
cd ffmpeg-4.4 || fail
# Fix the bug caused by NVCC.
wget -O- https://github.com/cainmagi/FFmpeg-Encoder-Decoder-for-Python/releases/download/deps-3.0.0/patch-ffmpeg_4_4.tar.xz | tar xJ -C . || fail
PATH="$BIN_PATH:$PATH" PKG_CONFIG_PATH="$BUILD_PATH/lib/pkgconfig:$PKG_CONFIG_PATH" ./configure \
--prefix="$BUILD_PATH" \
--pkg-config-flags="--static" \
--extra-cflags="-I$BUILD_PATH/include -I/usr/local/cuda/include" \
--extra-ldflags="-L$BUILD_PATH/lib -L/usr/local/cuda/lib64" \
--extra-libs="-lpthread -lm" \
--ld="g++" \
--bindir="$BIN_PATH" \
--enable-gpl \
--enable-gnutls \
--enable-version3 \
--enable-cuda \
--enable-cuda-nvcc \
--enable-nvenc \
--enable-libnpp \
--enable-sdl2 \
--enable-libssh \
--enable-libsrt \
--enable-libopenjpeg \
--enable-libaom \
--enable-libass \
--enable-libfdk-aac \
--enable-libfreetype \
--enable-libmp3lame \
--enable-libopus \
--enable-libsvtav1 \
--enable-libdav1d \
--enable-libvidstab \
--enable-librav1e \
--enable-libvmaf \
--enable-libvorbis \
--enable-libtheora \
--enable-libopenmpt \
--enable-libopencore-amrwb \
--enable-libvpx \
--enable-libxvid \
--enable-libx264 \
--enable-libx265 \
--enable-shared \
--enable-nonfree
PATH="$BIN_PATH:$PATH" make -j$(nproc) || fail
sudo make install || fail
hash -r || fail
# Make path configurations
echo "export LD_LIBRARY_PATH=$BUILD_PATH/lib:\$LD_LIBRARY_PATH" >> ~/.bashrc
echo "export PATH=$BUILD_PATH:\$PATH" >> ~/.bashrc
echo "export PKG_CONFIG_PATH=$BUILD_PATH/lib/pkgconfig:\$PKG_CONFIG_PATH" >> ~/.bashrc
echo "export PKG_CONFIG_LIBDIR=$BUILD_PATH/lib/:\$PKG_CONFIG_LIBDIR" >> ~/.bashrc
export LD_LIBRARY_PATH=$BUILD_PATH/lib:$LD_LIBRARY_PATH
export PATH=$BUILD_PATH:$PATH
export PKG_CONFIG_PATH=$BUILD_PATH/lib/pkgconfig:$PKG_CONFIG_PATH
export PKG_CONFIG_LIBDIR=$BUILD_PATH/lib/:$PKG_CONFIG_LIBDIR
msg "According to the instructions from ffmpeg, you need to run \"source ~/.profile\" now. You may need to add \"${BIN_PATH}\" to your \$PATH."