├── .github
└── workflows
│ └── manual.yml
├── .gitignore
├── .idea
├── .gitignore
├── misc.xml
├── modules.xml
└── vcs.xml
├── Manual_Installation.md
├── QSV
├── function.sh
├── include.sh
├── install.sh
└── versions.txt
├── README.MD
├── README.md
├── VERSIONS.md
├── _Backup.md
├── _Bin
├── Convert.sh
├── ConvertMB.sh
├── ConvertQ.sh
├── Format.txt
├── QTFaststart.bash
├── _Command.txt
├── _Import.sh
├── _TempDocs.txt
└── 比较Bash.sh
├── changelog.md
├── function.sh
├── include.sh
├── install.sh
├── versions.txt
├── vultr
├── version.sh
└── vultr_app.sh
└── vultr_app.sh
/.github/workflows/manual.yml:
--------------------------------------------------------------------------------
1 | # This is a basic workflow that is manually triggered
2 |
3 | name: Manual workflow
4 |
5 | # Controls when the action will run. Workflow runs when manually triggered using the UI
6 | # or API.
7 | on:
8 | workflow_dispatch:
9 | # Inputs the workflow accepts.
10 | inputs:
11 | name:
12 | # Friendly description to be shown in the UI instead of 'name'
13 | description: 'Person to greet'
14 | # Default value if no value is explicitly provided
15 | default: 'World'
16 | # Input has to be provided for the workflow to run
17 | required: true
18 |
19 | # A workflow run is made up of one or more jobs that can run sequentially or in parallel
20 | jobs:
21 | # This workflow contains a single job called "greet"
22 | greet:
23 | # The type of runner that the job will run on
24 | runs-on: ubuntu-latest
25 |
26 | # Steps represent a sequence of tasks that will be executed as part of the job
27 | steps:
28 | # Runs a single command using the runners shell
29 | - name: Send greeting
30 | run: echo "Hello ${{ github.event.inputs.name }}"
31 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .idea
2 | source
3 |
4 |
--------------------------------------------------------------------------------
/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /shelf/
3 | /workspace.xml
4 | # Datasource local storage ignored files
5 | /dataSources/
6 | /dataSources.local.xml
7 | # Editor-based HTTP Client requests
8 | /httpRequests/
9 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/Manual_Installation.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | echo root:test123456 |sudo chpasswd root
4 | sudo sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_config;
5 | sudo sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication yes/g' /etc/ssh/sshd_config;
6 | sudo service sshd restart
7 |
8 |
9 |
10 |
11 | yum install -y wget python3
12 | #sudo update-alternatives --config python3
13 | #sudo alternatives --set python /usr/bin/python3
14 | pip3 install meson ninja
15 |
16 |
17 | SOURCE_URL='http://download.mirror.url' # Not use at this times
18 | SOURCE_DIR='/opt/ffmpegtoolkit'
19 | INSTALL_DIR='/usr/local/ffmpegtoolkit'
20 | cpu=$(cat "/proc/cpuinfo" | grep "processor" | wc -l)
21 | TMPDIR=~/tmp
22 | export SOURCE_URL
23 | export SOURCE_DIR
24 | export INSTALL_DIR
25 | export CUDA_HOME=/usr/local/cuda
26 | export LD_LIBRARY_PATH=/usr/local/ffmpegtoolkit/lib:/usr/local/lib:/usr/lib:$LD_LIBRARY_PATH
27 | export LIBRARY_PATH=/usr/local/ffmpegtoolkit/lib:/usr/lib:/usr/local/lib:$LIBRARY_PATH
28 | export CPATH=/include:/usr/local/ffmpegtoolkit/include:/usr/include/:/usr/local/include:$CPATH
29 | export PKG_CONFIG_LIBDIR=/usr/share/pkgconfig/:/usr/lib64/pkgconfig/:/usr/local/lib/pkgconfig/:/usr/lib/pkgconfig/:/usr/local/lib64/pkgconfig/:/lib/pkgconfig/
30 | export PKG_CONFIG_PATH=/tmp/medka-sdk/build/__bin/release/:/usr/share/pkgconfig/:/usr/lib64/pkgconfig/:/usr/local/lib/pkgconfig/:/usr/lib/pkgconfig/:/usr/local/lib64/pkgconfig/:/lib/pkgconfig/:/usr/local/ffmpegtoolkit/lib64/pkgconfig/:/usr/local/ffmpegtoolkit/lib/pkgconfig
31 |
32 |
33 |
34 | systemctl daemon-reload
35 | ldconfig
36 |
37 |
38 | LIBMFX_VERSION=1.35
39 | cd /opt
40 | wget https://github.com/lu-zero/mfx_dispatch/archive/refs/tags/${LIBMFX_VERSION}.tar.gz
41 | tar xfz ${LIBMFX_VERSION}.tar.gz
42 | cd mfx_dispatch-${LIBMFX_VERSION}
43 | autoreconf -i
44 | ./configure --prefix=${INSTALL_DIR}
45 | make
46 | make install
47 |
48 | find / -name "libmfx.pc"
49 | /usr/lib/pkgconfig/libmfx.pc
50 | /usr/local/lib/pkgconfig/libmfx.pc
51 | /usr/local/ffmpegtoolkit/lib/pkgconfig/libmfx.pc
52 |
53 | find / -name "libmfx.a"
54 | /usr/lib/libmfx.a
55 | /usr/local/lib/libmfx.a
56 |
57 | /usr/lib64/libmfx.a
58 | /usr/local/ffmpegtoolkit/lib/libmfx.a
59 |
60 | rm -rf /usr/lib/libmfx.*
61 | rm -rf /usr/local/lib/libmfx.*
62 |
63 | ln -sf /usr/local/ffmpegtoolkit/lib/libmfx.a /usr/local/lib/libmfx.a
64 | ln -sf /usr/local/ffmpegtoolkit/lib/libmfx.a /usr/local/lib/libmfx.a
65 |
66 | cd /opt/ffmpegtoolkit/src
67 | git clone https://github.com/oneapi-src/oneVPL
68 | git clone https://github.com/oneapi-src/oneVPL-intel-gpu
69 |
70 |
71 | cd /opt/ffmpegtoolkit/src
72 | [[ -d "ffmpeg" ]] && rm -rf "ffmpeg";
73 | git clone https://github.com/FFmpeg/FFmpeg ffmpeg
74 | cd ffmpeg
75 | ./configure \
76 | --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin \
77 | --pkg-config-flags="--static" \
78 | --extra-libs=-lpthread \
79 | --extra-libs=-lm \
80 | --extra-cflags="-I/usr/local/include -I/usr/local/cuda/include -I/include -I/usr/local/ffmpegtoolkit/include -I/tmp/medka-sdk/build/__bin/release" \
81 | --extra-ldflags="-L/usr/local/lib -L/usr/local/cuda/lib64 -L/usr/local/ffmpegtoolkit/lib -L/usr/local/ffmpegtoolkit/lib64 -L/tmp/medka-sdk/build/__bin/release/" \
82 | --enable-cross-compile \
83 | --disable-debug \
84 | --enable-fontconfig \
85 | --enable-gray \
86 | --enable-gpl \
87 | --enable-version3 \
88 | --enable-nonfree \
89 | --enable-runtime-cpudetect \
90 | --enable-shared \
91 | --enable-pthreads \
92 | --enable-libopencore-amrnb \
93 | --enable-libopencore-amrwb \
94 | --enable-libsoxr \
95 | --enable-libmp3lame \
96 | --enable-libfdk-aac \
97 | --enable-libdav1d \
98 | --enable-libkvazaar \
99 | --enable-libmfx \
100 | --enable-vaapi \
101 | --enable-opencl \
102 | --enable-libfreetype \
103 | --enable-libfribidi \
104 | --enable-libzimg \
105 | --enable-libopus \
106 | --enable-libtheora \
107 | --enable-libvorbis \
108 | --enable-libvpx \
109 | --enable-libx264 \
110 | --enable-libx265 \
111 | --enable-libaom \
112 | --enable-libxvid \
113 | --enable-libwebp \
114 | --enable-postproc \
115 | --enable-swscale \
116 | --enable-avfilter \
117 | --enable-libass \
118 | --enable-libaribb24 \
119 | --enable-libxml2
120 | make
121 | make install
122 |
123 | cd /opt/ffmpegtoolkit/src
124 |
125 | make tools/qt-faststart
126 | \cp -Rp tools/qt-faststart ${INSTALL_DIR}/bin/
127 | ldconfig
128 |
129 |
130 | --enable-cuvid \
131 | --enable-libnpp \
132 | --enable-nvenc \
133 | --enable-nvdec \
134 |
135 |
136 | # Version
137 | https://github.com/intel/libva/releases
138 | https://github.com/intel/gmmlib/tags
139 | https://github.com/intel/media-driver/tags
140 | https://github.com/Intel-Media-SDK/MediaSDK/releases
141 |
142 |
143 | ## https://airensoft.gitbook.io/ovenmediaengine/transcoding/gpu-usage/manual-installation
144 |
145 |
146 |
147 |
148 | /usr/sbin/getenforce
149 | sed -i s/SELINUX=enforcing/SELINUX=disabled/g /etc/selinux/config
150 | sed -i s/SELINUX=permissive/SELINUX=disabled/g /etc/selinux/config
151 | setenforce 0
152 |
153 | cat >/etc/resolv.conf <>/etc/dnf/dnf.conf
159 | sudo dnf update -y
160 |
161 | export CUDA_HOME=/usr/local/cuda
162 | export LD_LIBRARY_PATH=/usr/local/ffmpegtoolkit/lib:/usr/local/lib:/usr/lib:$LD_LIBRARY_PATH
163 | export LIBRARY_PATH=/usr/local/ffmpegtoolkit/lib:/usr/lib:/usr/local/lib:$LIBRARY_PATH
164 | export CPATH=/include:/usr/local/ffmpegtoolkit/include:/usr/include/:/usr/local/include:$CPATH
165 | export CMAKE_INCLUDE_PATH=/include:/usr/local/ffmpegtoolkit/include:/usr/include/:/usr/local/include:$CPATH
166 | export PKG_CONFIG_LIBDIR=/usr/share/pkgconfig/:/usr/lib64/pkgconfig/:/usr/local/lib/pkgconfig/:/usr/lib/pkgconfig/:/usr/local/lib64/pkgconfig/:/lib/pkgconfig/
167 | export PKG_CONFIG_PATH=/usr/share/pkgconfig/:/usr/lib64/pkgconfig/:/usr/local/lib/pkgconfig/:/usr/lib/pkgconfig/:/usr/local/lib64/pkgconfig/:/lib/pkgconfig/:/usr/local/ffmpegtoolkit/lib64/pkgconfig/:/usr/local/ffmpegtoolkit/lib/pkgconfig
168 |
169 |
170 | cd /opt
171 | dnf install -y epel-release
172 | dnf config-manager --set-enabled powertools
173 | dnf install -y wget tar xz tinyxml2 mediainfo libmediainfo bc unzip screen sshfs
174 | dnf install -y ImageMagick ImageMagick-devel libwebp
175 | dnf install -y screen unzip fuse fuse-common sshfs
176 |
177 | yum install -y \
178 | gcc gcc-c++ git libgcc glib2 bzip2 xz unzip make cmake automake autoconf patch ruby ncurses ncurses-devel mercurial hg neon expat expat-devel alsa-lib \
179 | zlib zlib-devel libjpeg libjpeg-devel libpng libpng-devel gd gd-devel gettext freetype freetype-devel ImageMagick ImageMagick-devel \
180 | libstdc++ libstdc++-devel numactl numactl-devel mediainfo re2c giflib-devel giflib libtiff libtiff-devel libtool libxml2 libxml2-devel \
181 | subversion doxygen SDL-devel SDL2 SDL2-devel freeglut-devel openssl-devel fribidi-devel fribidi libffi libffi-devel \
182 | redhat-lsb-core libdrm-devel libX11-devel libXi-devel opencl-headers ocl-icd ocl-icd-devel \
183 | cmake3 libpciaccess-devel intel-gpu-tools ocl-icd-* gmp-devel libxslt-devel libxslt xmlto jansson-devel \
184 | mesa-filesystem libwayland-cursor wayland-devel libwayland-egl
185 |
186 |
187 |
188 | sudo ln -sf /usr/lib64/libOpenCL.so.1 /usr/lib/libOpenCL.so
189 | sudo ln -sf /usr/bin/cmake3 /usr/bin/cmake
190 |
191 | #### yum install -y libva-devel
192 |
193 |
194 | INSTALL_DIR='/usr/local/ffmpegtoolkit'
195 |
196 | ## Wayland
197 | cd /opt
198 | WAYLAND_VERSION=1.20.0
199 | wget https://wayland.freedesktop.org/releases/wayland-${WAYLAND_VERSION}.tar.xz
200 | tar xf wayland-${WAYLAND_VERSION}.tar.xz
201 | cd wayland-${WAYLAND_VERSION}
202 | meson build/ --prefix=${INSTALL_DIR}
203 | ninja -C build/ install
204 |
205 | ## LibVA
206 | cd /opt
207 | wget https://github.com/intel/libva/releases/download/2.14.0/libva-2.14.0.tar.bz2
208 | tar xvjf libva-2.14.0.tar.bz2
209 | cd libva-2.14.0
210 | autoreconf -i
211 | ./configure --prefix=${INSTALL_DIR}
212 | make -j 18
213 | make install
214 |
215 | ## Libva-utils
216 | cd /opt
217 | wget https://github.com/intel/libva-utils/archive/refs/tags/2.14.0.tar.gz
218 | tar xfz 2.14.0.tar.gz
219 | cd libva-utils-2.14.0
220 | ./autogen.sh
221 | autoreconf -i
222 | ./configure --prefix="${INSTALL_DIR}"
223 | make -j$(nproc)
224 | sudo make install
225 |
226 | ## Intel VAAPI Driver
227 | cd /opt/ffmpegtoolkit/src
228 | wget https://github.com/intel/intel-vaapi-driver/archive/refs/tags/2.4.1.tar.gz
229 | tar xfz 2.4.1.tar.gz
230 | cd intel-vaapi-driver-2.4.1
231 | ./autogen.sh
232 | autoreconf -i
233 | ./configure --prefix=${INSTALL_DIR}
234 | make
235 | make install
236 |
237 | ## Gmmlib
238 | PREFIX=${INSTALL_DIR} && \
239 | TEMP_PATH=/tmp && \
240 | GMMLIB_VERSION=22.1.2 && \
241 | DIR=${TEMP_PATH}/gmmlib && \
242 | mkdir -p ${DIR} && \
243 | cd ${DIR} && \
244 | curl -sLf https://github.com/intel/gmmlib/archive/refs/tags/intel-gmmlib-${GMMLIB_VERSION}.tar.gz | tar -xz --strip-components=1 && \
245 | mkdir -p ${DIR}/build && \
246 | cd ${DIR}/build && \
247 | cmake -DCMAKE_INSTALL_PREFIX="${PREFIX}" .. && \
248 | make -j$(nproc) && \
249 | sudo make install && \
250 | rm -rf ${DIR}
251 |
252 |
253 | 修改环境变量增加搜索路径
254 | CMAKE_INCLUDE_PATH 和CMAKE_LIBRARY_PATH
255 | -DCMAKE_INCLUDE_PATH=/usr/local/ffmpegtoolkit/include \
256 |
257 | # Intel Media Driver
258 | cd /opt
259 | wget https://github.com/intel/media-driver/archive/refs/tags/intel-media-22.3.1.tar.gz
260 | tar xfz intel-media-22.3.1.tar.gz
261 | #cd /opt/media-driver-intel-media-22.3.1
262 | mkdir build_media
263 | cd build_media
264 | PKG_CONFIG_PATH=${PREFIX}/lib/pkgconfig:${PKG_CONFIG_PATH} cmake3 ../media-driver-intel-media-22.3.1 -DCMAKE_INSTALL_PREFIX=${PREFIX}
265 | make -j"$(nproc)"
266 | make install
267 |
268 | ## Intel Media SDK
269 | export LIBVA_DRIVERS_PATH=${PREFIX}/lib
270 | export LIBVA_DRIVER_NAME=iHD
271 | cd /opt
272 | INTEL_MEDIA_DRIVER_VERSION=22.3.1
273 | git clone https://github.com/Intel-Media-SDK/MediaSDK msdk
274 | cd msdk
275 | mkdir build && cd build
276 | PKG_CONFIG_PATH=${PREFIX}/lib/pkgconfig:${PKG_CONFIG_PATH} cmake3 .. -DCMAKE_INSTALL_PREFIX=${PREFIX}
277 | make -j"$(nproc)"
278 | make install
279 |
280 | cd /opt/msdk/build
281 |
282 |
283 |
284 |
285 |
286 |
287 |
--------------------------------------------------------------------------------
/QSV/function.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | # QSV
4 | dnf -y
5 |
6 | ## LibMFX
7 | _Install_libmfx() {
8 | local name='libmfx';
9 | local LIBMFX_VERSION=1.35
10 | pushd ${SOURCE_DIR}/src > /dev/null
11 | echo -e "${CBLUE} Install ${name} ${CEND}";
12 | [[ -f "${LIBMFX_VERSION}.tar.gz" ]] && rm -rf "${LIBMFX_VERSION}.tar.gz";
13 | [[ -d "mfx_dispatch-${LIBMFX_VERSION}" ]] && rm -rf "mfx_dispatch-${LIBMFX_VERSION}";
14 | wget https://github.com/lu-zero/mfx_dispatch/archive/refs/tags/${LIBMFX_VERSION}.tar.gz
15 | tar xfz ${LIBMFX_VERSION}.tar.gz
16 | cd mfx_dispatch-${LIBMFX_VERSION}
17 | autoreconf -i
18 | ./configure --prefix=${INSTALL_DIR}
19 | make
20 | make install
21 | popd > /dev/null
22 | }
23 | ## Wanyland
24 | _Install_wanyland() {
25 | local name='wayland';
26 | local WAYLAND_VERSION=1.20.0
27 | pushd ${SOURCE_DIR}/src > /dev/null
28 | echo -e "${CBLUE} Install ${name} ${CEND}";
29 | [[ -f "wayland-${WAYLAND_VERSION}.tar.xz" ]] && rm -rf "wayland-${WAYLAND_VERSION}.tar.xz";
30 | [[ -d "wayland-${WAYLAND_VERSION}" ]] && rm -rf "wayland-${WAYLAND_VERSION}";
31 | wget https://wayland.freedesktop.org/releases/wayland-${WAYLAND_VERSION}.tar.xz
32 | tar xf wayland-${WAYLAND_VERSION}.tar.xz
33 | cd wayland-${WAYLAND_VERSION}
34 | meson build/ --prefix=${INSTALL_DIR}
35 | ninja -C build/ install
36 | echo -e "Install Done";
37 | popd > /dev/null
38 | }
39 | ## Libva
40 | _Install_libva() {
41 | local name='libva';
42 | local version="";
43 | pushd ${SOURCE_DIR}/src > /dev/null
44 | echo -e "${CBLUE} Install ${name} ${CEND}";
45 | [[ -f "libva-2.14.0.tar.bz2" ]] && rm -rf "libva-2.14.0.tar.bz2";
46 | [[ -d "libva-2.14.0" ]] && rm -rf "libva-2.14.0";
47 | wget https://github.com/intel/libva/releases/download/2.14.0/libva-2.14.0.tar.bz2
48 | tar xvjf libva-2.14.0.tar.bz2
49 | cd libva-2.14.0
50 | autoreconf -i
51 | ./configure --prefix=${INSTALL_DIR}
52 | make -j 18
53 | make install
54 | echo -e "Install Done";
55 | popd > /dev/null
56 | }
57 | ## Libva Utils
58 | _Install_libva-utils() {
59 | local name='libva-utils';
60 | local version="";
61 | pushd ${SOURCE_DIR}/src > /dev/null
62 | echo -e "${CBLUE} Install ${name} ${CEND}";
63 | [[ -f "2.14.0.tar.gz" ]] && rm -rf "2.14.0.tar.gz";
64 | [[ -d "libva-utils-2.14.0" ]] && rm -rf "libva-utils-2.14.0";
65 | wget https://github.com/intel/libva-utils/archive/refs/tags/2.14.0.tar.gz
66 | tar xfz 2.14.0.tar.gz
67 | cd libva-utils-2.14.0
68 | ./autogen.sh
69 | autoreconf -i
70 | ./configure --prefix="${INSTALL_DIR}"
71 | make -j$(nproc)
72 | sudo make install
73 | echo -e "Install Done";
74 | popd > /dev/null
75 | }
76 | ## Intel VAAPI Driver
77 | _Install_intel-vaapi-driver() {
78 | local name='Intel Vaapi Driver';
79 | local version="";
80 | pushd ${SOURCE_DIR}/src > /dev/null
81 | echo -e "${CBLUE} Install ${name} ${CEND}";
82 | [[ -f "2.4.1.tar.gz" ]] && rm -rf "2.4.1.tar.gz";
83 | [[ -d "intel-vaapi-driver-2.4.1" ]] && rm -rf "intel-vaapi-driver-2.4.1";
84 | wget https://github.com/intel/intel-vaapi-driver/archive/refs/tags/2.4.1.tar.gz
85 | tar xfz 2.4.1.tar.gz
86 | cd intel-vaapi-driver-2.4.1
87 | ./autogen.sh
88 | autoreconf -i
89 | ./configure --prefix=${INSTALL_DIR}
90 | make
91 | make install
92 | echo -e "Install Done";
93 | popd > /dev/null
94 | }
95 | ## Intel GmmLib
96 | _Install_intel-gmmlib() {
97 | local name='Intel GMMLib';
98 | local GMMLIB_VERSION=22.1.2
99 | pushd ${SOURCE_DIR}/src > /dev/null
100 | echo -e "${CBLUE} Install ${name} ${CEND}";
101 | [[ -f "intel-gmmlib-${GMMLIB_VERSION}.tar.gz" ]] && rm -rf "intel-gmmlib-${GMMLIB_VERSION}.tar.gz";
102 | [[ -d "gmmlib-intel-gmmlib-${GMMLIB_VERSION}" ]] && rm -rf "gmmlib-intel-gmmlib-${GMMLIB_VERSION}";
103 | wget https://github.com/intel/gmmlib/archive/refs/tags/intel-gmmlib-${GMMLIB_VERSION}.tar.gz
104 | tar xfz intel-gmmlib-${GMMLIB_VERSION}.tar.gz
105 | cd gmmlib-intel-gmmlib-${GMMLIB_VERSION}
106 | mkdir -p build
107 | cd build;
108 | cmake -DCMAKE_INSTALL_PREFIX="${INSTALL_DIR}" ..
109 | make -j$(nproc)
110 | sudo make install
111 | echo -e "Install Done";
112 | popd > /dev/null
113 | }
114 | ## Intel Media Driver
115 | _Install_intel-media-driver() {
116 | local name='Intel Media Driver';
117 | local version="";
118 | pushd ${SOURCE_DIR}/src > /dev/null
119 | echo -e "${CBLUE} Install ${name} ${CEND}";
120 | [[ -f "intel-media-22.3.1.tar.gz" ]] && rm -rf "intel-media-22.3.1.tar.gz";
121 | [[ -d "" ]] && rm -rf "";
122 | wget https://github.com/intel/media-driver/archive/refs/tags/intel-media-22.3.1.tar.gz
123 | tar xfz intel-media-22.3.1.tar.gz
124 | cd media-driver-intel-media-22.3.1
125 | mkdir build
126 | cd build
127 | cmake -DCMAKE_INSTALL_PREFIX="${INSTALL_DIR}" ..
128 | make -j"$(nproc)"
129 | make install
130 | echo -e "Install Done";
131 | popd > /dev/null
132 | }
133 | ## Intel Media SDK
134 | _Install_intel-media-sdk() {
135 | export LIBVA_DRIVERS_PATH=${INSTALL_DIR}/lib
136 | export LIBVA_DRIVER_NAME=iHD
137 | local name='Intel Media SDK';
138 | local INTEL_MEDIA_DRIVER_VERSION=22.3.1
139 | pushd ${SOURCE_DIR}/src > /dev/null
140 | echo -e "${CBLUE} Install ${name} ${CEND}";
141 | [[ -d "msdk" ]] && rm -rf "msdk";
142 | git clone https://github.com/Intel-Media-SDK/MediaSDK msdk
143 | cd msdk
144 | mkdir build && cd build
145 | cmake3 -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} ..
146 | make -j"$(nproc)"
147 | make install
148 | echo -e "Install Done";
149 | popd > /dev/null
150 | }
151 |
152 | # Nvadia
153 | ## NvHeader
154 | _Install_nv_header() {
155 | local name='Nv Coder Header';
156 | pushd ${SOURCE_DIR}/src > /dev/null
157 | echo -e "${CBLUE} Install ${name} ${CEND}";
158 | [ -d nv-codec-headers ] && rm -rf "nv-codec-headers"
159 | git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git
160 | cd nv-codec-headers
161 | make && make install
162 | popd > /dev/null
163 | }
164 | ## Cuda
165 | _Install_nv_cuda() {
166 | local name='CUDA';
167 | pushd ${SOURCE_DIR}/src > /dev/null
168 | echo -e "${CBLUE} Install ${name} ${CEND}";
169 | sudo dnf config-manager --add-repo http://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/cuda-rhel8.repo
170 | sudo dnf clean all
171 | #sudo dnf -y module install nvidia-driver:latest-dkms
172 | sudo dnf -y install cuda
173 | popd > /dev/null
174 | }
175 |
176 | # Tools Package
177 | _Install_nasm() {
178 | local name='NSAM';
179 | pushd ${SOURCE_DIR}/src > /dev/null
180 | echo -e "${CBLUE} Install ${name} ${CEND}";
181 | if [[ -f "nasm-${NASM_VER}.tar.gz" && -d nasm-${NASM_VER} ]]; then
182 | rm -rf nasm-${NASM_VER} nasm-${NASM_VER}.tar.gz
183 | fi
184 | wget https://www.nasm.us/pub/nasm/releasebuilds/${NASM_VER}/nasm-${NASM_VER}.tar.gz
185 | tar xzvf nasm-${NASM_VER}.tar.gz
186 | cd nasm-${NASM_VER}
187 | ./configure
188 | make -j VERBOSE=1
189 | make install
190 | make distclean
191 | popd > /dev/null
192 | }
193 |
194 | _Install_yasm() {
195 | local name='YSAM';
196 | pushd ${SOURCE_DIR}/src > /dev/null
197 | echo -e "${CBLUE} Install ${name} ${CEND}";
198 | if [[ -f "yasm-${YASM_VER}.tar.gz" && -d yasm-${YASM_VER} ]]; then
199 | rm -rf nasm-${YASM_VER} nasm-${YASM_VER}.tar.gz
200 | fi
201 | wget http://www.tortall.net/projects/yasm/releases/yasm-${YASM_VER}.tar.gz
202 | tar xfz yasm-${YASM_VER}.tar.gz
203 | cd yasm-${YASM_VER}
204 | ./configure
205 | make
206 | make install
207 | popd > /dev/null
208 | }
209 |
210 | # Subtitle Module
211 | _Install_libsrt() {
212 | local name='LibSrt';
213 | pushd ${SOURCE_DIR}/src > /dev/null
214 | echo -e "${CBLUE} Install ${name} ${CEND}";
215 | [[ -d "srt" ]] && rm -rf "srt";
216 | git clone --depth 1 https://github.com/Haivision/srt.git
217 | cd srt
218 | cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} -DENABLE_SHARED:bool=ON
219 | make
220 | make install
221 | popd > /dev/null
222 | }
223 |
224 | _Install_libass() {
225 | local name='Libass';
226 | pushd ${SOURCE_DIR}/src > /dev/null
227 | echo -e "${CBLUE} Install ${name} ${CEND}";
228 |
229 | if [[ -f "libass-${LIBASS_VER}.tar.gz" && -d libass-${LIBASS_VER}/ ]]; then
230 | rm -rf libass-${LIBASS_VER} libass-${LIBASS_VER}.tar.gz
231 | fi
232 |
233 | wget https://github.com/libass/libass/releases/download/${LIBASS_VER}/libass-${LIBASS_VER}.tar.gz
234 | tar -xvzf libass-${LIBASS_VER}.tar.gz
235 | cd libass-${LIBASS_VER}
236 | ./configure --prefix=${INSTALL_DIR}
237 | make
238 | make install
239 | make distclean
240 | popd > /dev/null
241 | }
242 |
243 | _Install_libaribb24() {
244 | local name='';
245 | pushd ${SOURCE_DIR}/src > /dev/null
246 | echo -e "${CBLUE} Install ${name} ${CEND}";
247 | [[ -d "aribb24" ]] && rm -rf "aribb24";
248 | git clone https://github.com/nkoriyama/aribb24
249 | cd aribb24
250 | ./bootstrap
251 | ./configure --prefix=${INSTALL_DIR}
252 | make
253 | make install
254 | popd > /dev/null
255 | }
256 |
257 | # Encoder or Decoder
258 | _Install_libvid() {
259 | local name='LIB VID';
260 | pushd ${SOURCE_DIR}/src > /dev/null
261 | echo -e "${CBLUE} Install ${name} ${CEND}";
262 | [[ -d "vid.stab" ]] && rm -rf "vid.stab";
263 | git clone --depth 1 https://github.com/georgmartius/vid.stab
264 | cd vid.stab
265 | cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} -DENABLE_SHARED:bool=ON
266 | make
267 | make install
268 | make distclean
269 | popd > /dev/null
270 | }
271 |
272 | _Install_liba52dec() {
273 | local name='Lib A52Dec';
274 | pushd ${SOURCE_DIR}/src > /dev/null
275 | echo -e "${CBLUE} Install ${name} ${CEND}";
276 | [[ -d "a52dec-${LIBA52DEC_VER}" ]] && rm -rf a52dec-${LIBA52DEC_VER}
277 | wget https://ftp.osuosl.org/pub/blfs/conglomeration/a52dec/a52dec-${LIBA52DEC_VER}.tar.gz
278 | tar xfz a52dec-${LIBA52DEC_VER}.tar.gz
279 | cd a52dec-${LIBA52DEC_VER}
280 | ./bootstrap
281 | ./configure --prefix=${INSTALL_DIR} --enable-shared 'CFLAGS=-fPIC'
282 | make
283 | make install
284 | make distclean
285 | popd > /dev/null
286 | }
287 |
288 | _Install_libamrwb() {
289 | local name='AMRWB';
290 | pushd ${SOURCE_DIR}/src > /dev/null
291 | echo -e "${CBLUE} Install ${name} ${CEND}";
292 |
293 | if [[ -f "amrwb-${AMRWB_VER}.tar.gz" && -d amrwb-${AMRWB_VER} ]]; then
294 | rm -rf amrwb-*
295 | fi
296 | wget http://www.penguin.cz/~utx/ftp/amr/amrwb-${AMRWB_VER}.tar.bz2
297 | tar -xvjf amrwb-${AMRWB_VER}.tar.bz2
298 | cd amrwb-${AMRWB_VER}
299 | ./configure --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin
300 | make
301 | make install
302 | popd > /dev/null
303 | }
304 |
305 | _Install_libamrnb() {
306 | local name='AMRNB';
307 | pushd ${SOURCE_DIR}/src > /dev/null
308 | echo -e "${CBLUE} Install ${name} ${CEND}";
309 | if [[ -f "amrnb-${AMRNB_VER}" && -d amrnb-${AMRNB_VER} ]]; then
310 | rm -rf amrnb-${AMRNB_VER}
311 | fi
312 | wget http://www.penguin.cz/~utx/ftp/amr/amrnb-${AMRNB_VER}.tar.bz2
313 | tar -xvjf amrnb-${AMRNB_VER}.tar.bz2
314 | cd amrnb-${AMRNB_VER}
315 | ./configure --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin
316 | make -j $cpu
317 | make install
318 | #make distclean
319 | popd > /dev/null
320 | }
321 |
322 | _Install_libao() {
323 | local name='Lib Ao';
324 | pushd ${SOURCE_DIR}/src > /dev/null
325 | echo -e "${CBLUE} Install ${name} ${CEND}";
326 | if [[ -f "libao-${LIBAO_VER}.tar.gz" && -d libao-${LIBAO_VER} ]]; then
327 | rm -rf libao-*
328 | fi
329 | wget -4 http://downloads.xiph.org/releases/ao/libao-${LIBAO_VER}.tar.gz
330 | tar -xvzf libao-${LIBAO_VER}.tar.gz
331 | cd libao-${LIBAO_VER}/
332 | ./configure --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin
333 | make
334 | make install
335 | #make distclean
336 | popd > /dev/null
337 | }
338 |
339 | _Install_libilbc() {
340 | local name='libilbc';
341 | pushd ${SOURCE_DIR}/src > /dev/null
342 | echo -e "${CBLUE} Install ${name} ${CEND}";
343 | [[ -d "libilbc" ]] && rm -rf "libilbc";
344 | git clone --depth=1 https://github.com/TimothyGu/libilbc.git
345 | git submodule update --init
346 | cmake .
347 | #cmake -DBUILD_SHARED_LIBS=OFF .
348 | cmake --build .
349 | # ffmpeg -f pulse -i default -f s16le -filter:a "pan=1|c0=c0+c1,aresample=8000" sample.pcm
350 | #ninja install or make install
351 | popd > /dev/null
352 | }
353 |
354 | _Install_libgsm() {
355 | local name='libgsm';
356 | pushd ${SOURCE_DIR}/src > /dev/null
357 | echo -e "${CBLUE} Install ${name} ${CEND}";
358 | [[ -d "srt" ]] && rm -rf "srt";
359 | git clone https://github.com/timothytylee/libgsm
360 | cd libgsm
361 | ./configure
362 | make
363 | make install
364 | popd > /dev/null
365 | }
366 |
367 | _Install_libcelt() {
368 | local name='CELT';
369 | pushd ${SOURCE_DIR}/src > /dev/null
370 | echo -e "${CBLUE} Install ${name} ${CEND}";
371 | [[ -d "celt" ]] && rm -rf "celt";
372 | git clone https://gitlab.xiph.org/xiph/celt
373 | cd celt
374 | ./autogen.sh
375 | ./configure --enable-fixed
376 | make
377 | make install
378 | popd > /dev/null
379 | }
380 |
381 | _Install_libfaad2() {
382 | local name='';
383 | pushd ${SOURCE_DIR}/src > /dev/null
384 | echo -e "${CBLUE} Install ${name} ${CEND}";
385 | [[ -d "faad2" ]] && rm -rf "faad2";
386 | rm -rf faad2
387 | git clone https://github.com/dsvensson/faad2
388 | cd faad2/
389 | ./bootstrap
390 | ./configure --with-mpeg4ip --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin
391 | make
392 | make install
393 | make distclean
394 | popd > /dev/null
395 | }
396 |
397 | _Install_libaacenc() {
398 | local name='Lib AACENC';
399 | pushd ${SOURCE_DIR}/src > /dev/null
400 | echo -e "${CBLUE} Install ${name} ${CEND}";
401 | [[ -d "vo-aacenc" ]] && rm -rf "vo-aacenc";
402 | git clone https://github.com/mstorsjo/vo-aacenc
403 | cd vo-aacenc/
404 | autoreconf -fiv
405 | ./configure --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin
406 | make
407 | make install
408 | make distclean
409 | popd > /dev/null
410 | }
411 |
412 | _Install_libwmf() {
413 | local name='LIB WMF';
414 | pushd ${SOURCE_DIR}/src > /dev/null
415 | echo -e "${CBLUE} Install ${name} ${CEND}";
416 | if [[ -f "libwmf-${LIBWMF_VER}.tar.gz" && -d libwmf-${LIBWMF_VER} ]]; then
417 | rm -rf libwmf-${LIBWMF_VER} libwmf-${LIBWMF_VER}.tar.gz
418 | fi
419 | wget -c https://sourceforge.net/projects/wvware/files/libwmf/0.2.8.4/libwmf-${LIBWMF_VER}.tar.gz/download -O libwmf-${LIBWMF_VER}.tar.gz
420 | tar -xvzf libwmf-${LIBWMF_VER}.tar.gz
421 | cd libwmf-${LIBWMF_VER}/
422 | ./configure --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin
423 | make
424 | make install
425 | make distclean
426 |
427 | popd > /dev/null
428 | }
429 |
430 | _Install_libspeex() {
431 | local name='Speex';
432 | pushd ${SOURCE_DIR}/src > /dev/null
433 | echo -e "${CBLUE} Install ${name} ${CEND}";
434 | if [[ -f "speex-${SPEEX_VER}.tar.gz" && -d speex-${SPEEX_VER} ]]; then
435 | rm -rf speex-${SPEEX_VER}.tar.gz speex-${SPEEX_VER}
436 | fi
437 | wget http://downloads.xiph.org/releases/speex/speex-1.2.0.tar.gz
438 | tar -xvzf speex-${SPEEX_VER}.tar.gz
439 | cd speex-${SPEEX_VER}
440 | ./configure --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin
441 | make
442 | make install
443 | make distclean
444 | popd > /dev/null
445 | }
446 |
447 | _Install_libflac() {
448 | local name='FLAC';
449 | pushd ${SOURCE_DIR}/src > /dev/null
450 | echo -e "${CBLUE} Install ${name} ${CEND}";
451 | if [[ -f "flac-${FLAC_VER}.tar.xz" && -d flac-${FLAC_VER} ]]; then
452 | rm -rf flac-${FLAC_VER}.tar.xz flac-${FLAC_VER}
453 | fi
454 | wget https://ftp.osuosl.org/pub/xiph/releases/flac/flac-${FLAC_VER}.tar.xz
455 | tar -xJf flac-${FLAC_VER}.tar.xz
456 | cd flac-${FLAC_VER}/
457 | ./configure --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin
458 | make
459 | make install
460 | make distclean
461 | popd > /dev/null
462 | }
463 |
464 | _Install_liblame() {
465 | local name='LAME';
466 | pushd ${SOURCE_DIR}/src > /dev/null
467 | echo -e "${CBLUE} Install ${name} ${CEND}";
468 | if [[ -f "lame-${LAME_VER}.tar.gz" && -d lame-${LAME_VER} ]]; then
469 | rm -rf lame-${LAME_VER}.tar.gz lame-${LAME_VER}
470 | fi
471 | wget https://ftp.osuosl.org/pub/blfs/conglomeration/lame/lame-${LAME_VER}.tar.gz
472 | tar -zxvf lame-${LAME_VER}.tar.gz
473 | cd lame-${LAME_VER}/
474 | ./configure --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin --enable-mp3x --enable-mp3rtp --enable-nasm --enable-pic
475 | make -j $cpu
476 | make install
477 | make distclean
478 | popd > /dev/null
479 | }
480 |
481 | _Install_libfdkaac() {
482 | local name='FDKAAC';
483 | pushd ${SOURCE_DIR}/src > /dev/null
484 | echo -e "${CBLUE} Install ${name} ${CEND}";
485 | [[ -d "fdk-aac" ]] && rm -rf "fdkaac";
486 | git clone https://github.com/mstorsjo/fdk-aac
487 | cd fdk-aac
488 | autoreconf -fiv
489 | ./configure 'CFLAGS=-fPIC' --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin
490 | make
491 | make install
492 | make distclean
493 | popd > /dev/null
494 | }
495 |
496 | _Install_libopus() {
497 | local name='OPUS';
498 | pushd ${SOURCE_DIR}/src > /dev/null
499 | echo -e "${CBLUE} Install ${name} ${CEND}";
500 | if [[ -f "opus-${OPUS_VER}.tar.gz" && -d opus-${OPUS_VER} ]]; then
501 | rm -rf opus-${OPUS_VER}.tar.gz opus-${OPUS_VER}
502 | fi
503 | wget https://archive.mozilla.org/pub/opus/opus-${OPUS_VER}.tar.gz
504 | tar -xvzf opus-${OPUS_VER}.tar.gz
505 | cd opus-${OPUS_VER}/
506 | ./configure --enable-shared --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin
507 | make
508 | make install
509 | make distclean
510 | popd > /dev/null
511 | }
512 |
513 | _Install_libogg() {
514 | local name='';
515 | pushd ${SOURCE_DIR}/src > /dev/null
516 | echo -e "${CBLUE} Install ${name} ${CEND}";
517 | if [[ -f "libogg-${OGG_VER}.tar.gz" && -d libogg-${OGG_VER} ]]; then
518 | rm -rf libogg-${OGG_VER}.tar.gz libogg-${OGG_VER}
519 | fi
520 | wget https://ftp.osuosl.org/pub/xiph/releases/ogg/libogg-${OGG_VER}.tar.gz
521 | tar -xvzf libogg-${OGG_VER}.tar.gz
522 | cd libogg-${OGG_VER}/
523 | ./configure --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin
524 | make
525 | make install
526 | make distclean
527 | popd > /dev/null
528 | }
529 |
530 | _Install_liboggz() {
531 | local name='oggz';
532 | pushd ${SOURCE_DIR}/src > /dev/null
533 | echo -e "${CBLUE} Install ${name} ${CEND}";
534 | if [[ -f "liboggz-${LIBOGGZ_VER}.tar.gz" && -d liboggz-${LIBOGGZ_VER} ]]; then
535 | rm -rf liboggz-${LIBOGGZ_VER}.tar.gz liboggz-${LIBOGGZ_VER}
536 | fi
537 | wget http://downloads.xiph.org/releases/liboggz/liboggz-${LIBOGGZ_VER}.tar.gz
538 | tar -xvzf liboggz-${LIBOGGZ_VER}.tar.gz
539 | cd liboggz-${LIBOGGZ_VER}/
540 | ./configure --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin
541 | make
542 | make install
543 | make distclean
544 | popd > /dev/null
545 | }
546 |
547 | _Install_libvorbis() {
548 | local name='VORBIS';
549 | pushd ${SOURCE_DIR}/src > /dev/null
550 | echo -e "${CBLUE} Install ${name} ${CEND}";
551 | if [[ -f "libvorbis-${LIBVORBIS_VER}.tar.gz" && -d libvorbis-${LIBVORBIS_VER} ]]; then
552 | rm -rf libvorbis-${LIBVORBIS_VER} libvorbis-${LIBVORBIS_VER}.tar.gz
553 | fi
554 | wget http://downloads.xiph.org/releases/vorbis/libvorbis-${LIBVORBIS_VER}.tar.gz
555 | tar -xvzf libvorbis-${LIBVORBIS_VER}.tar.gz
556 | cd libvorbis-${LIBVORBIS_VER}/
557 | ./configure --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin
558 | make
559 | make install
560 | make distclean
561 | popd > /dev/null
562 | }
563 |
564 | _Install_libvorbistools() {
565 | local name='vorbis tools';
566 | pushd ${SOURCE_DIR}/src > /dev/null
567 | echo -e "${CBLUE} Install ${name} ${CEND}";
568 | if [[ -f "vorbis-tools-${VORBIS_VER}.tar.gz" && -d vorbis-tools-${VORBIS_VER} ]]; then
569 | rm -rf vorbis-tools-${VORBIS_VER} vorbis-tools-${VORBIS_VER}.tar.gz
570 | fi
571 | wget http://downloads.xiph.org/releases/vorbis/vorbis-tools-${VORBIS_VER}.tar.gz
572 | tar -xvzf vorbis-tools-${VORBIS_VER}.tar.gz
573 | cd vorbis-tools-${VORBIS_VER}/
574 | ./configure --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin
575 | make
576 | make install
577 | make distclean
578 | popd > /dev/null
579 | }
580 |
581 | _Install_libamrwbenc() {
582 | local name='amrwbenc';
583 | pushd ${SOURCE_DIR}/src > /dev/null
584 | echo -e "${CBLUE} Install ${name} ${CEND}";
585 | if [[ -f "vo-amrwbenc-${AMRWBENC_VER}.tar.gz" && -d vo-amrwbenc-${AMRWBENC_VER} ]]; then
586 | rm -rf vo-amrwbenc-${AMRWBENC_VER} vo-amrwbenc-${AMRWBENC_VER}.tar.gz
587 | fi
588 | wget -c https://sourceforge.net/projects/opencore-amr/files/vo-amrwbenc/vo-amrwbenc-${AMRWBENC_VER}.tar.gz/download -O vo-amrwbenc-${AMRWBENC_VER}.tar.gz
589 | tar xfz vo-amrwbenc-${AMRWBENC_VER}.tar.gz
590 | cd vo-amrwbenc-${AMRWBENC_VER}
591 | ./configure --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin
592 | make
593 | make install
594 | make distclean
595 | popd > /dev/null
596 | }
597 |
598 | _Install_libopencoreamr() {
599 | local name='amr';
600 | pushd ${SOURCE_DIR}/src > /dev/null
601 | echo -e "${CBLUE} Install ${name} ${CEND}";
602 |
603 | if [[ -f "opencore-amr-${OPENCOREAMR_VER}.tar.gz" && -d "opencore-amr-${OPENCOREAMR_VER}" ]]; then
604 | rm -rf opencore-amr-${OPENCOREAMR_VER}.tar.gz opencore-amr-${OPENCOREAMR_VER}
605 | fi
606 | wget -c https://sourceforge.net/projects/opencore-amr/files/opencore-amr/opencore-amr-${OPENCOREAMR_VER}.tar.gz/download -O opencore-amr-${OPENCOREAMR_VER}.tar.gz
607 | tar -zxvf opencore-amr-${OPENCOREAMR_VER}.tar.gz
608 | cd opencore-amr-${OPENCOREAMR_VER}/
609 | ./configure --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin
610 | make -j $cpu
611 | make install
612 | #make distclean
613 | popd > /dev/null
614 | }
615 |
616 | _Install_libtheora() {
617 | local name='libtheora';
618 | pushd ${SOURCE_DIR}/src > /dev/null
619 | echo -e "${CBLUE} Install ${name} ${CEND}";
620 | if [[ -f "libtheora-${LIBTHEORA_VER}.zip" && -d libtheora-${LIBTHEORA_VER} ]]; then
621 | rm -rf libtheora-${LIBTHEORA_VER}.zip libtheora-${LIBTHEORA_VER}
622 | fi
623 | wget -4 https://ftp.osuosl.org/pub/xiph/releases/theora/libtheora-${LIBTHEORA_VER}.zip
624 | unzip -o libtheora-${LIBTHEORA_VER}.zip
625 | cd libtheora-${LIBTHEORA_VER}/
626 | ./configure --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin
627 | make
628 | make install
629 | make distclean
630 | popd > /dev/null
631 | }
632 |
633 | _Install_libneroaacenc() {
634 | local name='neroaacenc';
635 | pushd ${SOURCE_DIR}/src > /dev/null
636 | echo -e "${CBLUE} Install ${name} ${CEND}";
637 | [[ -d "nero" ]] && rm -rf "nero";
638 | wget http://techdata.mirror.gtcomm.net/sysadmin/ffmpeg-avs/NeroDigitalAudio.zip
639 | unzip -o NeroDigitalAudio.zip -d nero
640 | cd nero/linux
641 | install -D -m755 neroAacEnc ${INSTALL_DIR}/bin/
642 | install -D -m755 neroAacDec ${INSTALL_DIR}/bin/
643 | popd > /dev/null
644 | }
645 |
646 | _Install_libfishsound() {
647 | local name='Lib Fishsound';
648 | pushd ${SOURCE_DIR}/src > /dev/null
649 | echo -e "${CBLUE} Install ${name} ${CEND}";
650 | if [[ -f "libfishsound-${LIBFISHSOUND_VER}.tar.gz" && -d libfishsound-${LIBFISHSOUND_VER} ]]; then
651 | rm -rf libfishsound-*
652 | fi
653 | wget -4 http://downloads.xiph.org/releases/libfishsound/libfishsound-${LIBFISHSOUND_VER}.tar.gz
654 | tar -xvzf libfishsound-${LIBFISHSOUND_VER}.tar.gz
655 | cd libfishsound-${LIBFISHSOUND_VER}/
656 | ./configure --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin
657 | make
658 | make install
659 | make distclean
660 | popd > /dev/null
661 | }
662 |
663 | _Install_libsoxr() {
664 | local name='SOXR';
665 | pushd ${SOURCE_DIR}/src > /dev/null
666 | echo -e "${CBLUE} Install ${name} ${CEND}";
667 | if [[ -f "soxr-${LIBSOXR_VER}-Source.tar.xz" && -d soxr-${LIBSOXR_VER}-Source ]]; then
668 | rm -rf soxr-*
669 | fi
670 | wget https://download.videolan.org/contrib/soxr/soxr-${LIBSOXR_VER}-Source.tar.xz
671 | tar -xJf soxr-${LIBSOXR_VER}-Source.tar.xz
672 | cd soxr-${LIBSOXR_VER}-Source
673 | cmake3 -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} -DENABLE_SHARED:bool=ON
674 | make
675 | make install
676 | popd > /dev/null
677 | }
678 |
679 | _Install_libkvazaar() {
680 | local name='kvazaar';
681 | pushd ${SOURCE_DIR}/src > /dev/null
682 | echo -e "${CBLUE} Install ${name} ${CEND}";
683 | [[ -d "kvazaar" ]] && rm -rf "kvazaar";
684 | git clone --depth 1 https://github.com/ultravideo/kvazaar.git
685 | cd kvazaar
686 | ./autogen.sh
687 | ./configure --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin
688 | make
689 | make install
690 | popd > /dev/null
691 | }
692 |
693 | _Install_libdav1d() {
694 | local name='libdav1d';
695 | pushd ${SOURCE_DIR}/src > /dev/null
696 | echo -e "${CBLUE} Install ${name} ${CEND}";
697 | [[ -d "dav1d" ]] && rm -rf "dav1d";
698 | git clone --depth 1 https://code.videolan.org/videolan/dav1d.git
699 | mkdir dav1d/build && cd dav1d/build
700 | meson ..
701 | ninja
702 | #DESTDIR=${INSTALL_DIR}
703 | ninja install
704 | popd > /dev/null
705 | }
706 |
707 | _Install_libwebp() {
708 | local name='Libwebp';
709 | pushd ${SOURCE_DIR}/src > /dev/null
710 | echo -e "${CBLUE} Install ${name} ${CEND}";
711 | if [[ -f "libwebp-${LIBWEBP_VER}.tar.gz" && -d "libwebp-${LIBWEBP_VER}" ]]; then
712 | rm -rf libwebp*
713 | fi
714 | wget -4 https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-${LIBWEBP_VER}.tar.gz
715 | tar xfz libwebp-${LIBWEBP_VER}.tar.gz
716 | cd libwebp-${LIBWEBP_VER}
717 | ./configure --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin \
718 | --disable-wic \
719 | --enable-libwebpmux \
720 | --enable-libwebpdemux \
721 | --enable-libwebpdecoder \
722 | --enable-libwebpextras \
723 | --enable-swap-16bit-csp
724 | make
725 | make install
726 | popd > /dev/null
727 | }
728 |
729 | _Install_libzimg() {
730 | local name='LibZIMG';
731 | pushd ${SOURCE_DIR}/src > /dev/null
732 | echo -e "${CBLUE} Install ${name} ${CEND}";
733 | [[ -d "zimg" ]] && rm -rf "zimg";
734 | git clone https://github.com/sekrit-twc/zimg
735 | cd zimg
736 | ./autogen.sh
737 | ./configure --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin
738 | make && make install
739 | popd > /dev/null
740 | }
741 |
742 | _Install_libdavs2() {
743 | local name='DAVS2';
744 | pushd ${SOURCE_DIR}/src > /dev/null
745 | echo -e "${CBLUE} Install ${name} ${CEND}";
746 | [[ -d "srt" ]] && rm -rf "srt";
747 | git clone https://github.com/pkuvcl/davs2
748 | cd build/linux
749 | ./configure
750 | make
751 | make install
752 | popd > /dev/null
753 | }
754 |
755 | # BUILD_SHARED_LIBS=1
756 | _Install_libuavs3d() {
757 | local name='UAVS3D';
758 | pushd ${SOURCE_DIR}/src > /dev/null
759 | echo -e "${CBLUE} Install ${name} ${CEND}";
760 | [[ -d "srt" ]] && rm -rf "srt";
761 | git clone https://github.com/uavs3/uavs3d
762 | mkdir build/linux
763 | cd build/linux && cmake ../..
764 | make && make install
765 |
766 | popd > /dev/null
767 | }
768 |
769 | _Install_libvpx() {
770 | local name='LIBVPX';
771 | pushd ${SOURCE_DIR}/src > /dev/null
772 | echo -e "${CBLUE} Install ${name} ${CEND}";
773 | [[ -d "libvpx" ]] && rm -rf "libvpx";
774 | git clone --depth 1 https://chromium.googlesource.com/webm/libvpx.git
775 | cd libvpx
776 | #./configure ./configure --prefix="$HOME/ffmpeg_build" --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=yasm
777 | # --prefix=$BUILD_DIR --enable-pic --enable-vp9-highbitdepth --as=yasm --disable-examples --disable-unit-tests --disable-install-docs
778 | #./configure --prefix=$BUILD_DIR --enable-pic --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=yasm
779 | ./configure --prefix=${INSTALL_DIR} --enable-pic --disable-examples --enable-runtime-cpu-detect --enable-vp9 --enable-vp8 \
780 | --enable-postproc --enable-vp9-postproc --enable-multi-res-encoding --enable-webm-io --enable-better-hw-compatibility --enable-vp9-highbitdepth --enable-onthefly-bitpacking --enable-realtime-only
781 | make
782 | make install
783 | popd > /dev/null
784 | }
785 |
786 | _Install_libxvid() {
787 | local name='XVID';
788 | pushd ${SOURCE_DIR}/src > /dev/null
789 | echo -e "${CBLUE} Install ${name} ${CEND}";
790 | if [[ -f "xvidcore-${XVIDCORE_VER}.tar.gz" && -d "xvidcore-${XVIDCORE_VER}" ]]; then
791 | rm -rf xvidcore-*
792 | fi
793 | wget https://downloads.xvid.com/downloads/xvidcore-${XVIDCORE_VER}.tar.gz
794 | tar -xvzf xvidcore-${XVIDCORE_VER}.tar.gz
795 | cd xvidcore/build/generic/
796 | ./configure --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin
797 | make
798 | make install
799 | make distclean
800 | popd > /dev/null
801 | }
802 |
803 | _Install_libaom() {
804 | local name='AOM';
805 | pushd ${SOURCE_DIR}/src > /dev/null
806 | echo -e "${CBLUE} Install ${name} ${CEND}";
807 | rm -rf aom*
808 | git -C aom pull 2> /dev/null || git clone --depth 1 https://aomedia.googlesource.com/aom
809 | mkdir -p aom_build
810 | cd aom_build
811 | PATH="/usr/local/bin:$PATH" cmake3 -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} -DENABLE_SHARED:bool=ON -DBUILD_SHARED_LIBS=ON -DENABLE_NASM=on ../aom && \
812 | PATH="/usr/local/bin:$PATH" make && \
813 | make install
814 | popd > /dev/null
815 | }
816 |
817 | _Install_libx264() {
818 | local name='X264';
819 | pushd ${SOURCE_DIR}/src > /dev/null
820 | echo -e "${CBLUE} Install ${name} ${CEND}";
821 | [[ -d "x264" ]] && rm -rf "x264";
822 | if [ "$(uname -m)" = "x86_64" ]; then
823 | ARCHOPTS="--enable-pic"
824 | else
825 | ARCHOPTS=""
826 | fi
827 | git clone https://code.videolan.org/videolan/x264.git
828 | cd x264
829 | ./configure --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin --enable-static $ARCHOPTS
830 | make
831 | make install
832 | make distclean
833 | popd > /dev/null
834 | }
835 |
836 | _Install_libx265() {
837 | local name='X265';
838 | pushd ${SOURCE_DIR}/src > /dev/null
839 | echo -e "${CBLUE} Install ${name} ${CEND}";
840 | [[ -d "x265" ]] && rm -rf "x265";
841 | hg clone http://hg.videolan.org/x265
842 | cd x265/build/linux
843 | cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} -DENABLE_SHARED:bool=ON ../../source
844 | make
845 | make install
846 | #make distclean
847 | popd > /dev/null
848 | }
849 |
850 | ## FFMPEG
851 | _Install_ffmpeg() {
852 | local name='FFMPEG';
853 | pushd ${SOURCE_DIR}/src > /dev/null
854 | echo -e "${CBLUE} Install ${name} ${CEND}";
855 | [[ -d "ffmpeg" ]] && rm -rf "ffmpeg";
856 | systemctl daemon-reload
857 | ldconfig
858 | #git clone https://git.ffmpeg.org/ffmpeg.git
859 | git clone https://github.com/FFmpeg/FFmpeg ffmpeg
860 | cd ffmpeg
861 | ./configure \
862 | --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin \
863 | --pkg-config-flags="--static" \
864 | --extra-libs=-lpthread \
865 | --extra-libs=-lm \
866 | --extra-cflags="-I/usr/local/include -I/usr/local/cuda/include -I/include -I/usr/local/ffmpegtoolkit/include -I/tmp/medka-sdk/build/__bin/release" \
867 | --extra-ldflags="-L/usr/local/lib -L/usr/local/cuda/lib64 -L/usr/local/ffmpegtoolkit/lib -L/usr/local/ffmpegtoolkit/lib64 -L/tmp/medka-sdk/build/__bin/release/" \
868 | --enable-cross-compile \
869 | --disable-debug \
870 | --enable-fontconfig \
871 | --enable-gray \
872 | --enable-gpl \
873 | --enable-version3 \
874 | --enable-nonfree \
875 | --enable-runtime-cpudetect \
876 | --enable-shared \
877 | --enable-pthreads \
878 | --enable-libopencore-amrnb \
879 | --enable-libopencore-amrwb \
880 | --enable-libsoxr \
881 | --enable-libmp3lame \
882 | --enable-libfdk-aac \
883 | --enable-libdav1d \
884 | --enable-libkvazaar \
885 | --enable-libmfx \
886 | --enable-vaapi \
887 | --enable-opencl \
888 | --enable-libfreetype \
889 | --enable-libfribidi \
890 | --enable-libzimg \
891 | --enable-libopus \
892 | --enable-libtheora \
893 | --enable-libvorbis \
894 | --enable-libvpx \
895 | --enable-libx264 \
896 | --enable-libx265 \
897 | --enable-libaom \
898 | --enable-libxvid \
899 | --enable-libwebp \
900 | --enable-postproc \
901 | --enable-swscale \
902 | --enable-avfilter \
903 | --enable-libass \
904 | --enable-libaribb24 \
905 | --enable-libxml2
906 | make
907 | make install
908 | #make distclean
909 | make tools/qt-faststart
910 | \cp -Rp tools/qt-faststart ${INSTALL_DIR}/bin/
911 | ldconfig
912 | popd > /dev/null
913 | }
914 |
915 |
916 |
--------------------------------------------------------------------------------
/QSV/include.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | ## Color Setting
4 | echo=echo
5 | for cmd in echo /bin/echo; do
6 | $cmd >/dev/null 2>&1 || continue
7 | if ! $cmd -e "" | grep -qE '^-e'; then
8 | echo=$cmd
9 | break
10 | fi
11 | done
12 | CSI=$($echo -e "\033[")
13 | CEND="${CSI}0m"
14 | CDGREEN="${CSI}32m"
15 | CRED="${CSI}1;31m"
16 | CGREEN="${CSI}1;32m"
17 | CYELLOW="${CSI}1;33m"
18 | CBLUE="${CSI}1;34m"
19 | CMAGENTA="${CSI}1;35m"
20 | CCYAN="${CSI}1;36m"
21 | CSUCCESS="$CDGREEN"
22 | CFAILURE="$CRED"
23 | CQUESTION="$CMAGENTA"
24 | CWARNING="$CYELLOW"
25 | CMSG="$CCYAN"
26 |
27 | #Test The Color
28 | #echo -e "${CDGREEN} A ${CEND}"
29 | #echo -e "${CGREEN} A ${CEND}"
30 | #echo -e "${CRED} A ${CEND}"
31 | #echo -e "${CYELLOW} A ${CEND}"
32 | #echo -e "${CBLUE} A ${CEND}"
33 | #echo -e "${CSUCCESS} A ${CEND}"
34 | #echo -e "${CFAILURE} A ${CEND}"
35 | #echo -e "${CWARNING} A ${CEND}"
36 | #echo -e "${CMSG} A ${CEND}"
37 | #echo -e "${CQUESTION} A ${CEND}"
38 |
39 |
40 | ## OS Detect
41 | if [ -e "/usr/bin/yum" ]; then
42 | PM=yum
43 | if [ -e /etc/yum.repos.d/CentOS-Base.repo ] && grep -Eqi "release 6." /etc/redhat-release; then
44 | sed -i "s@centos/\$releasever@centos-vault/6.10@g" /etc/yum.repos.d/CentOS-Base.repo
45 | sed -i 's@centos/RPM-GPG@centos-vault/RPM-GPG@g' /etc/yum.repos.d/CentOS-Base.repo
46 | [ -e /etc/yum.repos.d/epel.repo ] && rm -f /etc/yum.repos.d/epel.repo
47 | fi
48 | command -v lsb_release >/dev/null 2>&1 || { [ -e "/etc/euleros-release" ] && yum -y install euleros-lsb || yum -y install redhat-lsb-core; clear; }
49 | fi
50 | command -v lsb_release >/dev/null 2>&1 || { echo "${CFAILURE}${PM} source failed! ${CEND}"; kill -9 $$; }
51 |
52 | # Detect System Bit
53 | if [ "$(getconf WORD_BIT)" == "32" ] && [ "$(getconf LONG_BIT)" == "64" ]; then
54 | OS_BIT=64
55 | else
56 | OS_BIT=32
57 | fi
58 | THREAD=$(grep 'processor' /proc/cpuinfo | sort -u | wc -l)
59 |
60 | get_char() {
61 | SAVEDSTTY=`stty -g`
62 | stty -echo
63 | stty cbreak
64 | dd if=/dev/tty bs=1 count=1 2> /dev/null
65 | stty -raw
66 | stty echo
67 | stty $SAVEDSTTY
68 | }
69 |
70 | version() {
71 | echo "version: 2.0"
72 | echo "update date: 2021-05-21"
73 | }
74 |
75 | show_help() {
76 | version
77 | echo "
78 | Usage: $0 command ...[parameters]....
79 | --help, -h Show this help message
80 | --version, -v Show version info
81 | --node_type [1-2] Select Node type
82 | --nginx_option [1-3] Install Nginx server version
83 | --pureftpd Install Pure-Ftpd
84 | --redis Install Redis
85 | --ssh_port [No.] SSH port
86 | --firewalld Enable Firewalld
87 | --reboot Restart the server after installation
88 | "
89 | }
90 |
--------------------------------------------------------------------------------
/QSV/install.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | #################################################################################
3 | # FFMPEG Toolkit Installation Scripts
4 | # Many credits to GPL for the package repo
5 | #
6 | # Author : Matt Xu (2018-2021)
7 | # Package installers copyright IDCLayer.COM (2018-2021) where applicable.
8 | # All other work copyright InfoCube (2018)
9 | # Licensed under GNU General Public License v3.0 GPL-3 (in short)
10 | #
11 | # You may copy, distribute and modify the software as long as you track
12 | # changes/dates in source files. Any modifications to our software
13 | # including (via compiler) GPL-licensed code must also be made available
14 | # under the GPL along with build & install instructions.
15 | #
16 | #################################################################################
17 |
18 | SOURCE_URL='http://download.mirror.url' # Not use at this times
19 | SOURCE_DIR='/opt/ffmpegtoolkit'
20 | INSTALL_DIR='/usr/local/ffmpegtoolkit'
21 | cpu=$(cat "/proc/cpuinfo" | grep "processor" | wc -l)
22 | TMPDIR=~/tmp
23 | export SOURCE_URL
24 | export SOURCE_DIR
25 | export INSTALL_DIR
26 | export CUDA_HOME=/usr/local/cuda
27 | export LD_LIBRARY_PATH=/usr/local/ffmpegtoolkit/lib:/usr/local/lib:/usr/lib:$LD_LIBRARY_PATH
28 | export LIBRARY_PATH=/usr/local/ffmpegtoolkit/lib:/usr/lib:/usr/local/lib:$LIBRARY_PATH
29 | export CPATH=/include:/usr/local/ffmpegtoolkit/include:/usr/include/:/usr/local/include:$CPATH
30 | export PKG_CONFIG_LIBDIR=/usr/share/pkgconfig/:/usr/lib64/pkgconfig/:/usr/local/lib/pkgconfig/:/usr/lib/pkgconfig/:/usr/local/lib64/pkgconfig/:/lib/pkgconfig/
31 | export PKG_CONFIG_PATH=/usr/share/pkgconfig/:/usr/lib64/pkgconfig/:/usr/local/lib/pkgconfig/:/usr/lib/pkgconfig/:/usr/local/lib64/pkgconfig/:/lib/pkgconfig/:/usr/local/ffmpegtoolkit/lib64/pkgconfig/:/usr/local/ffmpegtoolkit/lib/pkgconfig
32 |
33 | time=$(date +"%s")
34 | # start Time
35 | startTime=$(date +%s)
36 |
37 | if [[ $EUID -ne 0 ]]; then
38 | echo "ffmpeg package setup requires user to be root. su or sudo -s and run again ..."
39 | exit 1
40 | fi
41 |
42 | mkdir -p /opt/ffmpegtoolkit/src
43 | mkdir -p /usr/local/ffmpegtoolkit/{bin,lib,share,include,src}
44 |
45 | ## Check OS Versions
46 | _OSVER=`rpm --eval '%{centos_ver}'`
47 | printf "\e[32m [Success]:\e[0m Your OS Versions is : ${_OSVER} \n"
48 | if [ "$_OSVER" -eq 8 ]; then
49 | T="sudo /usr/bin/dnf"
50 | else
51 | T="sudo /usr/bin/yum"
52 | fi
53 |
54 | ## Scripts Current Path
55 | install_dir=$(dirname "$(readlink -f $0)")
56 | pushd ${install_dir} >/dev/null
57 | . ./versions.txt
58 | . ./include.sh
59 | . ./function.sh
60 |
61 | ### 判断是不是首次运行
62 | if [ ! -e ~/.ffmpegtookit ]; then
63 | echo -e "First Time Run , Pre Define Process...."
64 | if [ -e "/etc/yum.conf" ]; then
65 | # Prerequisites
66 | echo "${CMSG}Installing Dependencies Packages...${CEND}"
67 | ${T} config-manager --set-enabled powertools
68 | dnf config-manager --set-enabled powertools
69 | yum install -y yum-utils
70 | yum install -y epel-release
71 | REQPKGS=(epel-release)
72 | REQPKGS+=(gcc gcc-c++ git subversion libgcc glib2 bzip2 xz unzip make python3 cmake cmake3 automake autoconf patch ruby ncurses ncurses-devel mercurial hg neon expat expat-devel alsa-lib)
73 | REQPKGS+=(zlib zlib-devel libjpeg libjpeg-devel libpng libpng-devel gd gd-devel gettext freetype freetype-devel ImageMagick ImageMagick-devel)
74 | REQPKGS+=(libstdc++ libstdc++-devel numactl numactl-devel libmediainfo mediainfo giflib libtiff libtiff-devel libtool libxml2 libxml2-devel re2c giflib-devel)
75 | REQPKGS+=(doxygen SDL-devel SDL2 SDL2-devel freeglut-devel openssl-devel fribidi-devel fribidi libffi libffi-devel gmp-devel libxslt-devel libxslt xmlto jansson-devel mesa-filesystem)
76 | REQPKGS+=(redhat-lsb-core libdrm-devel libX11-devel libXi-devel opencl-headers ocl-icd ocl-icd-devel libpciaccess-devel intel-gpu-tools ocl-icd-*) #Intel QSV
77 | for pkg in "${REQPKGS[@]}"; do
78 | if ${T} -q list installed "${pkg}" > /dev/null 2>&1; then
79 | printf "${CRED}Skip:\e[0m [${pkg}] is already installed \n${CEND}"
80 | else
81 | ${T} install "${pkg}" -q -y && printf "${CGREEN}Success:\e[0m [${pkg}] successfully installed \n"
82 | fi
83 | done
84 | # Dependencies
85 | printf "\e[36m Info:\e[0m Disable Selinux ...... \n"
86 | /usr/sbin/getenforce
87 | sed -i s/SELINUX=enforcing/SELINUX=disabled/g /etc/selinux/config
88 | sed -i s/SELINUX=permissive/SELINUX=disabled/g /etc/selinux/config
89 | setenforce 0
90 | #active Python
91 | #sudo /usr/sbin/alternatives --set python /usr/bin/python3
92 | pip3 install meson ninja
93 | # Start Sync Time
94 | systemctl enable chronyd
95 | fi
96 | touch ~/.ffmpegtookit
97 | fi
98 | # Create
99 | cat >/etc/ld.so.conf.d/ffmpegtoolkit.conf </dev/null`
113 | [ $? != 0 ] && echo "${CWARNING}ERROR: unknown argument! ${CEND}" && show_help && exit 1
114 | eval set -- "${TEMP}"
115 | while :; do
116 | [ -z "$1" ] && break;
117 | case "$1" in
118 | -h|--help)
119 | show_help; exit 0
120 | ;;
121 | -v|-V|--version)
122 | version; exit 0
123 | ;;
124 | --mode)
125 | mode=$2; shift 2
126 | [[ ! ${mode} =~ ^[1-3]$ ]] && { echo "${CWARNING}mode input error! Please only input number 1~3${CEND}"; exit 1; }
127 | ;;
128 | --memcached)
129 | memcached_flag=y; shift 1
130 | [ -e "${memcached_install_dir}/bin/memcached" ] && { echo "${CWARNING}memcached-server already installed! ${CEND}"; unset memcached_flag; }
131 | ;;
132 | --ssh_port)
133 | ssh_port=$2; shift 2
134 | ;;
135 | --)
136 | shift
137 | ;;
138 | *)
139 | echo "${CWARNING}ERROR: unknown argument! ${CEND}" && Show_Help && exit 1
140 | ;;
141 | esac
142 | done
143 |
144 | if [ ${ARG_NUM} == 0 ]; then
145 | #Select Mode
146 | while :; do echo
147 | echo 'Please Select FFMPEG Install Mode: '
148 | echo -e "\t${CMSG}1${CEND}. [SW] CPU Mode (Default)"
149 | echo -e "\t${CMSG}2${CEND}. [HW] Intel GPU Mode"
150 | echo -e "\t${CMSG}3${CEND}. [HW] Nvidia GPU Mode"
151 | read -e -p "Please input a number:(Default 1 press Enter) " mode
152 | mode=${mode:-1}
153 | if [[ ! ${mode} =~ ^[1-3]$ ]]; then
154 | echo "${CWARNING}input error! Please only input number 1~3${CEND}"
155 | else
156 | break
157 | fi
158 | done
159 | fi
160 | # ARG_NUM END
161 |
162 | # Install Process
163 | #if [ "${memcached_flag}" == 'y' ]; then
164 | # echo -e "";
165 | #fi
166 |
167 | #_Install_ | tee -a ${install_dir}/installer.log
168 |
169 | _Install_nasm | tee -a ${install_dir}/installer.log
170 | _Install_yasm | tee -a ${install_dir}/installer.log
171 | # Nvidia
172 | #_Install_nv_header | tee -a ${install_dir}/installer.log
173 | #_Install_nv_cuda | tee -a ${install_dir}/installer.log
174 | # Intel
175 | _Install_libmfx | tee -a ${install_dir}/installer.log
176 | _Install_wanyland | tee -a ${install_dir}/installer.log
177 | _Install_libva | tee -a ${install_dir}/installer.log
178 | _Install_libva-utils | tee -a ${install_dir}/installer.log
179 | _Install_intel-vaapi-driver | tee -a ${install_dir}/installer.log
180 | _Install_intel-gmmlib | tee -a ${install_dir}/installer.log
181 | _Install_intel-media-driver | tee -a ${install_dir}/installer.log
182 | _Install_intel-media-sdk | tee -a ${install_dir}/installer.log
183 | ## Lib
184 | _Install_libsrt | tee -a ${install_dir}/installer.log
185 | _Install_libass | tee -a ${install_dir}/installer.log
186 | _Install_libaribb24 | tee -a ${install_dir}/installer.log
187 | _Install_liba52dec | tee -a ${install_dir}/installer.log
188 | _Install_libaacenc | tee -a ${install_dir}/installer.log
189 | _Install_libamrnb | tee -a ${install_dir}/installer.log
190 | _Install_libamrwb | tee -a ${install_dir}/installer.log
191 | _Install_libamrwbenc | tee -a ${install_dir}/installer.log
192 | _Install_libopencoreamr | tee -a ${install_dir}/installer.log
193 | _Install_libao | tee -a ${install_dir}/installer.log
194 | _Install_libdav1d | tee -a ${install_dir}/installer.log
195 | _Install_libfaad2 | tee -a ${install_dir}/installer.log
196 | _Install_libfdkaac | tee -a ${install_dir}/installer.log
197 | _Install_libflac | tee -a ${install_dir}/installer.log
198 | _Install_libfishsound | tee -a ${install_dir}/installer.log
199 | _Install_libkvazaar | tee -a ${install_dir}/installer.log
200 | _Install_liblame | tee -a ${install_dir}/installer.log
201 | _Install_libneroaacenc | tee -a ${install_dir}/installer.log
202 | _Install_libogg | tee -a ${install_dir}/installer.log
203 | _Install_liboggz | tee -a ${install_dir}/installer.log
204 | _Install_libopus | tee -a ${install_dir}/installer.log
205 | _Install_libsoxr | tee -a ${install_dir}/installer.log
206 | _Install_libspeex | tee -a ${install_dir}/installer.log
207 | _Install_libcelt | tee -a ${install_dir}/installer.log
208 | _Install_libgsm | tee -a ${install_dir}/installer.log
209 | _Install_libtheora | tee -a ${install_dir}/installer.log
210 | _Install_libvid | tee -a ${install_dir}/installer.log
211 | _Install_libvorbis | tee -a ${install_dir}/installer.log
212 | _Install_libvorbistools | tee -a ${install_dir}/installer.log
213 | _Install_libzimg | tee -a ${install_dir}/installer.log
214 | _Install_libwebp | tee -a ${install_dir}/installer.log
215 | _Install_libwmf | tee -a ${install_dir}/installer.log
216 | _Install_libuavs3d | tee -a ${install_dir}/installer.log
217 | _Install_libxvid | tee -a ${install_dir}/installer.log
218 | _Install_libvpx | tee -a ${install_dir}/installer.log
219 | _Install_libaom | tee -a ${install_dir}/installer.log
220 | _Install_libx264 | tee -a ${install_dir}/installer.log
221 | _Install_libx265 | tee -a ${install_dir}/installer.log
222 | _Install_ffmpeg | tee -a ${install_dir}/installer.log
223 |
224 | echo -e "Created Soft Links"
225 | ln -sf /usr/local/ffmpegtoolkit/bin/ffmpeg /bin/ffmpeg
226 | ln -sf /usr/local/ffmpegtoolkit/bin/ffprobe /bin/ffprobe
227 | ln -sf /usr/local/ffmpegtoolkit/bin/qt-faststart /bin/qt-faststart
228 | ln -sf /usr/local/ffmpegtoolkit/bin/neroAacEnc /bin/neroAacEnc
229 | ln -sf /usr/local/ffmpegtoolkit/bin/x264 /usr/local/bin/x264
230 | ln -sf /usr/local/ffmpegtoolkit/bin/x265 /usr/local/bin/x265
231 | #ldconfig -vvvv
232 | which {ffmpeg,ffprobe,qt-faststart,mediainfo,neroAacEnc,identify,convert,composite}
233 | endTime=$(date +%s)
234 | ((installTime = ($endTime - $startTime) / 60))
235 | echo "####################Congratulations########################"
236 | echo "Deployed total time: ${CQUESTION}${installTime}${CEND} minutes"
237 | echo -e "Install Done"!
238 |
--------------------------------------------------------------------------------
/QSV/versions.txt:
--------------------------------------------------------------------------------
1 | # Versions Define
2 | NASM_VER=2.14.02
3 | YASM_VER=1.3.0
4 | LIBASS_VER=0.14.0
5 | LIBA52DEC_VER=0.7.4
6 | AMRWB_VER=11.0.0.0
7 | AMRNB_VER=11.0.0.0
8 | LIBAO_VER=1.2.0
9 | LIBWMF_VER=0.2.8.4
10 | SPEEX_VER=1.2.0
11 | FLAC_VER=1.3.2
12 | LAME_VER=3.100
13 | OPUS_VER=1.3
14 | OGG_VER=1.3.5
15 | LIBOGGZ_VER=1.1.1
16 | VORBIS_VER=1.4.0
17 | LIBVORBIS_VER=1.3.6
18 | AMRWBENC_VER=0.1.3
19 | OPENCOREAMR_VER=0.1.5
20 | LIBTHEORA_VER="1.2.0alpha1"
21 | LIBFISHSOUND_VER=1.0.0
22 | LIBSOXR_VER=0.1.3
23 | LIBWEBP_VER=1.1.0
24 | XVIDCORE_VER=1.3.5
25 |
--------------------------------------------------------------------------------
/README.MD:
--------------------------------------------------------------------------------
1 |
2 | # Please use portable versions
3 |
4 | ```shell
5 |
6 | # CentOS / Almalinux / RockyLinux / Redhat
7 | cd /opt
8 | dnf install -y epel-release
9 | dnf config-manager --set-enabled powertools
10 | dnf config-manager --set-enabled crb
11 | dnf install -y wget tar xz tinyxml2 mediainfo libmediainfo bc unzip screen sshfs
12 | dnf install -y ImageMagick ImageMagick-devel libwebp
13 | dnf install -y screen unzip fuse fuse-common sshfs
14 |
15 | # Debian
16 | cd /opt
17 | sudo apt-get update
18 | sudo apt install -y wget curl tar xz tinyxml2 mediainfo bc unzip screen fuse fuse-common sshfs
19 | sudo apt install -y imagemagick
20 |
21 | # FFMPEG
22 | cd /opt
23 | [[ -d /usr/local/ffmpeg ]] && rm -rf /usr/local/ffmpeg
24 | [[ -f ffmpeg-git-amd64-static.tar.xz ]] && rm -rf ffmpeg-git-amd64-static.tar.xz
25 | wget https://johnvansickle.com/ffmpeg/builds/ffmpeg-git-amd64-static.tar.xz
26 | tar xvf ffmpeg-git-amd64-static.tar.xz
27 | mv ffmpeg-git-2024*-amd64-static /usr/local/ffmpeg
28 | ln -sf /usr/local/ffmpeg/ffprobe /usr/bin/ffprobe
29 | ln -sf /usr/local/ffmpeg/ffmpeg /usr/bin/ffmpeg
30 | ln -sf /usr/local/ffmpeg/qt-faststart /usr/bin/qt-faststart
31 | ln -sf /usr/local/ffmpeg/ffprobe /usr/local/bin/ffprobe
32 | ln -sf /usr/local/ffmpeg/ffmpeg /usr/local/bin/ffmpeg
33 | ln -sf /usr/local/ffmpeg/qt-faststart /usr/local/bin/qt-faststart
34 | ln -sf /usr/bin/convert /usr/local/bin/convert
35 |
36 |
37 | ```
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 | # FFMPEG Toolkit
46 | The script is written in Bash language
47 | it's can automatically install ffmpeg and related on you system
48 | Current version **V2**
49 |
50 | Notice: Current Only Work CentOS 8 64bit, other system include centos 7 not testing
51 |
52 | ### Requirements
53 |
54 | | Name | Version |
55 | |--|--|
56 | | CentOS | 8 or higher |
57 |
58 |
59 | ### Features
60 |
61 | * install ffmpeg ffprobe qt-faststart
62 | * install mp4box flvtool2 yamdi
63 | * install mediainfo neroaccenc
64 | * install imagemagick
65 |
66 | ### Changelog
67 |
68 | * remove mplayer mencoder (v2)
69 | * add libass support (16/03/2018)
70 | * add NVIDIA CUDA (New versions wait add it)
71 | * add aom
72 | * add x265
73 | * add x264
74 | * add libvpx
75 | * update something soft and library to latest version
76 |
77 | ### Usage
78 | ```
79 | yum install -y git wget
80 | cd /opt
81 | git clone https://github.com/hostsoft/ffmpegtoolkit.git ffmpegtoolkit
82 | cd ffmpegtoolkit
83 | bash install.sh
84 | ```
85 |
86 | ### Verify
87 | * verify and check path, included *ImageMagick*
88 | ```
89 | which {ffmpeg,ffprobe,qt-faststart,mplayer,mencoder,flvtool2,MP4Box,yamdi,mediainfo,neroAacEnc}
90 | ```
91 |
92 | * Return
93 | ```
94 | [root@dev ~]# which {ffmpeg,ffprobe,qt-faststart,neroAacEnc,x264,x265}
95 | /usr/local/bin/ffmpeg
96 | /usr/local/bin/ffprobe
97 | /usr/local/bin/qt-faststart
98 | /usr/local/bin/neroAacEnc
99 | /usr/local/bin/x264
100 | /usr/local/bin/x265
101 |
102 | [root@dev ~]# which {identify,convert,composite}
103 | /usr/bin/identify
104 | /usr/bin/convert
105 | /usr/bin/composite
106 |
107 | [root@dev ~]# ffmpeg
108 | ffmpeg version N-102560-g4718d74c58 Copyright (c) 2000-2021 the FFmpeg developers
109 | built with gcc 8 (GCC)
110 | configuration: --prefix=/usr/local/ffmpegtoolkit --bindir=/usr/local/ffmpegtoolkit/bin --pkg-config-flags=--static --extra-libs=-lpthread --extra-libs=-lm --extra-cflags='-I/usr/local/include -I/usr/local/cuda/include -I/include' --extra-ldflags='-L/usr/local/lib -L/usr/local/cuda/lib64' --enable-cross-compile --disable-debug --enable-fontconfig --enable-gray --enable-gpl --enable-version3 --enable-cuvid --enable-libnpp --enable-nvenc --enable-nvdec --enable-nonfree --enable-runtime-cpudetect --enable-shared --enable-pthreads --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libsoxr --enable-libmp3lame --enable-libfdk-aac --enable-libdav1d --enable-libkvazaar --enable-vaapi --enable-libfreetype --enable-libfribidi --enable-libzimg --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libaom --enable-libxvid --enable-libwebp --enable-postproc --enable-swscale --enable-avfilter --enable-libass --enable-libaribb24 --enable-libxml2
111 | libavutil 57. 0.100 / 57. 0.100
112 | libavcodec 59. 1.100 / 59. 1.100
113 | libavformat 59. 2.100 / 59. 2.100
114 | libavdevice 59. 0.100 / 59. 0.100
115 | libavfilter 8. 0.101 / 8. 0.101
116 | libswscale 6. 0.100 / 6. 0.100
117 | libswresample 4. 0.100 / 4. 0.100
118 | libpostproc 56. 0.100 / 56. 0.100
119 | Hyper fast Audio and Video encoder
120 | usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
121 |
122 | Use -h to get full help or, even better, run 'man ffmpeg'
123 |
124 |
125 | [root@dev ~]# ls /usr/local/ffmpegtoolkit/bin -l
126 | total 14340
127 | -rwxr-xr-x. 1 root root 38440 May 18 09:32 a52dec
128 | -rwxr-xr-x. 1 root root 23048 May 18 09:33 amrnb-decoder
129 | -rwxr-xr-x. 1 root root 22200 May 18 09:33 amrnb-decoder-etsi
130 | -rwxr-xr-x. 1 root root 22648 May 18 09:33 amrnb-decoder-if2
131 | -rwxr-xr-x. 1 root root 25896 May 18 09:33 amrnb-encoder
132 | -rwxr-xr-x. 1 root root 25560 May 18 09:33 amrnb-encoder-etsi
133 | -rwxr-xr-x. 1 root root 25560 May 18 09:33 amrnb-encoder-etsi-vad2
134 | -rwxr-xr-x. 1 root root 25816 May 18 09:33 amrnb-encoder-if2
135 | -rwxr-xr-x. 1 root root 25816 May 18 09:33 amrnb-encoder-if2-vad2
136 | -rwxr-xr-x. 1 root root 25896 May 18 09:33 amrnb-encoder-vad2
137 | -rwxr-xr-x. 1 root root 23312 May 18 09:33 amrwb-decoder
138 | -rwxr-xr-x. 1 root root 22920 May 18 09:33 amrwb-decoder-if2
139 | -rwxr-xr-x. 1 root root 25488 May 18 09:33 amrwb-encoder
140 | -rwxr-xr-x. 1 root root 25440 May 18 09:33 amrwb-encoder-if2
141 | -rwxr-xr-x. 1 root root 600696 May 18 09:57 aomdec
142 | -rwxr-xr-x. 1 root root 628328 May 18 09:58 aomenc
143 | -rwxr-xr-x. 1 root root 238840 May 18 09:47 cwebp
144 | -rwxr-xr-x. 1 root root 131280 May 18 09:47 dwebp
145 | -rwxr-xr-x. 1 root root 17912 May 18 09:32 extract_a52
146 | -rwxr-xr-x. 1 root root 269680 May 18 09:36 faad
147 | -rwxr-xr-x. 1 root root 259696 May 18 10:16 ffmpeg
148 | -rwxr-xr-x. 1 root root 144056 May 18 10:16 ffprobe
149 | -rwxr-xr-x. 1 root root 1023248 May 18 09:40 flac
150 | -rwxr-xr-x. 1 root root 106320 May 18 09:47 gif2webp
151 | -rwxr-xr-x. 1 root root 181792 May 18 09:47 img2webp
152 | -rwxr-xr-x. 1 root root 130920 May 18 09:41 kvazaar
153 | -rwxr-xr-x. 1 root root 514176 May 18 09:41 lame
154 | -rwxr-xr-x. 1 root root 2411 May 18 09:47 libwmf-config
155 | -rwxr-xr-x. 1 root root 13143 May 18 09:47 libwmf-fontmap
156 | -rwxr-xr-x. 1 root root 677544 May 18 09:40 metaflac
157 | -rwxr-xr-x. 1 root root 514624 May 18 09:41 mp3rtp
158 | -rwxr-xr-x. 1 root root 369584 May 18 09:44 ogg123
159 | -rwxr-xr-x. 1 root root 48768 May 18 09:44 oggdec
160 | -rwxr-xr-x. 1 root root 279392 May 18 09:44 oggenc
161 | -rwxr-xr-x. 1 root root 117888 May 18 09:44 ogginfo
162 | -rwxr-xr-x. 1 root root 22440 May 18 09:41 oggz
163 | -rwxr-xr-x. 1 root root 142288 May 18 09:41 oggz-chop
164 | -rwxr-xr-x. 1 root root 68504 May 18 09:41 oggz-codecs
165 | -rwxr-xr-x. 1 root root 84776 May 18 09:41 oggz-comment
166 | -rwxr-xr-x. 1 root root 5671 May 18 09:41 oggz-diff
167 | -rwxr-xr-x. 1 root root 89280 May 18 09:41 oggz-dump
168 | -rwxr-xr-x. 1 root root 100056 May 18 09:41 oggz-info
169 | -rwxr-xr-x. 1 root root 18848 May 18 09:41 oggz-known-codecs
170 | -rwxr-xr-x. 1 root root 75616 May 18 09:41 oggz-merge
171 | -rwxr-xr-x. 1 root root 76168 May 18 09:41 oggz-rip
172 | -rwxr-xr-x. 1 root root 70544 May 18 09:41 oggz-scan
173 | -rwxr-xr-x. 1 root root 75968 May 18 09:41 oggz-sort
174 | -rwxr-xr-x. 1 root root 83128 May 18 09:41 oggz-validate
175 | -rwxr-xr-x. 1 root root 69616 May 18 09:43 speexdec
176 | -rwxr-xr-x. 1 root root 86512 May 18 09:43 speexenc
177 | -rwxr-xr-x. 1 root root 797 May 18 09:30 srt-ffplay
178 | -rwxr-xr-x. 1 root root 1125448 May 18 09:31 srt-file-transmit
179 | -rwxr-xr-x. 1 root root 1122072 May 18 09:31 srt-live-transmit
180 | -rwxr-xr-x. 1 root root 1151416 May 18 09:31 srt-tunnel
181 | -rwxr-xr-x. 1 root root 54904 May 18 09:44 vcut
182 | -rwxr-xr-x. 1 root root 118400 May 18 09:44 vorbiscomment
183 | -rwxr-xr-x. 1 root root 77464 May 18 09:47 vwebp
184 | -rwxr-xr-x. 1 root root 139680 May 18 09:47 webpinfo
185 | -rwxr-xr-x. 1 root root 106200 May 18 09:47 webpmux
186 | -rwxr-xr-x. 1 root root 47824 May 18 09:47 wmf2eps
187 | -rwxr-xr-x. 1 root root 44896 May 18 09:47 wmf2fig
188 | -rwxr-xr-x. 1 root root 44264 May 18 09:47 wmf2gd
189 | -rwxr-xr-x. 1 root root 44696 May 18 09:47 wmf2svg
190 | -rwxr-xr-x. 1 root root 47000 May 18 09:47 wmf2x
191 | -rwxr-xr-x. 1 root root 2565704 May 18 10:01 x264
192 | -rwxr-xr-x. 1 root root 164592 May 18 10:05 x265
193 |
194 |
195 | ```
196 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 | # FFMPEG Toolkit
3 | The script is written in Bash language
4 | it's can automatically install ffmpeg and related on you system
5 | Current version **V2**
6 |
7 | Notice: Current Only Work CentOS 8 64bit, other system include centos 7 not testing
8 |
9 | ### Requirements
10 |
11 | | Name | Version |
12 | |--|--|
13 | | CentOS | 8 or higher |
14 |
15 |
16 | ### Features
17 |
18 | * install ffmpeg ffprobe qt-faststart
19 | * install mp4box flvtool2 yamdi
20 | * install mediainfo neroaccenc
21 | * install imagemagick
22 |
23 | ### Changelog
24 |
25 | * remove mplayer mencoder (v2)
26 | * add libass support (16/03/2018)
27 | * add NVIDIA CUDA (New versions wait add it)
28 | * add aom
29 | * add x265
30 | * add x264
31 | * add libvpx
32 | * update something soft and library to latest version
33 |
34 | ### Usage
35 | ```
36 | yum install -y git wget
37 | cd /opt
38 | git clone https://github.com/hostsoft/ffmpegtoolkit.git ffmpegtoolkit
39 | cd ffmpegtoolkit
40 | git checkout -b main origin/main
41 | bash install.sh
42 |
43 | mkdir -p /opt/ffmpegtoolkit
44 | cd /opt/ffmpegtoolkit
45 | bash install.sh
46 |
47 |
48 | ```
49 |
50 | ### Verify
51 | * verify and check path, included *ImageMagick*
52 | ```
53 | which {ffmpeg,ffprobe,qt-faststart,mplayer,mencoder,flvtool2,MP4Box,yamdi,mediainfo,neroAacEnc}
54 | ```
55 |
56 | * Return
57 | ```
58 | [root@dev ~]# which {ffmpeg,ffprobe,qt-faststart,neroAacEnc,x264,x265}
59 | /usr/local/bin/ffmpeg
60 | /usr/local/bin/ffprobe
61 | /usr/local/bin/qt-faststart
62 | /usr/local/bin/neroAacEnc
63 | /usr/local/bin/x264
64 | /usr/local/bin/x265
65 |
66 | [root@dev ~]# which {identify,convert,composite}
67 | /usr/bin/identify
68 | /usr/bin/convert
69 | /usr/bin/composite
70 |
71 | [root@dev ~]# ffmpeg
72 | ffmpeg version N-102560-g4718d74c58 Copyright (c) 2000-2021 the FFmpeg developers
73 | built with gcc 8 (GCC)
74 | configuration: --prefix=/usr/local/ffmpegtoolkit --bindir=/usr/local/ffmpegtoolkit/bin --pkg-config-flags=--static --extra-libs=-lpthread --extra-libs=-lm --extra-cflags='-I/usr/local/include -I/usr/local/cuda/include -I/include' --extra-ldflags='-L/usr/local/lib -L/usr/local/cuda/lib64' --enable-cross-compile --disable-debug --enable-fontconfig --enable-gray --enable-gpl --enable-version3 --enable-cuvid --enable-libnpp --enable-nvenc --enable-nvdec --enable-nonfree --enable-runtime-cpudetect --enable-shared --enable-pthreads --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libsoxr --enable-libmp3lame --enable-libfdk-aac --enable-libdav1d --enable-libkvazaar --enable-vaapi --enable-libfreetype --enable-libfribidi --enable-libzimg --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libaom --enable-libxvid --enable-libwebp --enable-postproc --enable-swscale --enable-avfilter --enable-libass --enable-libaribb24 --enable-libxml2
75 | libavutil 57. 0.100 / 57. 0.100
76 | libavcodec 59. 1.100 / 59. 1.100
77 | libavformat 59. 2.100 / 59. 2.100
78 | libavdevice 59. 0.100 / 59. 0.100
79 | libavfilter 8. 0.101 / 8. 0.101
80 | libswscale 6. 0.100 / 6. 0.100
81 | libswresample 4. 0.100 / 4. 0.100
82 | libpostproc 56. 0.100 / 56. 0.100
83 | Hyper fast Audio and Video encoder
84 | usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
85 |
86 | Use -h to get full help or, even better, run 'man ffmpeg'
87 |
88 |
89 | [root@dev ~]# ls /usr/local/ffmpegtoolkit/bin -l
90 | total 14340
91 | -rwxr-xr-x. 1 root root 38440 May 18 09:32 a52dec
92 | -rwxr-xr-x. 1 root root 23048 May 18 09:33 amrnb-decoder
93 | -rwxr-xr-x. 1 root root 22200 May 18 09:33 amrnb-decoder-etsi
94 | -rwxr-xr-x. 1 root root 22648 May 18 09:33 amrnb-decoder-if2
95 | -rwxr-xr-x. 1 root root 25896 May 18 09:33 amrnb-encoder
96 | -rwxr-xr-x. 1 root root 25560 May 18 09:33 amrnb-encoder-etsi
97 | -rwxr-xr-x. 1 root root 25560 May 18 09:33 amrnb-encoder-etsi-vad2
98 | -rwxr-xr-x. 1 root root 25816 May 18 09:33 amrnb-encoder-if2
99 | -rwxr-xr-x. 1 root root 25816 May 18 09:33 amrnb-encoder-if2-vad2
100 | -rwxr-xr-x. 1 root root 25896 May 18 09:33 amrnb-encoder-vad2
101 | -rwxr-xr-x. 1 root root 23312 May 18 09:33 amrwb-decoder
102 | -rwxr-xr-x. 1 root root 22920 May 18 09:33 amrwb-decoder-if2
103 | -rwxr-xr-x. 1 root root 25488 May 18 09:33 amrwb-encoder
104 | -rwxr-xr-x. 1 root root 25440 May 18 09:33 amrwb-encoder-if2
105 | -rwxr-xr-x. 1 root root 600696 May 18 09:57 aomdec
106 | -rwxr-xr-x. 1 root root 628328 May 18 09:58 aomenc
107 | -rwxr-xr-x. 1 root root 238840 May 18 09:47 cwebp
108 | -rwxr-xr-x. 1 root root 131280 May 18 09:47 dwebp
109 | -rwxr-xr-x. 1 root root 17912 May 18 09:32 extract_a52
110 | -rwxr-xr-x. 1 root root 269680 May 18 09:36 faad
111 | -rwxr-xr-x. 1 root root 259696 May 18 10:16 ffmpeg
112 | -rwxr-xr-x. 1 root root 144056 May 18 10:16 ffprobe
113 | -rwxr-xr-x. 1 root root 1023248 May 18 09:40 flac
114 | -rwxr-xr-x. 1 root root 106320 May 18 09:47 gif2webp
115 | -rwxr-xr-x. 1 root root 181792 May 18 09:47 img2webp
116 | -rwxr-xr-x. 1 root root 130920 May 18 09:41 kvazaar
117 | -rwxr-xr-x. 1 root root 514176 May 18 09:41 lame
118 | -rwxr-xr-x. 1 root root 2411 May 18 09:47 libwmf-config
119 | -rwxr-xr-x. 1 root root 13143 May 18 09:47 libwmf-fontmap
120 | -rwxr-xr-x. 1 root root 677544 May 18 09:40 metaflac
121 | -rwxr-xr-x. 1 root root 514624 May 18 09:41 mp3rtp
122 | -rwxr-xr-x. 1 root root 369584 May 18 09:44 ogg123
123 | -rwxr-xr-x. 1 root root 48768 May 18 09:44 oggdec
124 | -rwxr-xr-x. 1 root root 279392 May 18 09:44 oggenc
125 | -rwxr-xr-x. 1 root root 117888 May 18 09:44 ogginfo
126 | -rwxr-xr-x. 1 root root 22440 May 18 09:41 oggz
127 | -rwxr-xr-x. 1 root root 142288 May 18 09:41 oggz-chop
128 | -rwxr-xr-x. 1 root root 68504 May 18 09:41 oggz-codecs
129 | -rwxr-xr-x. 1 root root 84776 May 18 09:41 oggz-comment
130 | -rwxr-xr-x. 1 root root 5671 May 18 09:41 oggz-diff
131 | -rwxr-xr-x. 1 root root 89280 May 18 09:41 oggz-dump
132 | -rwxr-xr-x. 1 root root 100056 May 18 09:41 oggz-info
133 | -rwxr-xr-x. 1 root root 18848 May 18 09:41 oggz-known-codecs
134 | -rwxr-xr-x. 1 root root 75616 May 18 09:41 oggz-merge
135 | -rwxr-xr-x. 1 root root 76168 May 18 09:41 oggz-rip
136 | -rwxr-xr-x. 1 root root 70544 May 18 09:41 oggz-scan
137 | -rwxr-xr-x. 1 root root 75968 May 18 09:41 oggz-sort
138 | -rwxr-xr-x. 1 root root 83128 May 18 09:41 oggz-validate
139 | -rwxr-xr-x. 1 root root 69616 May 18 09:43 speexdec
140 | -rwxr-xr-x. 1 root root 86512 May 18 09:43 speexenc
141 | -rwxr-xr-x. 1 root root 797 May 18 09:30 srt-ffplay
142 | -rwxr-xr-x. 1 root root 1125448 May 18 09:31 srt-file-transmit
143 | -rwxr-xr-x. 1 root root 1122072 May 18 09:31 srt-live-transmit
144 | -rwxr-xr-x. 1 root root 1151416 May 18 09:31 srt-tunnel
145 | -rwxr-xr-x. 1 root root 54904 May 18 09:44 vcut
146 | -rwxr-xr-x. 1 root root 118400 May 18 09:44 vorbiscomment
147 | -rwxr-xr-x. 1 root root 77464 May 18 09:47 vwebp
148 | -rwxr-xr-x. 1 root root 139680 May 18 09:47 webpinfo
149 | -rwxr-xr-x. 1 root root 106200 May 18 09:47 webpmux
150 | -rwxr-xr-x. 1 root root 47824 May 18 09:47 wmf2eps
151 | -rwxr-xr-x. 1 root root 44896 May 18 09:47 wmf2fig
152 | -rwxr-xr-x. 1 root root 44264 May 18 09:47 wmf2gd
153 | -rwxr-xr-x. 1 root root 44696 May 18 09:47 wmf2svg
154 | -rwxr-xr-x. 1 root root 47000 May 18 09:47 wmf2x
155 | -rwxr-xr-x. 1 root root 2565704 May 18 10:01 x264
156 | -rwxr-xr-x. 1 root root 164592 May 18 10:05 x265
157 |
158 |
159 | ```
160 |
--------------------------------------------------------------------------------
/VERSIONS.md:
--------------------------------------------------------------------------------
1 |
2 | # Latest Package Versions
3 | ## Versions
4 | | Name | Version | Check |
5 | | --- |----------| --- |
6 | | NSAM | 2.15.05 | https://www.nasm.us/ |
7 | | YASM | 1.3.0 | https://yasm.tortall.net/Download.html |
8 | | libass | GIT | https://github.com/libass/libass |
9 | | libsrt | GIT | https://github.com/Haivision/srt |
10 | | aribb24 | GIT | https://github.com/nkoriyama/aribb24 |
11 | | a52dec | GIT | https://ftp.osuosl.org/pub/blfs/conglomeration/a52dec |
12 | | armnb | 11.0.0.0 | http://www.penguin.cz/~utx/ftp/amr/ |
13 | | armwb | 11.0.0.0 | http://www.penguin.cz/~utx/ftp/amr/ |
14 | | libao | 1.2.0 | https://xiph.org/downloads/ |
15 | | libogg | 1.3.5 | https://xiph.org/downloads/ |
16 | | liboggz | 1.1.1 | https://xiph.org/downloads/ |
17 | | vorbis-tools | 1.4.2 | https://xiph.org/downloads/ |
18 | | libfishsound | GIT | https://xiph.org/downloads/ |
19 | | libvorbis | 1.3.7 | https://xiph.org/downloads/ |
20 | | libtheora | 1.1.1 | https://xiph.org/downloads/ |
21 | | libspeex | 1.2.0 | https://xiph.org/downloads/ |
22 | | libflac | 1.3.2 | https://xiph.org/downloads/ |
23 | | libilbc | GIT | https://github.com/TimothyGu/libilbc |
24 | | libgsm | GIT | https://github.com/timothytylee/libgsm |
25 | | celt | GIT | https://gitlab.xiph.org/xiph/celt |
26 | | faad2 | GIT | https://github.com/dsvensson/faad2 |
27 | | libwmf | 0.2.8.4 | https://sourceforge.net/projects/wvware/files/ |
28 | | lame | 3.100 | https://sourceforge.net/projects/lame/files/ |
29 | | opus | 1.3.1 | https://archive.mozilla.org/pub/opus/ |
30 | | fdk-acc | GIT | https://github.com/mstorsjo/fdk-aac |
31 | | vo-aacenc | GIT | https://github.com/mstorsjo/vo-aacenc |
32 | | vo-amrwbenc | 0.1.3 | https://sourceforge.net/projects/opencore-amr/files/vo-amrwbenc/ |
33 | | opencore-amr | 0.1.5 | https://sourceforge.net/projects/opencore-amr/files/ |
34 | | neroaacenc | GIT | http://techdata.mirror.gtcomm.net/sysadmin/ffmpeg-avs/ |
35 | | soxr | | https://download.videolan.org/contrib/soxr |
36 | | kvazaar | GIT | https://github.com/ultravideo/kvazaar.git|
37 | | dav1d | GIT | https://code.videolan.org/videolan/dav1d.git |
38 | | webp | 1.2.0 | https://developers.google.com/speed/webp/download |
39 | | zimg | GIT | https://github.com/sekrit-twc/zimg |
40 | | davs2 | GIT | https://github.com/pkuvcl/davs2 |
41 | | vid | GIT | https://github.com/georgmartius/vid |
42 | | uavs3d | GIT | https://github.com/uavs3/uavs3d |
43 | | vpx | GIT | https://chromium.googlesource.com/webm/libvpx.git |
44 | | x264 | GIT | https://code.videolan.org/videolan/x264.git |
45 | | x265 | SVN | http://hg.videolan.org/x265 |
46 | | xvid | | https://downloads.xvid.com/downloads |
47 | | aom | GIT | https://aomedia.googlesource.com/aom |
48 | | ffmpeg | GIT | https://git.ffmpeg.org/ffmpeg.git |
49 |
50 |
51 |
52 |
--------------------------------------------------------------------------------
/_Backup.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | pkg-config --modversion libmfx
5 |
6 |
7 | PREFIX=${INSTALL_DIR} && \
8 | TEMP_PATH=/tmp && \
9 | LIBVA_VERSION=2.14.0 && \
10 | DIR=${TEMP_PATH}/libva && \
11 | mkdir -p ${DIR} && \
12 | cd ${DIR} && \
13 | curl -sLf https://github.com/intel/libva/archive/refs/tags/${LIBVA_VERSION}.tar.gz | tar -xz --strip-components=1 && \
14 | ./autogen.sh --prefix="${PREFIX}" && \
15 | make -j$(nproc) && \
16 | sudo make install && \
17 | rm -rf ${DIR}
18 |
19 |
20 |
21 |
22 | #./configure --disable-documentation
23 | #./configure --disable-documentation --prefix=${INSTALL_DIR} --libdir=/usr/lib64
24 | #make
25 | #make install
26 |
27 |
28 | PREFIX=${INSTALL_DIR} && \
29 | TEMP_PATH=/tmp && \
30 | && \
31 | DIR_IMD=${TEMP_PATH}/media-driver && \
32 | mkdir -p ${DIR_IMD} && \
33 | cd ${DIR_IMD} && \
34 | curl -sLf https://github.com/intel/media-driver/archive/refs/tags/intel-media-${INTEL_MEDIA_DRIVER_VERSION}.tar.gz | tar -xz --strip-components=1 && \
35 | DIR_GMMLIB=${TEMP_PATH}/gmmlib && \
36 | mkdir -p ${DIR_GMMLIB} && \
37 | cd ${DIR_GMMLIB} && \
38 | curl -sLf https://github.com/intel/gmmlib/archive/refs/tags/intel-gmmlib-${GMMLIB_VERSION}.tar.gz | tar -xz --strip-components=1 && \
39 | DIR=${TEMP_PATH}/build && \
40 | mkdir -p ${DIR} && \
41 | cd ${DIR} && \
42 | PKG_CONFIG_PATH=${PREFIX}/lib/pkgconfig:${PKG_CONFIG_PATH} cmake3 \
43 | $DIR_IMD \
44 | -DBUILD_TYPE=release \
45 | -DBS_DIR_GMMLIB="$DIR_GMMLIB/Source/GmmLib" \
46 | -DBS_DIR_COMMON=$DIR_GMMLIB/Source/Common \
47 | -DBS_DIR_INC=$DIR_GMMLIB/Source/inc \
48 | -DBS_DIR_MEDIA=$DIR_IMD \
49 | -DCMAKE_INSTALL_PREFIX=${PREFIX} \
50 | -DCMAKE_INSTALL_LIBDIR=${PREFIX}/lib \
51 | -DINSTALL_DRIVER_SYSCONF=OFF \
52 | -DLIBVA_DRIVERS_PATH=${PREFIX}/lib/dri && make && \
53 | sudo make -j$(nproc) install && \
54 | rm -rf ${DIR} && \
55 | rm -rf ${DIR_IMD} && \
56 | rm -rf ${DIR_GMMLIB}
57 |
58 |
59 |
60 |
61 | PREFIX=${INSTALL_DIR} && \
62 | TEMP_PATH=/tmp && \
63 | INTEL_MEDIA_SDK_VERSION=22.3.0 && \
64 | DIR=${TEMP_PATH}/medka-sdk && \
65 | mkdir -p ${DIR} && \
66 | cd ${DIR} && \
67 | curl -sLf https://github.com/Intel-Media-SDK/MediaSDK/archive/refs/tags/intel-mediasdk-${INTEL_MEDIA_SDK_VERSION}.tar.gz | tar -xz --strip-components=1 && \
68 | mkdir -p ${DIR}/build && \
69 | cd ${DIR}/build && \
70 | PKG_CONFIG_PATH=${PREFIX}/lib/pkgconfig:${PKG_CONFIG_PATH} cmake -DCMAKE_INSTALL_PREFIX="${PREFIX}" .. && \
71 | make -j$(nproc) && \
72 | sudo make install && \
73 | rm -rf ${DIR}
74 |
75 | sudo dnf install -y 'dnf-command(config-manager)'
76 | sudo dnf config-manager \
77 | --add-repo \
78 | https://repositories.intel.com/graphics/rhel/8.4/intel-graphics.repo
79 |
80 | sudo dnf install \
81 | intel-opencl \
82 | intel-media intel-mediasdk \
83 | level-zero intel-level-zero-gpu
84 |
85 |
--------------------------------------------------------------------------------
/_Bin/Convert.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | ######
4 | #
5 | # bash /home/bt/watch/_Bin/Convert.sh /home/bt/watch/_CN/_China
6 | # /input1 /home/bt/watch/_CN/_China/output
7 | #
8 | ######
9 |
10 | DATEYMD=$(date +%Y-%m-%d)
11 | DIRID=$2
12 | [[ ! -z "$DIRID" ]] && WORKER_ID=$2 || WORKER_ID="input"
13 | WORKER_DIR=$1
14 | pushd ${WORKER_DIR} > /dev/null
15 | INPUT_DIR="${WORKER_ID}";
16 | OUTPUT_DIR="$3output";
17 | BACKUP_DIR="_backup_${DATEYMD}/";
18 | echo -e "Input directory: ${INPUT_DIR}";
19 | echo -e "Output directory: ${OUTPUT_DIR}";
20 | SUFFIX=".mp4";
21 | [[ ! -d "$3logs" ]] && mkdir -p "$3logs";
22 | [[ ! -d ${OUTPUT_DIR} ]] && mkdir -p ${OUTPUT_DIR};
23 | [[ ! -d ${BACKUP_DIR} ]] && mkdir -p ${BACKUP_DIR};
24 | #[[ ! -d ${INPUT_DIR} ]] && echo -e "Input Empty!!!";exit;
25 | #[[ "$(ls -A $INPUT_DIR)" ]] && echo -e "Directory is Empty!";exit 0;
26 |
27 | for Video in `ls -hrS ${INPUT_DIR}/*.*`; do
28 | #[[ ! -f "$Video" ]] || continue;
29 | INFILE="${Video}"; # Input Files
30 | BaseName="$(basename ${Video})"; # Filename
31 | FileName="${BaseName%.*}"; # Filename without extension
32 | FileVerify=$(ffprobe -v error -select_streams v:0 -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 ${INFILE})
33 | if [ -z "${FileVerify}" ]; then
34 | echo -e "Maybe Source Video File corruption,SKIP......";
35 | mkdir -p "${WORKER_DIR}/fail";mv "${Video}" "${WORKER_DIR}/fail/";
36 | continue;
37 | fi
38 | FileInfo=$(ffprobe -v error -select_streams v:0 -show_entries stream=codec_name,codec_type,width,height,bit_rate,nb_frames,r_frame_rate,duration,display_aspect_ratio -of default=noprint_wrappers=1 ${INFILE} > "${WORKER_DIR}/${FileName}_parsed");
39 | source "${WORKER_DIR}/${FileName}_parsed";
40 | ORIGIN_WIDTH=${width}
41 | ORIGIN_HEIGHT=${height}
42 | ORIGIN_BITRATE=${bit_rate}
43 | if [ "$ORIGIN_BITRATE" = "N/A" ]; then
44 | ORIGIN_BITRATE=$(ffprobe -hide_banner -loglevel 0 -of flat -i ${INFILE} -select_streams v -show_entries 'format=bit_rate' 2> /dev/null | sed 's/.*bit_rate="\([0-9]\+\)".*/\1/g';)
45 | fi
46 | ORIGIN_BITRATES=$((${ORIGIN_BITRATE} / 1000 ));
47 | ORIGIN_FRAMERATE=$(($r_frame_rate))
48 |
49 | if [[ "${ORIGIN_WIDTH}" -ge 3840 || "${ORIGIN_HEIGHT}" -ge 2160 ]]; then
50 | N="2160P";CRF=21;QP=19;SIZE=-2:${ORIGIN_HEIGHT};BitRateK=13000
51 | [[ ${ORIGIN_BITRATES} -ge ${BitRateK} ]] && BITRATE=${BitRateK} || BITRATE=${ORIGIN_BITRATES}
52 | elif [[ "${ORIGIN_WIDTH}" -ge 2560 || "${ORIGIN_HEIGHT}" -ge 1440 ]]; then
53 | N="1440P";CRF=22;QP=19;SIZE=-2:${ORIGIN_HEIGHT};BitRateK=8000
54 | [[ ${ORIGIN_BITRATES} -ge ${BitRateK} ]] && BITRATE=${BitRateK} || BITRATE=${ORIGIN_BITRATES}
55 | elif [[ "${ORIGIN_WIDTH}" -ge 1920 || "${ORIGIN_HEIGHT}" -ge 1080 ]]; then
56 | N="1080P";CRF=22;QP=20;SIZE=-2:${ORIGIN_HEIGHT};BitRateK=5000
57 | [[ ${ORIGIN_BITRATES} -ge ${BitRateK} ]] && BITRATE=${BitRateK} || BITRATE=${ORIGIN_BITRATES}
58 | elif [[ "${ORIGIN_WIDTH}" -ge 1080 || "${ORIGIN_HEIGHT}" -ge 720 ]]; then
59 | N="720P";CRF=22;QP=20;SIZE=-2:${ORIGIN_HEIGHT};BitRateK=2800
60 | [[ ${ORIGIN_BITRATES} -ge ${BitRateK} ]] && BITRATE=${BitRateK} || BITRATE=${ORIGIN_BITRATES}
61 | elif [[ "${ORIGIN_WIDTH}" -ge 720 || "${ORIGIN_HEIGHT}" -ge 480 ]]; then
62 | N="480P";CRF=22;QP=20;SIZE=-2:${ORIGIN_HEIGHT};BitRateK=1200
63 | [[ ${ORIGIN_BITRATES} -ge ${BitRateK} ]] && BITRATE=${BitRateK} || BITRATE=${ORIGIN_BITRATES}
64 | elif [[ "${ORIGIN_WIDTH}" -ge 640 || "${ORIGIN_HEIGHT}" -ge 360 ]]; then
65 | N="360P";CRF=22;QP=22;SIZE=-2:${ORIGIN_HEIGHT};BitRateK=800
66 | [[ ${ORIGIN_BITRATES} -ge ${BitRateK} ]] && BITRATE=${BitRateK} || BITRATE=${ORIGIN_BITRATES}
67 | else
68 | N="240P";CRF=22;QP=23;SIZE=-2:${ORIGIN_HEIGHT};BitRateK=600
69 | [[ ${ORIGIN_BITRATES} -ge ${BitRateK} ]] && BITRATE=${BitRateK} || BITRATE=${ORIGIN_BITRATES}
70 | fi
71 |
72 | # Rest Value
73 | # if frame less 23 reset it 23/r, if over 60 reset it to 60/r
74 | [[ "${ORIGIN_FRAMERATE}" -le 23 ]] && FRAMERATE=23 || FRAMERATE=${ORIGIN_FRAMERATE};
75 | [[ "${FRAMERATE}" -ge 60 ]] && FRAMERATE=60
76 |
77 | SCALE_NAME="horizontal";
78 | SCALE="-2:${ORIGIN_HEIGHT}";
79 | [[ ! ${ORIGIN_WIDTH} -gt ${ORIGIN_HEIGHT} ]] && SCALE="${ORIGIN_WIDTH}:-2";SCALE_NAME="vertical";
80 |
81 | echo -e "------------- Video Parse Info --------------";
82 | echo -e "Work Directory: ${WORKER_DIR}";
83 | echo -e "File Name:${FileName} ";
84 | echo -e "Video Codec Name: ${codec_name} ";
85 | echo -e "Video Codec Type: ${codec_type} ";
86 | echo -e "Video Duration: ${duration} ";
87 | echo -e "Video Frame: ${nb_frames} ";
88 | echo -e "Video FrameRate: $(($r_frame_rate)) - ${r_frame_rate} ";
89 | echo -e "Video Bit Rate: Origin => ${BITRATE} Maxrate => ${BitRateK} ";
90 | echo -e "Video Dimension: ${width}x${height} ";
91 | echo -e "Video Ratio: ${display_aspect_ratio} ";
92 | echo -e "Video Scale: ${SCALE_NAME} - ${SCALE} ";
93 | echo -e "Video Target: ${N} ";
94 | echo -e "------------- Video Parse End --------------";
95 |
96 | # -crf ${CRF} -r ${FRAMERATE}
97 | FFMPEG_BIN=("ffmpeg -hide_banner -y -i "${INFILE}" -threads 0 ")
98 | FFMPEG_OPS+=(-vstats_file "$3logs/${FileName}.log")
99 | FFMPEG_OPS+=(-c:v libx264 -preset slow -profile:v high -level:v 4.1 -vf "scale=${SCALE}" -b:v ${BITRATE}k -maxrate $((${BITRATE} * 2))k -bufsize $((${BITRATE}/2))k -g 50 -max_muxing_queue_size 9999 -movflags faststart) # CRF Mode
100 | #FFMPEG_OPS+=();
101 | FFMPEG_OPS+=(-c:a aac -b:a 128k ${OUTPUT_DIR}/${FileName}${SUFFIX}); #;_${BV}p${SUFFIX})
102 | COMMANDS="${FFMPEG_BIN} ${FFMPEG_OPS[@]}"
103 | echo -e "Command:\n ${COMMANDS} \n"
104 | $(${COMMANDS});
105 | unset FFMPEG_OPS;
106 |
107 | echo -e "${Green} Convert Done, Checking......${Reset}";
108 | rm -rf "${WORKER_DIR}/${FileName}_parsed";
109 | if [[ -f ${OUTPUT_DIR}/${FileName}${SUFFIX} && -s ${OUTPUT_DIR}/${FileName}${SUFFIX} ]]; then
110 | echo -e "${Green} File is valid, Remove Origin File...... ${Reset}"
111 | mv "${Video}" "${BACKUP_DIR}/"
112 | echo -e "${Green} Mission Completed, Start Process Next......${Reset}"
113 | else
114 | echo -e "${Red} File is invalid, Please try Transcoding Video Again...... ${Reset}";
115 | fi
116 | #exit;
117 | done
118 | popd > /dev/null
119 |
--------------------------------------------------------------------------------
/_Bin/ConvertMB.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | # Multiple Bitrate Convert
4 |
5 |
6 | DATEYMD=$(date +%Y-%m-%d)
7 | DIRID=$2
8 | [[ ! -z "$DIRID" ]] && WORKER_ID=$2 || WORKER_ID="input"
9 | WORKER_DIR=$1
10 | pushd ${WORKER_DIR} > /dev/null
11 | INPUT_DIR="${WORKER_ID}";
12 | OUTPUT_DIR="$3output";
13 | BACKUP_DIR="_backup_${DATEYMD}/";
14 | echo -e "Input directory: ${INPUT_DIR}";
15 | echo -e "Output directory: ${OUTPUT_DIR}";
16 | SUFFIX=".mp4";
17 | [[ ! -d "$3logs" ]] && mkdir -p "$3logs";
18 | [[ ! -d ${OUTPUT_DIR} ]] && mkdir -p ${OUTPUT_DIR};
19 | [[ ! -d ${BACKUP_DIR} ]] && mkdir -p ${BACKUP_DIR};
20 | #[[ ! -d ${INPUT_DIR} ]] && echo -e "Input Empty!!!";exit;
21 | #[[ "$(ls -A $INPUT_DIR)" ]] && echo -e "Directory is Empty!";exit 0;
22 |
23 | for Video in ${INPUT_DIR}/*.*; do
24 | #[[ ! -f "$Video" ]] || continue;
25 | INFILE="${Video}"; # Input Files
26 | BaseName="$(basename ${Video})"; # Filename
27 | FileName="${BaseName%.*}"; # Filename without extension
28 | FileVerify=$(ffprobe -v error -select_streams v:0 -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 ${INFILE})
29 | if [ -z "${FileVerify}" ]; then
30 | echo -e "May be Source Video File corruption,Skip......";
31 | mkdir -p "${WORKER_DIR}/fail";mv "${Video}" "${WORKER_DIR}/fail/";
32 | continue;
33 | fi
34 | FileInfo=$(ffprobe -v error -select_streams v:0 -show_entries stream=codec_name,codec_type,width,height,bit_rate,nb_frames,r_frame_rate,duration,display_aspect_ratio -of default=noprint_wrappers=1 ${INFILE} > "${WORKER_DIR}/${FileName}_parsed");
35 | source "${WORKER_DIR}/${FileName}_parsed";
36 | ORIGIN_WIDTH=${width}
37 | ORIGIN_HEIGHT=${height}
38 | ORIGIN_BITRATE=${bit_rate}
39 | if [ "$ORIGIN_BITRATE" = "N/A" ]; then
40 | ORIGIN_BITRATE=$(ffprobe -hide_banner -loglevel 0 -of flat -i ${INFILE} -select_streams v -show_entries 'format=bit_rate' 2> /dev/null | sed 's/.*bit_rate="\([0-9]\+\)".*/\1/g';)
41 | fi
42 | ORIGIN_BITRATES=$((${ORIGIN_BITRATE} / 1000 ));
43 | ORIGIN_FRAMERATE=$(($r_frame_rate))
44 |
45 | # Rest Value
46 | # if frame less 23 reset it 23/r, if over 60 reset it to 60/r
47 | [[ "${ORIGIN_FRAMERATE}" -le 23 ]] && FRAMERATE=23 || FRAMERATE=${ORIGIN_FRAMERATE};
48 | [[ "${FRAMERATE}" -ge 60 ]] && FRAMERATE=60
49 |
50 | SCALE_NAME="horizontal";
51 | SCALE="-2:${ORIGIN_HEIGHT}";
52 | [[ ! ${ORIGIN_WIDTH} -gt ${ORIGIN_HEIGHT} ]] && SCALE="${ORIGIN_WIDTH}:-2";SCALE_NAME="vertical";
53 |
54 | # FFMPEG Command Start
55 |
56 | FFMPEG_BIN=("ffmpeg -hide_banner -y -i "${INFILE}" -threads 0 ")
57 | FFMPEG_OPS+=(-vstats_file \"${3}logs/${FileName}.log)
58 | # #FFMPEG_OPS+=();
59 | # FFMPEG_OPS+=(); #;_${BV}p${SUFFIX})
60 |
61 | if [[ "${ORIGIN_WIDTH}" -ge 3840 || "${ORIGIN_HEIGHT}" -ge 2160 ]]; then
62 | N="2160P";CRF=21;QP=19;SIZE=-2:${ORIGIN_HEIGHT};BitRateK=13000
63 | [[ ${ORIGIN_BITRATES} -ge ${BitRateK} ]] && BITRATE=${BitRateK} || BITRATE=${ORIGIN_BITRATES}
64 | FFMPEG_OPS+=(-c:v libx264 -preset slow -profile:v high -level:v 4.1 -vf "scale=${SCALE}" -b:v ${BITRATE}k -maxrate $((${BITRATE} * 2))k -bufsize $((${BITRATE}/2))k -g 50 -max_muxing_queue_size 9999 -movflags faststart -c:a aac -b:a 192k ${OUTPUT_DIR}/${FileName}${SUFFIX})
65 | elif [[ "${ORIGIN_WIDTH}" -ge 2560 || "${ORIGIN_HEIGHT}" -ge 1440 ]]; then
66 | N="1440P";CRF=22;QP=19;SIZE=-2:${ORIGIN_HEIGHT};BitRateK=8000
67 | [[ ${ORIGIN_BITRATES} -ge ${BitRateK} ]] && BITRATE=${BitRateK} || BITRATE=${ORIGIN_BITRATES}
68 | FFMPEG_OPS+=(-c:v libx264 -preset slow -profile:v high -level:v 4.1 -vf "scale=${SCALE}" -b:v ${BITRATE}k -maxrate $((${BITRATE} * 2))k -bufsize $((${BITRATE}/2))k -g 50 -max_muxing_queue_size 9999 -movflags faststart -c:a aac -b:a 192k ${OUTPUT_DIR}/${FileName}${SUFFIX})
69 | elif [[ "${ORIGIN_WIDTH}" -ge 1920 || "${ORIGIN_HEIGHT}" -ge 1080 ]]; then
70 | N="1080P";CRF=22;QP=20;SIZE=-2:${ORIGIN_HEIGHT};BitRateK=5000
71 | [[ ${ORIGIN_BITRATES} -ge ${BitRateK} ]] && BITRATE=${BitRateK} || BITRATE=${ORIGIN_BITRATES}
72 | FFMPEG_OPS+=(-c:v libx264 -preset slow -profile:v high -level:v 4.1 -vf "scale=${SCALE}" -b:v ${BITRATE}k -maxrate $((${BITRATE} * 2))k -bufsize $((${BITRATE}/2))k -g 50 -max_muxing_queue_size 9999 -movflags faststart -c:a aac -b:a 128k ${OUTPUT_DIR}/${FileName}${SUFFIX})
73 | elif [[ "${ORIGIN_WIDTH}" -ge 1080 || "${ORIGIN_HEIGHT}" -ge 720 ]]; then
74 | N="720P";CRF=22;QP=21;SIZE=-2:${ORIGIN_HEIGHT};BitRateK=2800
75 | [[ ${ORIGIN_BITRATES} -ge ${BitRateK} ]] && BITRATE=${BitRateK} || BITRATE=${ORIGIN_BITRATES}
76 | FFMPEG_OPS+=(-c:v libx264 -preset slow -profile:v high -level:v 4.1 -vf "scale=${SCALE}" -b:v ${BITRATE}k -maxrate $((${BITRATE} * 2))k -bufsize $((${BITRATE}/2))k -g 50 -max_muxing_queue_size 9999 -movflags faststart -c:a aac -b:a 128k ${OUTPUT_DIR}/${FileName}${SUFFIX})
77 | elif [[ "${ORIGIN_WIDTH}" -ge 720 || "${ORIGIN_HEIGHT}" -ge 480 ]]; then
78 | N="480P";CRF=22;QP=22;SIZE=-2:${ORIGIN_HEIGHT};BitRateK=1200
79 | [[ ${ORIGIN_BITRATES} -ge ${BitRateK} ]] && BITRATE=${BitRateK} || BITRATE=${ORIGIN_BITRATES}
80 | FFMPEG_OPS+=(-c:v libx264 -preset slow -profile:v high -level:v 4.1 -vf "scale=${SCALE}" -b:v ${BITRATE}k -maxrate $((${BITRATE} * 2))k -bufsize $((${BITRATE}/2))k -g 50 -max_muxing_queue_size 9999 -movflags faststart -c:a aac -b:a 128k ${OUTPUT_DIR}/${FileName}${SUFFIX})
81 | elif [[ "${ORIGIN_WIDTH}" -ge 640 || "${ORIGIN_HEIGHT}" -ge 360 ]]; then
82 | N="360P";CRF=22;QP=22;SIZE=-2:${ORIGIN_HEIGHT};BitRateK=800
83 | [[ ${ORIGIN_BITRATES} -ge ${BitRateK} ]] && BITRATE=${BitRateK} || BITRATE=${ORIGIN_BITRATES}
84 | FFMPEG_OPS+=(-c:v libx264 -preset slow -profile:v high -level:v 4.1 -vf "scale=${SCALE}" -b:v ${BITRATE}k -maxrate $((${BITRATE} * 2))k -bufsize $((${BITRATE}/2))k -g 50 -max_muxing_queue_size 9999 -movflags faststart -c:a aac -b:a 96k ${OUTPUT_DIR}/${FileName}${SUFFIX})
85 | else
86 | N="240P";CRF=22;QP=23;SIZE=-2:${ORIGIN_HEIGHT};BitRateK=600
87 | [[ ${ORIGIN_BITRATES} -ge ${BitRateK} ]] && BITRATE=${BitRateK} || BITRATE=${ORIGIN_BITRATES}
88 | FFMPEG_OPS+=(-c:v libx264 -preset slow -profile:v high -level:v 4.1 -vf "scale=${SCALE}" -b:v ${BITRATE}k -maxrate $((${BITRATE} * 2))k -bufsize $((${BITRATE}/2))k -g 50 -max_muxing_queue_size 9999 -movflags faststart -c:a aac -b:a 96k ${OUTPUT_DIR}/${FileName}${SUFFIX})
89 | fi
90 |
91 | echo -e "------------- Video Parse Info --------------";
92 | echo -e "Work Directory: ${WORKER_DIR}";
93 | echo -e "File Name:${FileName} ";
94 | echo -e "Video Codec Name: ${codec_name} ";
95 | echo -e "Video Codec Type: ${codec_type} ";
96 | echo -e "Video Duration: ${duration} ";
97 | echo -e "Video Frame: ${nb_frames} ";
98 | echo -e "Video FrameRate: $(($r_frame_rate)) - ${r_frame_rate} ";
99 | echo -e "Video Bit Rate: Origin => ${BITRATE} Maxrate => ${BitRateK} ";
100 | echo -e "Video Dimension: ${width}x${height} ";
101 | echo -e "Video Ratio: ${display_aspect_ratio} ";
102 | echo -e "Video Scale: ${SCALE_NAME} - ${SCALE} ";
103 | echo -e "Video Target: ${N} ";
104 | echo -e "------------- Video Parse End --------------";
105 |
106 | COMMANDS="${FFMPEG_BIN} ${FFMPEG_OPS[@]}"
107 | echo -e "Command:\n ${COMMANDS} \n"
108 | #$(${COMMANDS});
109 | #unset FFMPEG_OPS;
110 |
111 | # # GPU Mode: Intel QSV
112 | # FFMPEG_GBIN=("ffmpeg -hide_banner -hwaccel vaapi -hwaccel_output_format vaapi -vstats_file "${3}logs/${FileName}.log" -y -i "${INFILE}" ")
113 | # #FFMPEG_GOPS+=(-c:v h264_qsv -global_quality ${QP} -b:v 0k -vf "scale_vaapi=${SCALE},hwmap=derive_device=qsv,format=qsv" -preset slow -profile:v high -level 4.1 -movflags faststart)
114 | # FFMPEG_GOPS+=(-c:v h264_qsv -b:v ${BITRATE}k -maxrate $((${BITRATE} * 2))k -vf "scale_vaapi=${SCALE},hwmap=derive_device=qsv,format=qsv" -preset slow -profile:v high -level 4.1 -movflags faststart )
115 | # # CBR -b:v 5M -maxrate 5M -b:v ${BITRATE}k -maxrate $((${BITRATE} * 2))k
116 | # # CQP -c:v h264_qsv -q 25
117 | # FFMPEG_GOPS+=(-c:a aac -strict -2 -ar 44100 -b:a 128k ${OUTPUT_DIR}/${FileName}${SUFFIX})
118 | # COMMANDSG="${FFMPEG_GBIN} ${FFMPEG_GOPS[@]}"
119 | # echo -e "Command:\n ${COMMANDSG} \n"
120 | # echo -e "Info: Try GPU Transcoding ${INFILE} ......."
121 | # $(${COMMANDSG});
122 | # unset FFMPEG_GOPS;
123 |
124 | # # if file not exists or it's empty, try use CPU re-transcoding
125 | # if [[ ! -f ${OUTPUT_DIR}/${FileName}${SUFFIX} && ! -s ${OUTPUT_DIR}/${FileName}${SUFFIX} ]]; then
126 | # FFMPEG_BIN=("ffmpeg -hide_banner -y -i "${INFILE}" -threads 0 ")
127 | # FFMPEG_OPS+=(-vstats_file "${3}logs/${FileName}.log")
128 | # FFMPEG_OPS+=(-c:v libx264 -preset slow -profile:v high -level:v 4.1 -vf "scale=${SCALE}" -b:v ${BITRATE}k -maxrate $((${BITRATE} * 2))k -bufsize $((${BITRATE}/2))k -g 50 -max_muxing_queue_size 9999 -movflags faststart) # CRF Mode
129 | # #FFMPEG_OPS+=();
130 | # FFMPEG_OPS+=(-c:a aac -b:a 128k ${OUTPUT_DIR}/${FileName}${SUFFIX}); #;_${BV}p${SUFFIX})
131 | # COMMANDS="${FFMPEG_BIN} ${FFMPEG_OPS[@]}"
132 | # echo -e "Command:\n ${COMMANDS} \n"
133 | # $(${COMMANDS});
134 | # unset FFMPEG_OPS;
135 | # fi
136 |
137 | # echo -e "${Green} Convert Done, Checking......${Reset}";
138 | # rm -rf "${WORKER_DIR}/${FileName}_parsed";
139 | # if [[ -f ${OUTPUT_DIR}/${FileName}${SUFFIX} && -s ${OUTPUT_DIR}/${FileName}${SUFFIX} ]]; then
140 | # echo -e "${Green} File is valid, Remove Origin File...... ${Reset}"
141 | # mv "${Video}" "${BACKUP_DIR}/"
142 | # echo -e "${Green} Mission Completed, Start Process Next......${Reset}"
143 | # else
144 | # echo -e "${Red} File is invalid, Please try Transcoding Video Again...... ${Reset}";
145 | # fi
146 | # exit;
147 | done
148 | popd > /dev/null
149 |
--------------------------------------------------------------------------------
/_Bin/ConvertQ.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | ######
4 | #
5 | # bash /home/bt/watch/_Bin/Convert.sh /home/bt/watch/_CN/_China
6 | # /input1 /home/bt/watch/_CN/_China/output
7 | #
8 | ######
9 |
10 | DATEYMD=$(date +%Y-%m-%d)
11 | DIRID=$2
12 | [[ ! -z "$DIRID" ]] && WORKER_ID=$2 || WORKER_ID="input"
13 | WORKER_DIR=$1
14 | pushd ${WORKER_DIR} > /dev/null
15 | INPUT_DIR="${WORKER_ID}";
16 | OUTPUT_DIR="$3output";
17 | BACKUP_DIR="_backup_${DATEYMD}/";
18 | echo -e "Input directory: ${INPUT_DIR}";
19 | echo -e "Output directory: ${OUTPUT_DIR}";
20 | SUFFIX=".mp4";
21 | [[ ! -d "$3logs" ]] && mkdir -p "$3logs";
22 | [[ ! -d ${OUTPUT_DIR} ]] && mkdir -p ${OUTPUT_DIR};
23 | [[ ! -d ${BACKUP_DIR} ]] && mkdir -p ${BACKUP_DIR};
24 | #[[ ! -d ${INPUT_DIR} ]] && echo -e "Input Empty!!!";exit;
25 | #[[ "$(ls -A $INPUT_DIR)" ]] && echo -e "Directory is Empty!";exit 0;
26 |
27 | for Video in ${INPUT_DIR}/*.*; do
28 | #[[ ! -f "$Video" ]] || continue;
29 | INFILE="${Video}"; # Input Files
30 | BaseName="$(basename ${Video})"; # Filename
31 | FileName="${BaseName%.*}"; # Filename without extension
32 | FileVerify=$(ffprobe -v error -select_streams v:0 -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 ${INFILE})
33 | if [ -z "${FileVerify}" ]; then
34 | echo -e "May be Source Video File corruption,Skip......";
35 | mkdir -p "${WORKER_DIR}/fail";mv "${Video}" "${WORKER_DIR}/fail/";
36 | continue;
37 | fi
38 | FileInfo=$(ffprobe -v error -select_streams v:0 -show_entries stream=codec_name,codec_type,width,height,bit_rate,nb_frames,r_frame_rate,duration,display_aspect_ratio -of default=noprint_wrappers=1 ${INFILE} > "${WORKER_DIR}/${FileName}_parsed");
39 | source "${WORKER_DIR}/${FileName}_parsed";
40 | ORIGIN_WIDTH=${width}
41 | ORIGIN_HEIGHT=${height}
42 | ORIGIN_BITRATE=${bit_rate}
43 | #if [ "$NB_FRAMES" = "N/A" ]; then
44 | # NB_FRAMES=`ffmpeg -nostats -i "$MOVIE" -vcodec copy -f rawvideo -y /dev/null 2>&1 | grep frame | awk '{split($0,a,"fps")}END{print a[1]}' | sed 's/.*= *//'`
45 | #fi
46 | if [ "$ORIGIN_BITRATE" = "N/A" ]; then
47 | ORIGIN_BITRATE=$(ffprobe -hide_banner -loglevel 0 -of flat -i ${INFILE} -select_streams v -show_entries 'format=bit_rate' 2> /dev/null | sed 's/.*bit_rate="\([0-9]\+\)".*/\1/g';)
48 | fi
49 | ORIGIN_BITRATES=$((${ORIGIN_BITRATE} / 1000 ));
50 | ORIGIN_FRAMERATE=$(($r_frame_rate))
51 |
52 | if [[ "${ORIGIN_WIDTH}" -ge 3840 || "${ORIGIN_HEIGHT}" -ge 2160 ]]; then
53 | N="2160P";CRF=21;QP=19;SIZE=-2:${ORIGIN_HEIGHT};BitRateK=13000
54 | [[ ${ORIGIN_BITRATES} -ge ${BitRateK} ]] && BITRATE=${BitRateK} || BITRATE=${ORIGIN_BITRATES}
55 | elif [[ "${ORIGIN_WIDTH}" -ge 2560 || "${ORIGIN_HEIGHT}" -ge 1440 ]]; then
56 | N="1440P";CRF=22;QP=19;SIZE=-2:${ORIGIN_HEIGHT};BitRateK=8000
57 | [[ ${ORIGIN_BITRATES} -ge ${BitRateK} ]] && BITRATE=${BitRateK} || BITRATE=${ORIGIN_BITRATES}
58 | elif [[ "${ORIGIN_WIDTH}" -ge 1920 || "${ORIGIN_HEIGHT}" -ge 1080 ]]; then
59 | N="1080P";CRF=22;QP=20;SIZE=-2:${ORIGIN_HEIGHT};BitRateK=5000
60 | [[ ${ORIGIN_BITRATES} -ge ${BitRateK} ]] && BITRATE=${BitRateK} || BITRATE=${ORIGIN_BITRATES}
61 | elif [[ "${ORIGIN_WIDTH}" -ge 1080 || "${ORIGIN_HEIGHT}" -ge 720 ]]; then
62 | N="720P";CRF=22;QP=21;SIZE=-2:${ORIGIN_HEIGHT};BitRateK=2800
63 | [[ ${ORIGIN_BITRATES} -ge ${BitRateK} ]] && BITRATE=${BitRateK} || BITRATE=${ORIGIN_BITRATES}
64 | elif [[ "${ORIGIN_WIDTH}" -ge 720 || "${ORIGIN_HEIGHT}" -ge 480 ]]; then
65 | N="480P";CRF=22;QP=22;SIZE=-2:${ORIGIN_HEIGHT};BitRateK=1200
66 | [[ ${ORIGIN_BITRATES} -ge ${BitRateK} ]] && BITRATE=${BitRateK} || BITRATE=${ORIGIN_BITRATES}
67 | elif [[ "${ORIGIN_WIDTH}" -ge 640 || "${ORIGIN_HEIGHT}" -ge 360 ]]; then
68 | N="360P";CRF=22;QP=22;SIZE=-2:${ORIGIN_HEIGHT};BitRateK=800
69 | [[ ${ORIGIN_BITRATES} -ge ${BitRateK} ]] && BITRATE=${BitRateK} || BITRATE=${ORIGIN_BITRATES}
70 | else
71 | N="240P";CRF=22;QP=23;SIZE=-2:${ORIGIN_HEIGHT};BitRateK=600
72 | [[ ${ORIGIN_BITRATES} -ge ${BitRateK} ]] && BITRATE=${BitRateK} || BITRATE=${ORIGIN_BITRATES}
73 | fi
74 |
75 | # Rest Value
76 | # if frame less 23 reset it 23/r, if over 60 reset it to 60/r
77 | [[ "${ORIGIN_FRAMERATE}" -le 23 ]] && FRAMERATE=23 || FRAMERATE=${ORIGIN_FRAMERATE};
78 | [[ "${FRAMERATE}" -ge 60 ]] && FRAMERATE=60
79 |
80 | SCALE_NAME="horizontal";
81 | SCALE="-2:${ORIGIN_HEIGHT}";
82 | [[ ! ${ORIGIN_WIDTH} -gt ${ORIGIN_HEIGHT} ]] && SCALE="${ORIGIN_WIDTH}:-2";SCALE_NAME="vertical";
83 |
84 | echo -e "------------- Video Parse Info --------------";
85 | echo -e "Work Directory: ${WORKER_DIR}";
86 | echo -e "File Name:${FileName} ";
87 | echo -e "Video Codec Name: ${codec_name} ";
88 | echo -e "Video Codec Type: ${codec_type} ";
89 | echo -e "Video Duration: ${duration} ";
90 | echo -e "Video Frame: ${nb_frames} ";
91 | echo -e "Video FrameRate: $(($r_frame_rate)) - ${r_frame_rate} ";
92 | echo -e "Video Bit Rate: Origin => ${BITRATE} Maxrate => ${BitRateK} ";
93 | echo -e "Video Dimension: ${width}x${height} ";
94 | echo -e "Video Ratio: ${display_aspect_ratio} ";
95 | echo -e "Video Scale: ${SCALE_NAME} - ${SCALE} ";
96 | echo -e "Video Target: ${N} ";
97 | echo -e "------------- Video Parse End --------------";
98 |
99 | # GPU Mode: Intel QSV
100 | FFMPEG_GBIN=("ffmpeg -hide_banner -hwaccel vaapi -hwaccel_output_format vaapi -vstats_file "${3}logs/${FileName}.log" -y -i "${INFILE}" ")
101 | #FFMPEG_GOPS+=(-c:v h264_qsv -global_quality ${QP} -b:v 0k -vf "scale_vaapi=${SCALE},hwmap=derive_device=qsv,format=qsv" -preset slow -profile:v high -level 4.1 -movflags faststart)
102 | FFMPEG_GOPS+=(-c:v h264_qsv -b:v ${BITRATE}k -maxrate $((${BITRATE} * 2))k -vf "scale_vaapi=${SCALE},hwmap=derive_device=qsv,format=qsv" -preset slow -profile:v high -level 4.1 -movflags faststart )
103 | # CBR -b:v 5M -maxrate 5M -b:v ${BITRATE}k -maxrate $((${BITRATE} * 2))k
104 | # CQP -c:v h264_qsv -q 25
105 | FFMPEG_GOPS+=(-c:a aac -strict -2 -ar 44100 -b:a 128k ${OUTPUT_DIR}/${FileName}${SUFFIX})
106 | COMMANDSG="${FFMPEG_GBIN} ${FFMPEG_GOPS[@]}"
107 | echo -e "Command:\n ${COMMANDSG} \n"
108 | echo -e "Info: Try GPU Transcoding ${INFILE} ......."
109 | $(${COMMANDSG});
110 | unset FFMPEG_GOPS;
111 |
112 | # if file not exists or it's empty, try use CPU re-transcoding
113 | if [[ ! -f ${OUTPUT_DIR}/${FileName}${SUFFIX} && ! -s ${OUTPUT_DIR}/${FileName}${SUFFIX} ]]; then
114 | FFMPEG_BIN=("ffmpeg -hide_banner -y -i "${INFILE}" -threads 0 ")
115 | FFMPEG_OPS+=(-vstats_file "${3}logs/${FileName}.log")
116 | FFMPEG_OPS+=(-c:v libx264 -preset slow -profile:v high -level:v 4.1 -vf "scale=${SCALE}" -b:v ${BITRATE}k -maxrate $((${BITRATE} * 2))k -bufsize $((${BITRATE}/2))k -g 50 -max_muxing_queue_size 9999 -movflags faststart) # CRF Mode
117 | #FFMPEG_OPS+=();
118 | FFMPEG_OPS+=(-c:a aac -b:a 128k ${OUTPUT_DIR}/${FileName}${SUFFIX}); #;_${BV}p${SUFFIX})
119 | COMMANDS="${FFMPEG_BIN} ${FFMPEG_OPS[@]}"
120 | echo -e "Command:\n ${COMMANDS} \n"
121 | $(${COMMANDS});
122 | unset FFMPEG_OPS;
123 | fi
124 |
125 | echo -e "${Green} Convert Done, Checking......${Reset}";
126 | rm -rf "${WORKER_DIR}/${FileName}_parsed";
127 | if [[ -f ${OUTPUT_DIR}/${FileName}${SUFFIX} && -s ${OUTPUT_DIR}/${FileName}${SUFFIX} ]]; then
128 | echo -e "${Green} File is valid, Remove Origin File...... ${Reset}"
129 | mv "${Video}" "${BACKUP_DIR}/"
130 | echo -e "${Green} Mission Completed, Start Process Next......${Reset}"
131 | else
132 | echo -e "${Red} File is invalid, Please try Transcoding Video Again...... ${Reset}";
133 | fi
134 | #exit;
135 | done
136 | popd > /dev/null
137 |
--------------------------------------------------------------------------------
/_Bin/Format.txt:
--------------------------------------------------------------------------------
1 | #Value (on/off Name Resolutions Bitrate)
2 | r240p=(on 240p 352x240 600)
3 | r360p=(on 360p 640x360 800)
4 | r480p=(on 480p 720x480 1200)
5 | r720p=(on 720p 1080x720 2800)
6 | r1080p=(on 1080p 1920x1080 5000)
7 | r1440p=(on 1440p 2560x1440 8000)
8 | r2160p=(on 2160p 3840x2160 13000)
9 |
10 | cat > _Format < "${WORKER_DIR}/${FileName}_parsed");
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/_Bin/_Import.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | cd /home/bt/watch/_Cen/1_CHS/Done
4 | mkdir -p {import,replace,delete}
5 | for dir in *.*; do
6 | INFILE="$dir";
7 | Filename=$(basename ${dir}); # Filename
8 | Filename2=${Filename%.*} # Filename without extension
9 | AVID=$(echo "$Filename2" | awk '{print toupper($0)}')
10 | Filesize=$(wc -c "$INFILE" | awk '{print $1}')
11 | BITRATE=$(ffprobe -v error -select_streams v:0 -show_entries stream=bit_rate -of default=nokey=1:noprint_wrappers=1 ${INFILE});
12 | HEIGHT=$(ffprobe -v error -select_streams v:0 -show_entries stream=height -of default=nokey=1:noprint_wrappers=1 ${INFILE});
13 | if [ "$BITRATE" = "N/A" ]; then
14 | BITRATE=$(ffprobe -hide_banner -loglevel 0 -of flat -i ${INFILE} -select_streams v -show_entries 'format=bit_rate' 2> /dev/null | sed 's/.*bit_rate="\([0-9]\+\)".*/\1/g';)
15 | fi
16 | APIURL="http://dev.jav.re/api/chs/cen?cmd=check&fh=${AVID}&bitrate=${BITRATE}&size=${Filesize}&height=${HEIGHT}";
17 | echo -e "${APIURL}"; ##--resolve jav.re:443:144.76.1.75
18 | if curl -Ss ${APIURL} | grep -q "found"; then
19 | echo -e "Found,Skip......";
20 | API_URL="http://dev.jav.re/api/chs/verify?fh=${AVID}&height=${HEIGHT}";
21 | echo -e "${API_URL}"; ##--resolve jav.re:443:144.76.1.75
22 | RESP=$(curl -Ss $API_URL);
23 | if [ "${RESP}" == "replace" ]; then
24 | echo -e "need replace";
25 | mv "${INFILE}" "replace/${INFILE}";
26 | echo "${Filename}">>_replace.txt
27 | else
28 | echo -e "remove";
29 | mv "${INFILE}" "delete/${INFILE}";
30 | echo "${Filename}">>_ok.txt
31 | fi
32 | else
33 | echo -e "need import!";
34 | mv "${INFILE}" "import/${INFILE}";
35 | fi
36 | echo -e "${INFILE} - ${AVID} - ${BITRATE} - ${Filesize} - ${HEIGHT}";
37 | done
38 |
39 |
40 |
41 | # 同步新入库
42 | cd /home/bt/watch/_Cen/1_CHS/Done/import
43 | rclone copy -v --fast-list --ignore-existing ./ s2:/home/chs.gslb.ru/import
44 |
45 | # 同步替换
46 | cd /home/bt/watch/_Cen/1_CHS/Done/replace
47 | rclone copy -v --fast-list --ignore-existing ./ s2:/home/chs.gslb.ru/replace
48 |
49 | # Remove
50 | cd /home/bt/watch/_Cen/1_CHS/_Watermark
51 | rclone copy -v --fast-list --ignore-existing ./ s2:/home/wait/Need_RemoveWatermark3
52 |
53 | rsync -av --delete /srv/ /home/bt/watch/_Cen/1_CHS/Done/Need_RemoveWatermark/
54 | rsync -av --delete /srv/ /home/bt/watch/_Cen/1_CHS/Done/done/tmp/
55 |
56 |
57 | ## 更新 Replace
58 | cd /home/bt/watch/_Cen/1_CHS/Done/replace
59 |
60 | for dir in *.*; do
61 | INFILE="$dir";
62 | Filename=$(basename ${dir}); # Filename
63 | Filename2=${Filename%.*} # Filename without extension
64 | AVID=$(echo "$Filename2" | awk '{print toupper($0)}')
65 | HEIGHT=$(ffprobe -v error -select_streams v:0 -show_entries stream=height -of default=nokey=1:noprint_wrappers=1 ${INFILE});
66 | CALLURL="http://dev.jav.re/api/chs/cen?cmd=update&fh=${AVID}&height=${HEIGHT}";
67 | echo -e ${CALLURL};
68 | RESP=$(curl -Ss $CALLURL);
69 | if [ "${RESP}" == "ok" ]; then
70 | echo -e "Update OK";
71 | else
72 | echo -e "Update Fail";
73 | fi
74 | done;
75 |
76 |
77 |
78 |
79 | cd /home/bt/watch/_Cen/1_CHS
80 |
81 | #
82 | # 一种判断视频文件是否具备Web播放能力的检测方式
83 | # How to: Fix pseudo-streaming videos by moving Moov Atom
84 | # Moving the Moov Atom using qt-faststart
85 | #
86 |
87 | mkdir -p _Process
88 | for f in *.*; do
89 | INPUT="${f}";
90 | STATUS=$(mediainfo "--Inform=General;IsStreamable: %IsStreamable%" "$INPUT")
91 | if grep -q "No" <<< "${STATUS}"; then
92 | echo -e "moving the moov atom using qt-faststart";
93 | mv "${INPUT}" "_Process/${INPUT}";
94 | else
95 | echo -e "OK";
96 | fi
97 | done
98 |
99 | cd _Process;
100 | for f in *.*; do
101 | INPUT="${f}";
102 | qt-faststart "${INPUT}" "../${INPUT}"
103 | done
104 |
105 |
106 | cd /home/chs.gslb.ru/replace
107 | mv *.mp4 ../public/
108 |
--------------------------------------------------------------------------------
/_Bin/_TempDocs.txt:
--------------------------------------------------------------------------------
1 |
2 |
3 | if echo "${Resolution}" | grep "Invalid"; then
4 | echo "Fail";
5 | continue;
6 | else
7 | echo -e "OK";
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/_Bin/比较Bash.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 |
4 | INFILE=/home/bt/watch/_CN/_Resource/天美传媒TM0100父子俩的援交学生妹-尤莉.mp4
5 | ffprobe -v error -select_streams v:0 -show_entries stream=codec_name,codec_type,width,height,bit_rate,nb_frames,r_frame_rate,duration,display_aspect_ratio -of default=noprint_wrappers=1 ${INFILE}
6 |
7 | set -x
8 | BitRateK=13000
9 | ORIGIN_BITRATE=$((2040583 / 1000 ))
10 | echo -e $ORIGIN_BITRATE;
11 | [[ ${ORIGIN_BITRATE} -ge ${BitRateK} ]] && BITRATE=${BitRateK} || BITRATE=${ORIGIN_BITRATE}
12 | # 如果片源码率大于转码设置的最大码率就使用设置的,否者使用片源的码率
13 | #if [ "${ORIGIN_BITRATE}" -ge "${BitRateK}" ] ; then
14 | # BITRATE=${BitRateK}
15 | #else
16 | # BITRATE=${ORIGIN_BITRATE}
17 | #fi
18 | echo -e ${BITRATE};
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 | # Calculation Resolution
28 | [[ -z ${BITRATE} ]] && BITRATE="1024000"
29 | ORIGIN_BITRATE=$[${BITRATE}/1024]
30 |
31 | ORIGIN_WIDTH=
32 | ORIGIN_HEIGHT=
33 |
34 | SCALE="horizontal";
35 | [[ ! ${ORIGIN_WIDTH} -gt ${ORIGIN_HEIGHT} ]] && SCALE="vertical";
36 |
37 | if [[ "${ORIGIN_WIDTH}" -ge 3840 || "${ORIGIN_HEIGHT}" -ge 2160 ]]; then
38 | CRF=21;QP=19;SIZE=-2:${ORIGIN_HEIGHT};BITRATE=13000
39 | elif [[ "${ORIGIN_WIDTH}" -ge 2560 || "${ORIGIN_HEIGHT}" -ge 1440 ]]; then
40 | CRF=22;QP=19;SIZE=-2:${ORIGIN_HEIGHT};BITRATE=8000
41 | elif [[ "${ORIGIN_WIDTH}" -ge 1920 || "${ORIGIN_HEIGHT}" -ge 1080 ]]; then
42 | CRF=22;QP=20;SIZE=-2:${ORIGIN_HEIGHT};BITRATE=5000
43 | elif [[ "${ORIGIN_WIDTH}" -ge 1080 || "${ORIGIN_HEIGHT}" -ge 720 ]]; then
44 | CRF=22;QP=20;SIZE=-2:${ORIGIN_HEIGHT};BITRATE=2800
45 | elif [[ "${ORIGIN_WIDTH}" -ge 720 || "${ORIGIN_HEIGHT}" -ge 480 ]]; then
46 | CRF=22;QP=20;SIZE=-2:${ORIGIN_HEIGHT};BITRATE=1200
47 | elif [[ "${ORIGIN_WIDTH}" -ge 640 || "${ORIGIN_HEIGHT}" -ge 360 ]]; then
48 | CRF=22;QP=20;SIZE=-2:${ORIGIN_HEIGHT};BITRATE=800
49 | else
50 | CRF=22;QP=23;SIZE=-2:${ORIGIN_HEIGHT};BITRATE=600
51 | fi
52 |
53 |
54 | if [[ ${ORIGIN_BITRATE} -ge 40000 ]]; then #2160P
55 | BV="2160"
56 | QP="19"
57 | BR="25000"
58 | elif [[ ${ORIGIN_BITRATE} -ge 10000 ]]; then #1440P
59 | BV="1440"
60 | QP="19"
61 | BR="10240"
62 | elif [[ ${ORIGIN_BITRATE} -ge 8000 ]]; then #1080P
63 | BV="1080"
64 | QP="20"
65 | BR="8000"
66 | elif [[ ${ORIGIN_BITRATE} -ge 5000 ]]; then #720P
67 | BV="720"
68 | QP="21"
69 | BR="5000"
70 | elif [[ ${ORIGIN_BITRATE} -ge 2500 ]]; then #480P
71 | BV="480"
72 | QP="22"
73 | BR="2500"
74 | elif [[ ${ORIGIN_BITRATE} -ge 1000 ]]; then #360P
75 | BV="360"
76 | QP="22"
77 | BR="1024"
78 | else
79 | BV="240"
80 | QP="23"
81 | BR="512"
82 | fi
83 |
84 |
85 |
--------------------------------------------------------------------------------
/changelog.md:
--------------------------------------------------------------------------------
1 | # ChangeLog
2 |
3 | ## 03/07/2022
4 | - fix CentOS 8 Stream Python3 bug
5 |
6 |
--------------------------------------------------------------------------------
/function.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | _Install_nv_header() {
4 | local name='Nv Coder Header';
5 | pushd ${SOURCE_DIR}/src > /dev/null
6 | echo -e "${CBLUE} Install ${name} ${CEND}";
7 | [ -d nv-codec-headers ] && rm -rf "nv-codec-headers"
8 | git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git
9 | cd nv-codec-headers
10 | make && make install
11 | popd > /dev/null
12 | }
13 |
14 | _Install_nv_cuda() {
15 | local name='CUDA';
16 | pushd ${SOURCE_DIR}/src > /dev/null
17 | echo -e "${CBLUE} Install ${name} ${CEND}";
18 | sudo dnf config-manager --add-repo http://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/cuda-rhel8.repo
19 | sudo dnf clean all
20 | #sudo dnf -y module install nvidia-driver:latest-dkms
21 | sudo dnf -y install cuda
22 | popd > /dev/null
23 | }
24 |
25 | # Tools Package
26 | _Install_nasm() {
27 | local name='NSAM';
28 | pushd ${SOURCE_DIR}/src > /dev/null
29 | echo -e "${CBLUE} Install ${name} ${CEND}";
30 | if [[ -f "nasm-${NASM_VER}.tar.gz" && -d nasm-${NASM_VER} ]]; then
31 | rm -rf nasm-${NASM_VER} nasm-${NASM_VER}.tar.gz
32 | fi
33 | wget https://www.nasm.us/pub/nasm/releasebuilds/${NASM_VER}/nasm-${NASM_VER}.tar.gz
34 | tar xzvf nasm-${NASM_VER}.tar.gz
35 | cd nasm-${NASM_VER}
36 | ./configure
37 | make -j VERBOSE=1
38 | make install
39 | make distclean
40 | popd > /dev/null
41 | }
42 |
43 | _Install_yasm() {
44 | local name='YSAM';
45 | pushd ${SOURCE_DIR}/src > /dev/null
46 | echo -e "${CBLUE} Install ${name} ${CEND}";
47 | if [[ -f "yasm-${YASM_VER}.tar.gz" && -d yasm-${YASM_VER} ]]; then
48 | rm -rf nasm-${YASM_VER} nasm-${YASM_VER}.tar.gz
49 | fi
50 | wget http://www.tortall.net/projects/yasm/releases/yasm-${YASM_VER}.tar.gz
51 | tar xfz yasm-${YASM_VER}.tar.gz
52 | cd yasm-${YASM_VER}
53 | ./configure
54 | make
55 | make install
56 | popd > /dev/null
57 | }
58 |
59 | # Subtitle Module
60 | _Install_libsrt() {
61 | local name='LibSrt';
62 | pushd ${SOURCE_DIR}/src > /dev/null
63 | echo -e "${CBLUE} Install ${name} ${CEND}";
64 | [[ -d "srt" ]] && rm -rf "srt";
65 | git clone --depth 1 https://github.com/Haivision/srt.git
66 | cd srt
67 | cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} -DENABLE_SHARED:bool=ON
68 | make
69 | make install
70 | popd > /dev/null
71 | }
72 |
73 | _Install_libass() {
74 | local name='Libass';
75 | pushd ${SOURCE_DIR}/src > /dev/null
76 | echo -e "${CBLUE} Install ${name} ${CEND}";
77 |
78 | if [[ -f "libass-${LIBASS_VER}.tar.gz" && -d libass-${LIBASS_VER}/ ]]; then
79 | rm -rf libass-${LIBASS_VER} libass-${LIBASS_VER}.tar.gz
80 | fi
81 |
82 | wget https://github.com/libass/libass/releases/download/${LIBASS_VER}/libass-${LIBASS_VER}.tar.gz
83 | tar -xvzf libass-${LIBASS_VER}.tar.gz
84 | cd libass-${LIBASS_VER}
85 | ./configure --prefix=${INSTALL_DIR}
86 | make
87 | make install
88 | make distclean
89 | popd > /dev/null
90 | }
91 |
92 | _Install_libaribb24() {
93 | local name='';
94 | pushd ${SOURCE_DIR}/src > /dev/null
95 | echo -e "${CBLUE} Install ${name} ${CEND}";
96 | [[ -d "aribb24" ]] && rm -rf "aribb24";
97 | git clone https://github.com/nkoriyama/aribb24
98 | cd aribb24
99 | ./bootstrap
100 | ./configure --prefix=${INSTALL_DIR}
101 | make
102 | make install
103 | popd > /dev/null
104 | }
105 |
106 | # Encoder or Decoder
107 | _Install_libvid() {
108 | local name='LIB VID';
109 | pushd ${SOURCE_DIR}/src > /dev/null
110 | echo -e "${CBLUE} Install ${name} ${CEND}";
111 | [[ -d "vid.stab" ]] && rm -rf "vid.stab";
112 | git clone --depth 1 https://github.com/georgmartius/vid.stab
113 | cd vid.stab
114 | cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} -DENABLE_SHARED:bool=ON
115 | make
116 | make install
117 | make distclean
118 | popd > /dev/null
119 | }
120 |
121 | _Install_liba52dec() {
122 | local name='Lib A52Dec';
123 | pushd ${SOURCE_DIR}/src > /dev/null
124 | echo -e "${CBLUE} Install ${name} ${CEND}";
125 | [[ -d "a52dec-${LIBA52DEC_VER}" ]] && rm -rf a52dec-${LIBA52DEC_VER}
126 | wget https://ftp.osuosl.org/pub/blfs/conglomeration/a52dec/a52dec-${LIBA52DEC_VER}.tar.gz
127 | tar xfz a52dec-${LIBA52DEC_VER}.tar.gz
128 | cd a52dec-${LIBA52DEC_VER}
129 | ./bootstrap
130 | ./configure --prefix=${INSTALL_DIR} --enable-shared 'CFLAGS=-fPIC'
131 | make
132 | make install
133 | make distclean
134 | popd > /dev/null
135 | }
136 |
137 | _Install_libamrwb() {
138 | local name='AMRWB';
139 | pushd ${SOURCE_DIR}/src > /dev/null
140 | echo -e "${CBLUE} Install ${name} ${CEND}";
141 |
142 | if [[ -f "amrwb-${AMRWB_VER}.tar.gz" && -d amrwb-${AMRWB_VER} ]]; then
143 | rm -rf amrwb-*
144 | fi
145 | wget http://www.penguin.cz/~utx/ftp/amr/amrwb-${AMRWB_VER}.tar.bz2
146 | tar -xvjf amrwb-${AMRWB_VER}.tar.bz2
147 | cd amrwb-${AMRWB_VER}
148 | ./configure --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin
149 | make
150 | make install
151 | popd > /dev/null
152 | }
153 |
154 | _Install_libamrnb() {
155 | local name='AMRNB';
156 | pushd ${SOURCE_DIR}/src > /dev/null
157 | echo -e "${CBLUE} Install ${name} ${CEND}";
158 | if [[ -f "amrnb-${AMRNB_VER}" && -d amrnb-${AMRNB_VER} ]]; then
159 | rm -rf amrnb-${AMRNB_VER}
160 | fi
161 | wget http://www.penguin.cz/~utx/ftp/amr/amrnb-${AMRNB_VER}.tar.bz2
162 | tar -xvjf amrnb-${AMRNB_VER}.tar.bz2
163 | cd amrnb-${AMRNB_VER}
164 | ./configure --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin
165 | make -j $cpu
166 | make install
167 | #make distclean
168 | popd > /dev/null
169 | }
170 |
171 | _Install_libao() {
172 | local name='Lib Ao';
173 | pushd ${SOURCE_DIR}/src > /dev/null
174 | echo -e "${CBLUE} Install ${name} ${CEND}";
175 | if [[ -f "libao-${LIBAO_VER}.tar.gz" && -d libao-${LIBAO_VER} ]]; then
176 | rm -rf libao-*
177 | fi
178 | wget -4 http://downloads.xiph.org/releases/ao/libao-${LIBAO_VER}.tar.gz
179 | tar -xvzf libao-${LIBAO_VER}.tar.gz
180 | cd libao-${LIBAO_VER}/
181 | ./configure --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin
182 | make
183 | make install
184 | #make distclean
185 | popd > /dev/null
186 | }
187 |
188 | _Install_libilbc() {
189 | local name='libilbc';
190 | pushd ${SOURCE_DIR}/src > /dev/null
191 | echo -e "${CBLUE} Install ${name} ${CEND}";
192 | [[ -d "libilbc" ]] && rm -rf "libilbc";
193 | git clone --depth=1 https://github.com/TimothyGu/libilbc.git
194 | git submodule update --init
195 | cmake .
196 | #cmake -DBUILD_SHARED_LIBS=OFF .
197 | cmake --build .
198 | # ffmpeg -f pulse -i default -f s16le -filter:a "pan=1|c0=c0+c1,aresample=8000" sample.pcm
199 | #ninja install or make install
200 | popd > /dev/null
201 | }
202 |
203 | _Install_libgsm() {
204 | local name='libgsm';
205 | pushd ${SOURCE_DIR}/src > /dev/null
206 | echo -e "${CBLUE} Install ${name} ${CEND}";
207 | [[ -d "srt" ]] && rm -rf "srt";
208 | git clone https://github.com/timothytylee/libgsm
209 | cd libgsm
210 | ./configure
211 | make
212 | make install
213 | popd > /dev/null
214 | }
215 |
216 | _Install_libcelt() {
217 | local name='CELT';
218 | pushd ${SOURCE_DIR}/src > /dev/null
219 | echo -e "${CBLUE} Install ${name} ${CEND}";
220 | [[ -d "celt" ]] && rm -rf "celt";
221 | git clone https://gitlab.xiph.org/xiph/celt
222 | cd celt
223 | ./autogen.sh
224 | ./configure --enable-fixed
225 | make
226 | make install
227 | popd > /dev/null
228 | }
229 |
230 | _Install_libfaad2() {
231 | local name='';
232 | pushd ${SOURCE_DIR}/src > /dev/null
233 | echo -e "${CBLUE} Install ${name} ${CEND}";
234 | [[ -d "faad2" ]] && rm -rf "faad2";
235 | rm -rf faad2
236 | git clone https://github.com/dsvensson/faad2
237 | cd faad2/
238 | ./bootstrap
239 | ./configure --with-mpeg4ip --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin
240 | make
241 | make install
242 | make distclean
243 | popd > /dev/null
244 | }
245 |
246 | _Install_libaacenc() {
247 | local name='Lib AACENC';
248 | pushd ${SOURCE_DIR}/src > /dev/null
249 | echo -e "${CBLUE} Install ${name} ${CEND}";
250 | [[ -d "vo-aacenc" ]] && rm -rf "vo-aacenc";
251 | git clone https://github.com/mstorsjo/vo-aacenc
252 | cd vo-aacenc/
253 | autoreconf -fiv
254 | ./configure --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin
255 | make
256 | make install
257 | make distclean
258 | popd > /dev/null
259 | }
260 |
261 | _Install_libwmf() {
262 | local name='LIB WMF';
263 | pushd ${SOURCE_DIR}/src > /dev/null
264 | echo -e "${CBLUE} Install ${name} ${CEND}";
265 | if [[ -f "libwmf-${LIBWMF_VER}.tar.gz" && -d libwmf-${LIBWMF_VER} ]]; then
266 | rm -rf libwmf-${LIBWMF_VER} libwmf-${LIBWMF_VER}.tar.gz
267 | fi
268 | wget -c https://sourceforge.net/projects/wvware/files/libwmf/0.2.8.4/libwmf-${LIBWMF_VER}.tar.gz/download -O libwmf-${LIBWMF_VER}.tar.gz
269 | tar -xvzf libwmf-${LIBWMF_VER}.tar.gz
270 | cd libwmf-${LIBWMF_VER}/
271 | ./configure --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin
272 | make
273 | make install
274 | make distclean
275 |
276 | popd > /dev/null
277 | }
278 |
279 | _Install_libspeex() {
280 | local name='Speex';
281 | pushd ${SOURCE_DIR}/src > /dev/null
282 | echo -e "${CBLUE} Install ${name} ${CEND}";
283 | if [[ -f "speex-${SPEEX_VER}.tar.gz" && -d speex-${SPEEX_VER} ]]; then
284 | rm -rf speex-${SPEEX_VER}.tar.gz speex-${SPEEX_VER}
285 | fi
286 | wget http://downloads.xiph.org/releases/speex/speex-1.2.0.tar.gz
287 | tar -xvzf speex-${SPEEX_VER}.tar.gz
288 | cd speex-${SPEEX_VER}
289 | ./configure --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin
290 | make
291 | make install
292 | make distclean
293 | popd > /dev/null
294 | }
295 |
296 | _Install_libflac() {
297 | local name='FLAC';
298 | pushd ${SOURCE_DIR}/src > /dev/null
299 | echo -e "${CBLUE} Install ${name} ${CEND}";
300 | if [[ -f "flac-${FLAC_VER}.tar.xz" && -d flac-${FLAC_VER} ]]; then
301 | rm -rf flac-${FLAC_VER}.tar.xz flac-${FLAC_VER}
302 | fi
303 | wget https://ftp.osuosl.org/pub/xiph/releases/flac/flac-${FLAC_VER}.tar.xz
304 | tar -xJf flac-${FLAC_VER}.tar.xz
305 | cd flac-${FLAC_VER}/
306 | ./configure --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin
307 | make
308 | make install
309 | make distclean
310 | popd > /dev/null
311 | }
312 |
313 | _Install_liblame() {
314 | local name='LAME';
315 | pushd ${SOURCE_DIR}/src > /dev/null
316 | echo -e "${CBLUE} Install ${name} ${CEND}";
317 | if [[ -f "lame-${LAME_VER}.tar.gz" && -d lame-${LAME_VER} ]]; then
318 | rm -rf lame-${LAME_VER}.tar.gz lame-${LAME_VER}
319 | fi
320 | wget https://ftp.osuosl.org/pub/blfs/conglomeration/lame/lame-${LAME_VER}.tar.gz
321 | tar -zxvf lame-${LAME_VER}.tar.gz
322 | cd lame-${LAME_VER}/
323 | ./configure --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin --enable-mp3x --enable-mp3rtp --enable-nasm --enable-pic
324 | make -j $cpu
325 | make install
326 | make distclean
327 | popd > /dev/null
328 | }
329 |
330 | _Install_libfdkaac() {
331 | local name='FDKAAC';
332 | pushd ${SOURCE_DIR}/src > /dev/null
333 | echo -e "${CBLUE} Install ${name} ${CEND}";
334 | [[ -d "fdk-aac" ]] && rm -rf "fdkaac";
335 | git clone https://github.com/mstorsjo/fdk-aac
336 | cd fdk-aac
337 | autoreconf -fiv
338 | ./configure 'CFLAGS=-fPIC' --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin
339 | make
340 | make install
341 | make distclean
342 | popd > /dev/null
343 | }
344 |
345 | _Install_libopus() {
346 | local name='OPUS';
347 | pushd ${SOURCE_DIR}/src > /dev/null
348 | echo -e "${CBLUE} Install ${name} ${CEND}";
349 | if [[ -f "opus-${OPUS_VER}.tar.gz" && -d opus-${OPUS_VER} ]]; then
350 | rm -rf opus-${OPUS_VER}.tar.gz opus-${OPUS_VER}
351 | fi
352 | wget https://archive.mozilla.org/pub/opus/opus-${OPUS_VER}.tar.gz
353 | tar -xvzf opus-${OPUS_VER}.tar.gz
354 | cd opus-${OPUS_VER}/
355 | ./configure --enable-shared --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin
356 | make
357 | make install
358 | make distclean
359 | popd > /dev/null
360 | }
361 |
362 | _Install_libogg() {
363 | local name='';
364 | pushd ${SOURCE_DIR}/src > /dev/null
365 | echo -e "${CBLUE} Install ${name} ${CEND}";
366 | if [[ -f "libogg-${OGG_VER}.tar.gz" && -d libogg-${OGG_VER} ]]; then
367 | rm -rf libogg-${OGG_VER}.tar.gz libogg-${OGG_VER}
368 | fi
369 | wget https://ftp.osuosl.org/pub/xiph/releases/ogg/libogg-${OGG_VER}.tar.gz
370 | tar -xvzf libogg-${OGG_VER}.tar.gz
371 | cd libogg-${OGG_VER}/
372 | ./configure --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin
373 | make
374 | make install
375 | make distclean
376 | popd > /dev/null
377 | }
378 |
379 | _Install_liboggz() {
380 | local name='oggz';
381 | pushd ${SOURCE_DIR}/src > /dev/null
382 | echo -e "${CBLUE} Install ${name} ${CEND}";
383 | if [[ -f "liboggz-${LIBOGGZ_VER}.tar.gz" && -d liboggz-${LIBOGGZ_VER} ]]; then
384 | rm -rf liboggz-${LIBOGGZ_VER}.tar.gz liboggz-${LIBOGGZ_VER}
385 | fi
386 | wget http://downloads.xiph.org/releases/liboggz/liboggz-${LIBOGGZ_VER}.tar.gz
387 | tar -xvzf liboggz-${LIBOGGZ_VER}.tar.gz
388 | cd liboggz-${LIBOGGZ_VER}/
389 | ./configure --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin
390 | make
391 | make install
392 | make distclean
393 | popd > /dev/null
394 | }
395 |
396 | _Install_libvorbis() {
397 | local name='VORBIS';
398 | pushd ${SOURCE_DIR}/src > /dev/null
399 | echo -e "${CBLUE} Install ${name} ${CEND}";
400 | if [[ -f "libvorbis-${LIBVORBIS_VER}.tar.gz" && -d libvorbis-${LIBVORBIS_VER} ]]; then
401 | rm -rf libvorbis-${LIBVORBIS_VER} libvorbis-${LIBVORBIS_VER}.tar.gz
402 | fi
403 | wget http://downloads.xiph.org/releases/vorbis/libvorbis-${LIBVORBIS_VER}.tar.gz
404 | tar -xvzf libvorbis-${LIBVORBIS_VER}.tar.gz
405 | cd libvorbis-${LIBVORBIS_VER}/
406 | ./configure --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin
407 | make
408 | make install
409 | make distclean
410 | popd > /dev/null
411 | }
412 |
413 | _Install_libvorbistools() {
414 | local name='vorbis tools';
415 | pushd ${SOURCE_DIR}/src > /dev/null
416 | echo -e "${CBLUE} Install ${name} ${CEND}";
417 | if [[ -f "vorbis-tools-${VORBIS_VER}.tar.gz" && -d vorbis-tools-${VORBIS_VER} ]]; then
418 | rm -rf vorbis-tools-${VORBIS_VER} vorbis-tools-${VORBIS_VER}.tar.gz
419 | fi
420 | wget http://downloads.xiph.org/releases/vorbis/vorbis-tools-${VORBIS_VER}.tar.gz
421 | tar -xvzf vorbis-tools-${VORBIS_VER}.tar.gz
422 | cd vorbis-tools-${VORBIS_VER}/
423 | ./configure --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin
424 | make
425 | make install
426 | make distclean
427 | popd > /dev/null
428 | }
429 |
430 | _Install_libamrwbenc() {
431 | local name='amrwbenc';
432 | pushd ${SOURCE_DIR}/src > /dev/null
433 | echo -e "${CBLUE} Install ${name} ${CEND}";
434 | if [[ -f "vo-amrwbenc-${AMRWBENC_VER}.tar.gz" && -d vo-amrwbenc-${AMRWBENC_VER} ]]; then
435 | rm -rf vo-amrwbenc-${AMRWBENC_VER} vo-amrwbenc-${AMRWBENC_VER}.tar.gz
436 | fi
437 | wget -c https://sourceforge.net/projects/opencore-amr/files/vo-amrwbenc/vo-amrwbenc-${AMRWBENC_VER}.tar.gz/download -O vo-amrwbenc-${AMRWBENC_VER}.tar.gz
438 | tar xfz vo-amrwbenc-${AMRWBENC_VER}.tar.gz
439 | cd vo-amrwbenc-${AMRWBENC_VER}
440 | ./configure --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin
441 | make
442 | make install
443 | make distclean
444 | popd > /dev/null
445 | }
446 |
447 | _Install_libopencoreamr() {
448 | local name='amr';
449 | pushd ${SOURCE_DIR}/src > /dev/null
450 | echo -e "${CBLUE} Install ${name} ${CEND}";
451 |
452 | if [[ -f "opencore-amr-${OPENCOREAMR_VER}.tar.gz" && -d "opencore-amr-${OPENCOREAMR_VER}" ]]; then
453 | rm -rf opencore-amr-${OPENCOREAMR_VER}.tar.gz opencore-amr-${OPENCOREAMR_VER}
454 | fi
455 | wget -c https://sourceforge.net/projects/opencore-amr/files/opencore-amr/opencore-amr-${OPENCOREAMR_VER}.tar.gz/download -O opencore-amr-${OPENCOREAMR_VER}.tar.gz
456 | tar -zxvf opencore-amr-${OPENCOREAMR_VER}.tar.gz
457 | cd opencore-amr-${OPENCOREAMR_VER}/
458 | ./configure --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin
459 | make -j $cpu
460 | make install
461 | #make distclean
462 | popd > /dev/null
463 | }
464 |
465 | _Install_libtheora() {
466 | local name='libtheora';
467 | pushd ${SOURCE_DIR}/src > /dev/null
468 | echo -e "${CBLUE} Install ${name} ${CEND}";
469 | if [[ -f "libtheora-${LIBTHEORA_VER}.zip" && -d libtheora-${LIBTHEORA_VER} ]]; then
470 | rm -rf libtheora-${LIBTHEORA_VER}.zip libtheora-${LIBTHEORA_VER}
471 | fi
472 | wget -4 https://ftp.osuosl.org/pub/xiph/releases/theora/libtheora-${LIBTHEORA_VER}.zip
473 | unzip -o libtheora-${LIBTHEORA_VER}.zip
474 | cd libtheora-${LIBTHEORA_VER}/
475 | ./configure --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin
476 | make
477 | make install
478 | make distclean
479 | popd > /dev/null
480 | }
481 |
482 | _Install_libneroaacenc() {
483 | local name='neroaacenc';
484 | pushd ${SOURCE_DIR}/src > /dev/null
485 | echo -e "${CBLUE} Install ${name} ${CEND}";
486 | [[ -d "nero" ]] && rm -rf "nero";
487 | wget http://techdata.mirror.gtcomm.net/sysadmin/ffmpeg-avs/NeroDigitalAudio.zip
488 | unzip -o NeroDigitalAudio.zip -d nero
489 | cd nero/linux
490 | install -D -m755 neroAacEnc ${INSTALL_DIR}/bin/
491 | install -D -m755 neroAacDec ${INSTALL_DIR}/bin/
492 | popd > /dev/null
493 | }
494 |
495 | _Install_libfishsound() {
496 | local name='Lib Fishsound';
497 | pushd ${SOURCE_DIR}/src > /dev/null
498 | echo -e "${CBLUE} Install ${name} ${CEND}";
499 | if [[ -f "libfishsound-${LIBFISHSOUND_VER}.tar.gz" && -d libfishsound-${LIBFISHSOUND_VER} ]]; then
500 | rm -rf libfishsound-*
501 | fi
502 | wget -4 http://downloads.xiph.org/releases/libfishsound/libfishsound-${LIBFISHSOUND_VER}.tar.gz
503 | tar -xvzf libfishsound-${LIBFISHSOUND_VER}.tar.gz
504 | cd libfishsound-${LIBFISHSOUND_VER}/
505 | ./configure --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin
506 | make
507 | make install
508 | make distclean
509 | popd > /dev/null
510 | }
511 |
512 | _Install_libsoxr() {
513 | local name='SOXR';
514 | pushd ${SOURCE_DIR}/src > /dev/null
515 | echo -e "${CBLUE} Install ${name} ${CEND}";
516 | if [[ -f "soxr-${LIBSOXR_VER}-Source.tar.xz" && -d soxr-${LIBSOXR_VER}-Source ]]; then
517 | rm -rf soxr-*
518 | fi
519 | wget https://download.videolan.org/contrib/soxr/soxr-${LIBSOXR_VER}-Source.tar.xz
520 | tar -xJf soxr-${LIBSOXR_VER}-Source.tar.xz
521 | cd soxr-${LIBSOXR_VER}-Source
522 | cmake3 -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} -DENABLE_SHARED:bool=ON
523 | make
524 | make install
525 | popd > /dev/null
526 | }
527 |
528 | _Install_libkvazaar() {
529 | local name='kvazaar';
530 | pushd ${SOURCE_DIR}/src > /dev/null
531 | echo -e "${CBLUE} Install ${name} ${CEND}";
532 | [[ -d "kvazaar" ]] && rm -rf "kvazaar";
533 | git clone --depth 1 https://github.com/ultravideo/kvazaar.git
534 | cd kvazaar
535 | ./autogen.sh
536 | ./configure --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin
537 | make
538 | make install
539 | popd > /dev/null
540 | }
541 |
542 | _Install_libdav1d() {
543 | local name='libdav1d';
544 | pushd ${SOURCE_DIR}/src > /dev/null
545 | echo -e "${CBLUE} Install ${name} ${CEND}";
546 | [[ -d "dav1d" ]] && rm -rf "dav1d";
547 | git clone --depth 1 https://code.videolan.org/videolan/dav1d.git
548 | mkdir dav1d/build && cd dav1d/build
549 | meson ..
550 | ninja
551 | #DESTDIR=${INSTALL_DIR}
552 | ninja install
553 | popd > /dev/null
554 | }
555 |
556 | _Install_libwebp() {
557 | local name='Libwebp';
558 | pushd ${SOURCE_DIR}/src > /dev/null
559 | echo -e "${CBLUE} Install ${name} ${CEND}";
560 | if [[ -f "libwebp-${LIBWEBP_VER}.tar.gz" && -d "libwebp-${LIBWEBP_VER}" ]]; then
561 | rm -rf libwebp*
562 | fi
563 | wget -4 https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-${LIBWEBP_VER}.tar.gz
564 | tar xfz libwebp-${LIBWEBP_VER}.tar.gz
565 | cd libwebp-${LIBWEBP_VER}
566 | ./configure --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin \
567 | --disable-wic \
568 | --enable-libwebpmux \
569 | --enable-libwebpdemux \
570 | --enable-libwebpdecoder \
571 | --enable-libwebpextras \
572 | --enable-swap-16bit-csp
573 | make
574 | make install
575 | popd > /dev/null
576 | }
577 |
578 | _Install_libzimg() {
579 | local name='LibZIMG';
580 | pushd ${SOURCE_DIR}/src > /dev/null
581 | echo -e "${CBLUE} Install ${name} ${CEND}";
582 | [[ -d "zimg" ]] && rm -rf "zimg";
583 | git clone https://github.com/sekrit-twc/zimg
584 | cd zimg
585 | git checkout tags/release-3.0.4 -b main
586 | ./autogen.sh
587 | ./configure --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin
588 | make && make install
589 | popd > /dev/null
590 | }
591 |
592 | _Install_libdavs2() {
593 | local name='DAVS2';
594 | pushd ${SOURCE_DIR}/src > /dev/null
595 | echo -e "${CBLUE} Install ${name} ${CEND}";
596 | [[ -d "srt" ]] && rm -rf "srt";
597 | git clone https://github.com/pkuvcl/davs2
598 | cd build/linux
599 | ./configure
600 | make
601 | make install
602 | popd > /dev/null
603 | }
604 |
605 | # BUILD_SHARED_LIBS=1
606 | _Install_libuavs3d() {
607 | local name='UAVS3D';
608 | pushd ${SOURCE_DIR}/src > /dev/null
609 | echo -e "${CBLUE} Install ${name} ${CEND}";
610 | [[ -d "srt" ]] && rm -rf "srt";
611 | git clone https://github.com/uavs3/uavs3d
612 | mkdir build/linux
613 | cd build/linux && cmake ../..
614 | make && make install
615 |
616 | popd > /dev/null
617 | }
618 |
619 | _Install_libvpx() {
620 | local name='LIBVPX';
621 | pushd ${SOURCE_DIR}/src > /dev/null
622 | echo -e "${CBLUE} Install ${name} ${CEND}";
623 | [[ -d "libvpx" ]] && rm -rf "libvpx";
624 | git clone --depth 1 https://chromium.googlesource.com/webm/libvpx.git
625 | cd libvpx
626 | #./configure ./configure --prefix="$HOME/ffmpeg_build" --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=yasm
627 | # --prefix=$BUILD_DIR --enable-pic --enable-vp9-highbitdepth --as=yasm --disable-examples --disable-unit-tests --disable-install-docs
628 | #./configure --prefix=$BUILD_DIR --enable-pic --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=yasm
629 | ./configure --prefix=${INSTALL_DIR} --enable-pic --disable-examples --enable-runtime-cpu-detect --enable-vp9 --enable-vp8 \
630 | --enable-postproc --enable-vp9-postproc --enable-multi-res-encoding --enable-webm-io --enable-better-hw-compatibility --enable-vp9-highbitdepth --enable-onthefly-bitpacking --enable-realtime-only
631 | make
632 | make install
633 | popd > /dev/null
634 | }
635 |
636 | _Install_libxvid() {
637 | local name='XVID';
638 | pushd ${SOURCE_DIR}/src > /dev/null
639 | echo -e "${CBLUE} Install ${name} ${CEND}";
640 | if [[ -f "xvidcore-${XVIDCORE_VER}.tar.gz" && -d "xvidcore-${XVIDCORE_VER}" ]]; then
641 | rm -rf xvidcore-*
642 | fi
643 | wget https://downloads.xvid.com/downloads/xvidcore-${XVIDCORE_VER}.tar.gz
644 | tar -xvzf xvidcore-${XVIDCORE_VER}.tar.gz
645 | cd xvidcore/build/generic/
646 | ./configure --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin
647 | make
648 | make install
649 | make distclean
650 | popd > /dev/null
651 | }
652 |
653 | _Install_libaom() {
654 | local name='AOM';
655 | pushd ${SOURCE_DIR}/src > /dev/null
656 | echo -e "${CBLUE} Install ${name} ${CEND}";
657 | rm -rf aom*
658 | git -C aom pull 2> /dev/null || git clone --depth 1 https://aomedia.googlesource.com/aom
659 | mkdir -p aom_build
660 | cd aom_build
661 | PATH="/usr/local/bin:$PATH" cmake3 -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} -DENABLE_SHARED:bool=ON -DBUILD_SHARED_LIBS=ON -DENABLE_NASM=on ../aom && \
662 | PATH="/usr/local/bin:$PATH" make && \
663 | make install
664 | popd > /dev/null
665 | }
666 |
667 | _Install_libx264() {
668 | local name='X264';
669 | pushd ${SOURCE_DIR}/src > /dev/null
670 | echo -e "${CBLUE} Install ${name} ${CEND}";
671 | [[ -d "x264" ]] && rm -rf "x264";
672 | if [ "$(uname -m)" = "x86_64" ]; then
673 | ARCHOPTS="--enable-pic"
674 | else
675 | ARCHOPTS=""
676 | fi
677 | git clone https://code.videolan.org/videolan/x264.git
678 | cd x264
679 | ./configure --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin --enable-static $ARCHOPTS
680 | make
681 | make install
682 | make distclean
683 | popd > /dev/null
684 | }
685 |
686 | _Install_libx265() {
687 | local name='X265';
688 | pushd ${SOURCE_DIR}/src > /dev/null
689 | echo -e "${CBLUE} Install ${name} ${CEND}";
690 | [[ -d "x265_git" ]] && rm -rf "x265_git";
691 | git clone --branch stable --depth 2 https://bitbucket.org/multicoreware/x265_git
692 | cd x265_git/build/linux
693 | cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="${INSTALL_DIR}" -DENABLE_SHARED:bool=ON ../../source
694 | make
695 | make install
696 | #make distclean
697 | popd > /dev/null
698 | }
699 |
700 | _Install_ffmpeg() {
701 | local name='FFMPEG';
702 | pushd ${SOURCE_DIR}/src > /dev/null
703 | echo -e "${CBLUE} Install ${name} ${CEND}";
704 | [[ -d "ffmpeg" ]] && rm -rf "ffmpeg";
705 | #git clone https://git.ffmpeg.org/ffmpeg.git
706 | git clone https://github.com/FFmpeg/FFmpeg ffmpeg
707 | cd ffmpeg
708 | ./configure \
709 | --prefix=${INSTALL_DIR} --bindir=${INSTALL_DIR}/bin \
710 | --pkg-config-flags="--static" \
711 | --extra-libs=-lpthread \
712 | --extra-libs=-lm \
713 | --extra-cflags="-I/usr/local/include -I/usr/local/cuda/include -I/include -I/usr/local/ffmpegtoolkit/include" \
714 | --extra-ldflags="-L/usr/local/lib -L/usr/local/cuda/lib64 -L/usr/local/ffmpegtoolkit/lib -L/usr/local/ffmpegtoolkit/lib64" \
715 | --enable-cross-compile \
716 | --disable-debug \
717 | --enable-fontconfig \
718 | --enable-gray \
719 | --enable-gpl \
720 | --enable-version3 \
721 | --enable-cuvid \
722 | --enable-libnpp \
723 | --enable-nvenc \
724 | --enable-nvdec \
725 | --enable-nonfree \
726 | --enable-runtime-cpudetect \
727 | --enable-shared \
728 | --enable-pthreads \
729 | --enable-libopencore-amrnb \
730 | --enable-libopencore-amrwb \
731 | --enable-libsoxr \
732 | --enable-libmp3lame \
733 | --enable-libfdk-aac \
734 | --enable-libdav1d \
735 | --enable-libkvazaar \
736 | --enable-libmfx \
737 | --enable-vaapi \
738 | --enable-opencl \
739 | --enable-libfreetype \
740 | --enable-libfribidi \
741 | --enable-libzimg \
742 | --enable-libopus \
743 | --enable-libtheora \
744 | --enable-libvorbis \
745 | --enable-libvpx \
746 | --enable-libx264 \
747 | --enable-libx265 \
748 | --enable-libaom \
749 | --enable-libxvid \
750 | --enable-libwebp \
751 | --enable-postproc \
752 | --enable-swscale \
753 | --enable-avfilter \
754 | --enable-libass \
755 | --enable-libaribb24 \
756 | --enable-libxml2
757 | make
758 | make install
759 | #make distclean
760 | make tools/qt-faststart
761 | \cp -Rp tools/qt-faststart ${INSTALL_DIR}/bin/
762 | ldconfig
763 | popd > /dev/null
764 | }
765 |
766 | #--enable-libcelt \
767 | #--enable-libilbc \
768 | #--enable-libgsm \
769 | #--enable-libuavs3d \
770 |
771 | #--enable-libmfx \
772 | #--enable-vaapi \
773 | #--enable-opencl \
774 |
--------------------------------------------------------------------------------
/include.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | ## Color Setting
4 | echo=echo
5 | for cmd in echo /bin/echo; do
6 | $cmd >/dev/null 2>&1 || continue
7 | if ! $cmd -e "" | grep -qE '^-e'; then
8 | echo=$cmd
9 | break
10 | fi
11 | done
12 | CSI=$($echo -e "\033[")
13 | CEND="${CSI}0m"
14 | CDGREEN="${CSI}32m"
15 | CRED="${CSI}1;31m"
16 | CGREEN="${CSI}1;32m"
17 | CYELLOW="${CSI}1;33m"
18 | CBLUE="${CSI}1;34m"
19 | CMAGENTA="${CSI}1;35m"
20 | CCYAN="${CSI}1;36m"
21 | CSUCCESS="$CDGREEN"
22 | CFAILURE="$CRED"
23 | CQUESTION="$CMAGENTA"
24 | CWARNING="$CYELLOW"
25 | CMSG="$CCYAN"
26 |
27 | #Test The Color
28 | #echo -e "${CDGREEN} A ${CEND}"
29 | #echo -e "${CGREEN} A ${CEND}"
30 | #echo -e "${CRED} A ${CEND}"
31 | #echo -e "${CYELLOW} A ${CEND}"
32 | #echo -e "${CBLUE} A ${CEND}"
33 | #echo -e "${CSUCCESS} A ${CEND}"
34 | #echo -e "${CFAILURE} A ${CEND}"
35 | #echo -e "${CWARNING} A ${CEND}"
36 | #echo -e "${CMSG} A ${CEND}"
37 | #echo -e "${CQUESTION} A ${CEND}"
38 |
39 |
40 | ## OS Detect
41 | if [ -e "/usr/bin/yum" ]; then
42 | PM=yum
43 | if [ -e /etc/yum.repos.d/CentOS-Base.repo ] && grep -Eqi "release 6." /etc/redhat-release; then
44 | sed -i "s@centos/\$releasever@centos-vault/6.10@g" /etc/yum.repos.d/CentOS-Base.repo
45 | sed -i 's@centos/RPM-GPG@centos-vault/RPM-GPG@g' /etc/yum.repos.d/CentOS-Base.repo
46 | [ -e /etc/yum.repos.d/epel.repo ] && rm -f /etc/yum.repos.d/epel.repo
47 | fi
48 | # command -v lsb_release >/dev/null 2>&1 || { [ -e "/etc/euleros-release" ] && yum -y install euleros-lsb || yum -y install redhat-lsb-core; clear; }
49 | fi
50 | # command -v lsb_release >/dev/null 2>&1 || { echo "${CFAILURE}${PM} source failed! ${CEND}"; kill -9 $$; }
51 |
52 | # Detect System Bit
53 | if [ "$(getconf WORD_BIT)" == "32" ] && [ "$(getconf LONG_BIT)" == "64" ]; then
54 | OS_BIT=64
55 | else
56 | OS_BIT=32
57 | fi
58 | THREAD=$(grep 'processor' /proc/cpuinfo | sort -u | wc -l)
59 |
60 | get_char() {
61 | SAVEDSTTY=`stty -g`
62 | stty -echo
63 | stty cbreak
64 | dd if=/dev/tty bs=1 count=1 2> /dev/null
65 | stty -raw
66 | stty echo
67 | stty $SAVEDSTTY
68 | }
69 |
70 | version() {
71 | echo "version: 2.0"
72 | echo "update date: 2021-05-21"
73 | }
74 |
75 | show_help() {
76 | version
77 | echo "
78 | Usage: $0 command ...[parameters]....
79 | --help, -h Show this help message
80 | --version, -v Show version info
81 | --node_type [1-2] Select Node type
82 | --nginx_option [1-3] Install Nginx server version
83 | --pureftpd Install Pure-Ftpd
84 | --redis Install Redis
85 | --ssh_port [No.] SSH port
86 | --firewalld Enable Firewalld
87 | --reboot Restart the server after installation
88 | "
89 | }
90 |
--------------------------------------------------------------------------------
/install.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | #################################################################################
3 | # FFMPEG Toolkit Installation Scripts
4 | # Many credits to GPL for the package repo
5 | #
6 | # Author : Matt Xu (2018-2022)
7 | # Package installers copyright IDCLayer.COM (2018-2022) where applicable.
8 | # All other work copyright InfoCube (2018)
9 | # Licensed under GNU General Public License v3.0 GPL-3 (in short)
10 | #
11 | # You may copy, distribute and modify the software as long as you track
12 | # changes/dates in source files. Any modifications to our software
13 | # including (via compiler) GPL-licensed code must also be made available
14 | # under the GPL along with build & install instructions.
15 | #
16 | #################################################################################
17 |
18 | SOURCE_URL='http://download.mirror.url' # Not use at this times
19 | SOURCE_DIR='/opt/ffmpegtoolkit'
20 | INSTALL_DIR='/usr/local/ffmpegtoolkit'
21 | cpu=$(cat "/proc/cpuinfo" | grep "processor" | wc -l)
22 | TMPDIR=~/tmp
23 | export SOURCE_URL
24 | export SOURCE_DIR
25 | export INSTALL_DIR
26 | export CUDA_HOME=/usr/local/cuda
27 | export LD_LIBRARY_PATH=/usr/local/ffmpegtoolkit/lib:/usr/local/lib:/usr/lib:$LD_LIBRARY_PATH
28 | export LIBRARY_PATH=/usr/local/ffmpegtoolkit/lib:/usr/lib:/usr/local/lib:$LIBRARY_PATH
29 | export CPATH=/include:/usr/local/ffmpegtoolkit/include:/usr/include/:/usr/local/include:$CPATH
30 | export PKG_CONFIG_LIBDIR=/usr/share/pkgconfig/:/usr/lib64/pkgconfig/:/usr/local/lib/pkgconfig/:/usr/lib/pkgconfig/:/usr/local/lib64/pkgconfig/:/lib/pkgconfig/
31 | export PKG_CONFIG_PATH=/usr/share/pkgconfig/:/usr/lib64/pkgconfig/:/usr/local/lib/pkgconfig/:/usr/lib/pkgconfig/:/usr/local/lib64/pkgconfig/:/lib/pkgconfig/:/usr/local/ffmpegtoolkit/lib64/pkgconfig/:/usr/local/ffmpegtoolkit/lib/pkgconfig
32 |
33 | time=$(date +"%s")
34 | # start Time
35 | startTime=$(date +%s)
36 |
37 | if [[ $EUID -ne 0 ]]; then
38 | echo "ffmpeg package setup requires user to be root. su or sudo -s and run again ..."
39 | exit 1
40 | fi
41 |
42 | mkdir -p /opt/ffmpegtoolkit/src
43 | mkdir -p /usr/local/ffmpegtoolkit/{bin,lib,share,include,src}
44 |
45 | ## Check OS Versions
46 | _OSVER=`rpm --eval '%{centos_ver}'`
47 | printf "\e[32m [Success]:\e[0m Your OS Versions is : ${_OSVER} \n"
48 | if [ "$_OSVER" -eq 8 ]; then
49 | T="sudo /usr/bin/dnf"
50 | else
51 | T="sudo /usr/bin/yum"
52 | fi
53 |
54 | ## Scripts Current Path
55 | install_dir=$(dirname "$(readlink -f $0)")
56 | pushd ${install_dir} >/dev/null
57 | . ./versions.txt
58 | . ./include.sh
59 | . ./function.sh
60 |
61 | ### 判断是不是首次运行
62 | if [ ! -e ~/.ffmpegtookit ]; then
63 | echo -e "First Time Run , Pre Define Process...."
64 | if [ -e "/etc/yum.conf" ]; then
65 | # Prerequisites
66 | echo "${CMSG}Installing Dependencies Packages...${CEND}"
67 | ${T} config-manager --set-enabled powertools
68 | dnf config-manager --set-enabled powertools
69 | dnf config-manager --set-enabled crb
70 | yum install -y yum-utils
71 | yum install -y epel-release
72 | REQPKGS=(epel-release)
73 | REQPKGS+=(gcc gcc-c++ git subversion libgcc glib2 bzip2 xz unzip make cmake automake autoconf patch ruby ncurses ncurses-devel mercurial hg neon expat expat-devel alsa-lib)
74 | REQPKGS+=(zlib zlib-devel libjpeg libjpeg-devel libpng libpng-devel gd gd-devel gettext freetype freetype-devel ImageMagick ImageMagick-devel)
75 | REQPKGS+=(libstdc++ libstdc++-devel numactl numactl-devel mediainfo giflib libtiff libtiff-devel libtool libxml2 libxml2-devel re2c giflib-devel doxygen)
76 | REQPKGS+=(libmediainfo SDL-devel freeglut-devel openssl-devel fribidi-devel fribidi meson ninja-build)
77 | for pkg in "${REQPKGS[@]}"; do
78 | if ${T} -q list installed "${pkg}" > /dev/null 2>&1; then
79 | printf "${CRED}Skip:\e[0m [${pkg}] is already installed \n${CEND}"
80 | else
81 | ${T} install "${pkg}" -q -y && printf "${CGREEN}Success:\e[0m [${pkg}] successfully installed \n"
82 | fi
83 | done
84 | # Dependencies
85 | printf "\e[36m Info:\e[0m Disable Selinux ...... \n"
86 | /usr/sbin/getenforce
87 | sed -i s/SELINUX=enforcing/SELINUX=disabled/g /etc/selinux/config
88 | sed -i s/SELINUX=permissive/SELINUX=disabled/g /etc/selinux/config
89 | setenforce 0
90 | #active Python
91 | dnf -y install python3
92 | sudo /usr/sbin/alternatives --set python /usr/bin/python3
93 | pip3 install meson
94 | pip3 install ninja
95 | # Start Sync Time
96 | systemctl enable chronyd
97 | fi
98 | touch ~/.ffmpegtookit
99 | fi
100 |
101 | cat >/etc/ld.so.conf.d/ffmpegtoolkit.conf </dev/null`
114 | [ $? != 0 ] && echo "${CWARNING}ERROR: unknown argument! ${CEND}" && show_help && exit 1
115 | eval set -- "${TEMP}"
116 | while :; do
117 | [ -z "$1" ] && break;
118 | case "$1" in
119 | -h|--help)
120 | show_help; exit 0
121 | ;;
122 | -v|-V|--version)
123 | version; exit 0
124 | ;;
125 | --mode)
126 | mode=$2; shift 2
127 | [[ ! ${mode} =~ ^[1-3]$ ]] && { echo "${CWARNING}mode input error! Please only input number 1~3${CEND}"; exit 1; }
128 | ;;
129 | --memcached)
130 | memcached_flag=y; shift 1
131 | [ -e "${memcached_install_dir}/bin/memcached" ] && { echo "${CWARNING}memcached-server already installed! ${CEND}"; unset memcached_flag; }
132 | ;;
133 | --ssh_port)
134 | ssh_port=$2; shift 2
135 | ;;
136 | --)
137 | shift
138 | ;;
139 | *)
140 | echo "${CWARNING}ERROR: unknown argument! ${CEND}" && Show_Help && exit 1
141 | ;;
142 | esac
143 | done
144 |
145 | if [ ${ARG_NUM} == 0 ]; then
146 | #Select Mode
147 | while :; do echo
148 | echo 'Please Select FFMPEG Install Mode: '
149 | echo -e "\t${CMSG}1${CEND}. [SW] CPU Mode (Default)"
150 | echo -e "\t${CMSG}2${CEND}. [HW] Intel GPU Mode"
151 | echo -e "\t${CMSG}3${CEND}. [HW] Nvidia GPU Mode"
152 | read -e -p "Please input a number:(Default 1 press Enter) " mode
153 | mode=${mode:-1}
154 | if [[ ! ${mode} =~ ^[1-3]$ ]]; then
155 | echo "${CWARNING}input error! Please only input number 1~3${CEND}"
156 | else
157 | break
158 | fi
159 | done
160 | fi
161 | # ARG_NUM END
162 |
163 |
164 | # Install Process
165 | if [ "${memcached_flag}" == 'y' ]; then
166 | echo -e "";
167 | fi
168 |
169 | _Install_nv_header | tee -a ${install_dir}/installer.log
170 | _Install_nv_cuda | tee -a ${install_dir}/installer.log
171 | _Install_nasm | tee -a ${install_dir}/installer.log
172 | _Install_yasm | tee -a ${install_dir}/installer.log
173 | _Install_libsrt | tee -a ${install_dir}/installer.log
174 | _Install_libass | tee -a ${install_dir}/installer.log
175 | _Install_libaribb24 | tee -a ${install_dir}/installer.log
176 | _Install_liba52dec | tee -a ${install_dir}/installer.log
177 | _Install_libaacenc | tee -a ${install_dir}/installer.log
178 | _Install_libamrnb | tee -a ${install_dir}/installer.log
179 | _Install_libamrwb | tee -a ${install_dir}/installer.log
180 | _Install_libamrwbenc | tee -a ${install_dir}/installer.log
181 | _Install_libopencoreamr | tee -a ${install_dir}/installer.log
182 | _Install_libao | tee -a ${install_dir}/installer.log
183 | _Install_libdav1d | tee -a ${install_dir}/installer.log
184 | _Install_libfaad2 | tee -a ${install_dir}/installer.log
185 | _Install_libfdkaac | tee -a ${install_dir}/installer.log
186 | _Install_libflac | tee -a ${install_dir}/installer.log
187 | _Install_libfishsound | tee -a ${install_dir}/installer.log
188 | _Install_libkvazaar | tee -a ${install_dir}/installer.log
189 | _Install_liblame | tee -a ${install_dir}/installer.log
190 | _Install_libneroaacenc | tee -a ${install_dir}/installer.log
191 | _Install_libogg | tee -a ${install_dir}/installer.log
192 | _Install_liboggz | tee -a ${install_dir}/installer.log
193 | _Install_libopus | tee -a ${install_dir}/installer.log
194 | _Install_libsoxr | tee -a ${install_dir}/installer.log
195 | _Install_libspeex | tee -a ${install_dir}/installer.log
196 | _Install_libcelt | tee -a ${install_dir}/installer.log
197 | _Install_libgsm | tee -a ${install_dir}/installer.log
198 | _Install_libtheora | tee -a ${install_dir}/installer.log
199 | _Install_libvid | tee -a ${install_dir}/installer.log
200 | _Install_libvorbis | tee -a ${install_dir}/installer.log
201 | _Install_libvorbistools | tee -a ${install_dir}/installer.log
202 | _Install_libzimg | tee -a ${install_dir}/installer.log
203 | _Install_libwebp | tee -a ${install_dir}/installer.log
204 | _Install_libwmf | tee -a ${install_dir}/installer.log
205 | _Install_libuavs3d | tee -a ${install_dir}/installer.log
206 | _Install_libxvid | tee -a ${install_dir}/installer.log
207 | _Install_libvpx | tee -a ${install_dir}/installer.log
208 | _Install_libaom | tee -a ${install_dir}/installer.log
209 | _Install_libx264 | tee -a ${install_dir}/installer.log
210 | _Install_libx265 | tee -a ${install_dir}/installer.log
211 | _Install_ffmpeg | tee -a ${install_dir}/installer.log
212 |
213 | echo -e "Created Soft Links"
214 | ln -sf /usr/local/ffmpegtoolkit/bin/ffmpeg /bin/ffmpeg
215 | ln -sf /usr/local/ffmpegtoolkit/bin/ffprobe /bin/ffprobe
216 | ln -sf /usr/local/ffmpegtoolkit/bin/qt-faststart /bin/qt-faststart
217 | ln -sf /usr/local/ffmpegtoolkit/bin/neroAacEnc /bin/neroAacEnc
218 | ln -sf /usr/local/ffmpegtoolkit/bin/x264 /usr/local/bin/x264
219 | ln -sf /usr/local/ffmpegtoolkit/bin/x265 /usr/local/bin/x265
220 | #ldconfig -vvvv
221 | which {ffmpeg,ffprobe,qt-faststart,mediainfo,neroAacEnc,identify,convert,composite}
222 | endTime=$(date +%s)
223 | ((installTime = ($endTime - $startTime) / 60))
224 | echo "####################Congratulations########################"
225 | echo "Deployed total time: ${CQUESTION}${installTime}${CEND} minutes"
226 | echo -e "Install Done"!
227 |
--------------------------------------------------------------------------------
/versions.txt:
--------------------------------------------------------------------------------
1 | # Versions Define
2 | CORE_VER=2.1
3 | NASM_VER=2.14.02
4 | YASM_VER=1.3.0
5 | LIBASS_VER=0.14.0
6 | LIBA52DEC_VER=0.7.4
7 | AMRWB_VER=11.0.0.0
8 | AMRNB_VER=11.0.0.0
9 | LIBAO_VER=1.2.0
10 | LIBWMF_VER=0.2.8.4
11 | SPEEX_VER=1.2.0
12 | FLAC_VER=1.3.2
13 | LAME_VER=3.100
14 | OPUS_VER=1.3
15 | OGG_VER=1.3.5
16 | LIBOGGZ_VER=1.1.1
17 | VORBIS_VER=1.4.0
18 | LIBVORBIS_VER=1.3.6
19 | AMRWBENC_VER=0.1.3
20 | OPENCOREAMR_VER=0.1.5
21 | LIBTHEORA_VER="1.2.0alpha1"
22 | LIBFISHSOUND_VER=1.0.0
23 | LIBSOXR_VER=0.1.3
24 | LIBWEBP_VER=1.1.0
25 | XVIDCORE_VER=1.3.5
26 |
--------------------------------------------------------------------------------
/vultr/version.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | set -eox pipefail
4 |
5 | # Get version
6 | shopt -s xpg_echo
7 | VERSION=`cat /etc/centos-release | sed -e "s/'//g" | sed -e 's/"//g'`
8 |
9 | # Echo Version
10 | echo "'OS: ${VERSION}'"
11 |
--------------------------------------------------------------------------------
/vultr/vultr_app.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | ###################################################################
4 | ## Vultr Marketplace Helper Functions
5 |
6 | function error_detect_on() {
7 | set -euo pipefail
8 | }
9 |
10 | function error_detect_off() {
11 | set +euo pipefail
12 | }
13 |
14 | function enable_verbose_commands() {
15 | set -x pipefail
16 | }
17 |
18 | function disable_verbose_commands() {
19 | set +x pipefail
20 | }
21 |
22 | function get_hostname() {
23 | HOSTNAME=$(curl --fail -s "http://169.254.169.254/latest/meta-data/hostname")
24 | echo "${HOSTNAME}"
25 | }
26 |
27 | function get_userdata() {
28 | USERDATA=$(curl --fail -s "http://169.254.169.254/latest/user-data")
29 | echo "${USERDATA}"
30 | }
31 |
32 | function get_sshkeys() {
33 | KEYS=$(curl --fail -s "http://169.254.169.254/current/ssh-keys")
34 | echo "${KEYS}"
35 | }
36 |
37 | function get_var() {
38 | local val="$(curl --fail -s -H "Metadata-Token: vultr" http://169.254.169.254/v1/internal/app-${1} 2>/dev/null)"
39 |
40 | local __result=$1
41 | eval $__result="'${val}'"
42 | }
43 |
44 | function get_ip
45 | {
46 | local val="$(curl --fail -s -H "Metadata-Token: vultr" http://169.254.169.254/v1/internal/meta-data/meta-data/public-ipv4 2>/dev/null)"
47 |
48 | local __result=$1
49 | eval $__result="'${val}'"
50 | }
51 |
52 | function wait_on_apt_lock() {
53 | DPKG_ID=$(lsof -t /var/lib/dpkg/lock) || true
54 | APT_ID=$(lsof -t /var/lib/apt/lists/lock) || true
55 | CACHE_ID=$(lsof -t /var/cache/apt/archives/lock) || true
56 | until [[ "${DPKG_ID}${APT_ID}${CACHE_ID}" == "" ]]
57 | do
58 | echo "Waiting for apt lock held by: [${DPKG_ID}-${APT_ID}-${CACHE_ID}]"
59 | sleep 3
60 | DPKG_ID=$(lsof -t /var/lib/dpkg/lock) || true
61 | APT_ID=$(lsof -t /var/lib/apt/lists/lock) || true
62 | CACHE_ID=$(lsof -t /var/cache/apt/archives/lock) || true
63 | done
64 | echo "/var/lib/dpkg/lock is unlocked."
65 | echo "/var/lib/apt/lists/lock is unlocked."
66 | echo "/var/cache/apt/archives/lock is unlocked."
67 | }
68 |
69 | function apt_safe() {
70 | wait_on_apt_lock
71 | apt install -y $@
72 | }
73 |
74 | function apt_update_safe() {
75 | wait_on_apt_lock
76 | apt update -y
77 | }
78 |
79 | function apt_upgrade_safe() {
80 | wait_on_apt_lock
81 | DEBIAN_FRONTEND=noninteractive apt upgrade -y
82 | }
83 |
84 | function apt_remove_safe() {
85 | wait_on_apt_lock
86 | apt remove -y $@ --auto-remove
87 | }
88 |
89 | function apt_clean_safe() {
90 | wait_on_apt_lock
91 | apt autoremove -y
92 |
93 | wait_on_apt_lock
94 | apt autoclean -y
95 | }
96 |
97 | function update_and_clean_packages() {
98 |
99 | # RHEL/CentOS
100 | if [[ -f /etc/redhat-release ]]; then
101 | yum update -y
102 | yum clean all
103 | # Ubuntu / Debian
104 | elif [[ "$(grep -c "debian" /etc/os-release)" != "0" ]]; then
105 | apt_update_safe
106 | apt_upgrade_safe
107 | apt_clean_safe
108 | fi
109 | }
110 |
111 | function set_vultr_kernel_option() {
112 | # RHEL/CentOS
113 | if [[ -f /etc/redhat-release ]]; then
114 | /sbin/grubby --update-kernel=ALL --args vultr
115 | # Ubuntu / Debian
116 | elif [[ "$(grep -c "ID=debian" /etc/os-release)" != "0" ]]; then
117 | sed -i "/^GRUB_CMDLINE_LINUX_DEFAULT=/ s/\"$/ vultr\"/" /etc/default/grub
118 | update-grub
119 | fi
120 | }
121 |
122 | function install_cloud_init() {
123 |
124 | if [ -x "$(command -v cloud-init)" ]; then
125 | echo "cloud-init is already installed."
126 | return
127 | fi
128 |
129 | update_and_clean_packages
130 |
131 | if [[ -f /etc/redhat-release ]]; then
132 | BUILD="rhel"
133 | DIST="rpm"
134 | fi
135 |
136 | if [[ "$(grep -c "ID=ubuntu" /etc/os-release)" != "0" ]]; then
137 | BUILD="universal"
138 | DIST="deb";
139 | fi
140 |
141 | if [[ "$(grep -c "ID=debian" /etc/os-release)" != "0" ]]; then
142 | BUILD="debian"
143 | DIST="deb";
144 | fi
145 |
146 | if [[ "${DIST}" == "" ]]; then
147 | echo "Undetected OS, please install from source!"
148 | exit 255
149 | fi
150 |
151 | RELEASE=$1
152 |
153 | if [[ "${RELEASE}" == "" ]]; then
154 | RELEASE="latest"
155 | fi
156 |
157 | if [[ "${RELEASE}" != "latest" ]] && [[ "${RELEASE}" != "nightly" ]]; then
158 | echo "${RELEASE} is an invalid release option. Allowed: latest, nightly"
159 | exit 255
160 | fi
161 |
162 | # Lets remove all traces of previously installed cloud-init
163 | # Ubuntu installs have proven problematic with their left over
164 | # configs for the installer in recent versions
165 | cleanup_cloudinit || true
166 |
167 | wget https://ewr1.vultrobjects.com/cloud_init_beta/cloud-init_${BUILD}_${RELEASE}.${DIST} -O /tmp/cloud-init_${BUILD}_${RELEASE}.${DIST}
168 |
169 | if [[ "${DIST}" == "rpm" ]]; then
170 | yum install -y /tmp/cloud-init_${BUILD}_${RELEASE}.${DIST}
171 | elif [[ "${DIST}" == "deb" ]]; then
172 | apt_safe /tmp/cloud-init_${BUILD}_${RELEASE}.${DIST}
173 | fi
174 |
175 | rm -f /tmp/cloud-init_${BUILD}_${RELEASE}.${DIST}
176 | }
177 |
178 | function cleanup_cloudinit() {
179 | rm -rf /etc/cloud
180 | rm -rf /etc/systemd/system/cloud-init.target.wants/*
181 | rm -rf /usr/src/cloud*
182 | rm -rf /usr/local/bin/cloud*
183 | rm -rf /usr/bin/cloud*
184 | rm -rf /usr/lib/cloud*
185 | rm -rf /usr/local/bin/cloud*
186 | rm -rf /lib/systemd/system/cloud*
187 | rm -rf /var/lib/cloud
188 | rm -rf /var/log/cloud*
189 | rm -rf /run/cloud-init
190 | }
191 |
192 | function clean_tmp() {
193 | mkdir -p /tmp
194 | chmod 1777 /tmp
195 | rm -rf /tmp/*
196 | rm -rf /var/tmp/*
197 | }
198 |
199 | function clean_keys() {
200 | rm -f /root/.ssh/authorized_keys /etc/ssh/*key*
201 | touch /etc/ssh/revoked_keys
202 | chmod 600 /etc/ssh/revoked_keys
203 | }
204 |
205 | function clean_logs() {
206 | find /var/log -mtime -1 -type f -exec truncate -s 0 {} \;
207 | rm -rf /var/log/*.gz
208 | rm -rf /var/log/*.[0-9]
209 | rm -rf /var/log/*.log
210 | rm -rf /var/log/lastlog
211 | rm -rf /var/log/wtmp
212 | echo "" >/var/log/auth.log
213 | }
214 |
215 | function clean_history() {
216 | history -c
217 | echo "" > /root/.bash_history
218 | unset HISTFILE
219 | }
220 |
221 | function clean_mloc() {
222 | /usr/bin/updatedb
223 | }
224 |
225 | function clean_random() {
226 | rm -f /var/lib/systemd/random-seed
227 | }
228 |
229 | function clean_machine_id() {
230 | rm -f /etc/machine-id
231 | touch /etc/machine-id
232 | }
233 |
234 | function clean_free_space() {
235 | dd if=/dev/zero of=/zerofile
236 | sync
237 | rm -f /zerofile
238 | sync
239 | }
240 |
241 | function trim_ssd() {
242 | fstrim /
243 | }
244 |
245 | function cleanup_marketplace_scripts() {
246 | rm -f /root/*.sh
247 | }
248 |
249 | function disable_network_manager() {
250 | ## Disable NetworkManager, replace with network-scripts
251 | systemctl stop NetworkManager
252 | systemctl disable NetworkManager
253 | sed -i 's/^ONBOOT.*/ONBOOT=yes/g' /etc/sysconfig/network-scripts/ifcfg-*
254 | sed -i 's/^NM_CONTROLLED.*/NM_CONTROLLED=no/g' /etc/sysconfig/network-scripts/ifcfg-*
255 | yum install -y network-scripts
256 | }
257 |
258 | function clean_system() {
259 |
260 | update_and_clean_packages
261 | set_vultr_kernel_option
262 | clean_tmp
263 | clean_keys
264 | clean_logs
265 | clean_history
266 | clean_random
267 | clean_machine_id
268 |
269 | clean_mloc || true
270 | clean_free_space || true
271 | trim_ssd || true
272 |
273 | cleanup_marketplace_scripts
274 | }
275 |
--------------------------------------------------------------------------------
/vultr_app.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | ###################################################################
4 | ## Vultr Marketplace Helper Functions
5 |
6 | function error_detect_on() {
7 | set -euo pipefail
8 | }
9 |
10 | function error_detect_off() {
11 | set +euo pipefail
12 | }
13 |
14 | function enable_verbose_commands() {
15 | set -x pipefail
16 | }
17 |
18 | function disable_verbose_commands() {
19 | set +x pipefail
20 | }
21 |
22 | function get_hostname() {
23 | HOSTNAME=$(curl --fail -s "http://169.254.169.254/latest/meta-data/hostname")
24 | echo "${HOSTNAME}"
25 | }
26 |
27 | function get_userdata() {
28 | USERDATA=$(curl --fail -s "http://169.254.169.254/latest/user-data")
29 | echo "${USERDATA}"
30 | }
31 |
32 | function get_sshkeys() {
33 | KEYS=$(curl --fail -s "http://169.254.169.254/current/ssh-keys")
34 | echo "${KEYS}"
35 | }
36 |
37 | function get_var() {
38 | local val="$(curl --fail -s -H "Metadata-Token: vultr" http://169.254.169.254/v1/internal/app-${1} 2>/dev/null)"
39 |
40 | local __result=$1
41 | eval $__result="'${val}'"
42 | }
43 |
44 | function get_ip
45 | {
46 | local val="$(curl --fail -s -H "Metadata-Token: vultr" http://169.254.169.254/v1/internal/meta-data/meta-data/public-ipv4 2>/dev/null)"
47 |
48 | local __result=$1
49 | eval $__result="'${val}'"
50 | }
51 |
52 | function wait_on_apt_lock() {
53 | DPKG_ID=$(lsof -t /var/lib/dpkg/lock) || true
54 | APT_ID=$(lsof -t /var/lib/apt/lists/lock) || true
55 | CACHE_ID=$(lsof -t /var/cache/apt/archives/lock) || true
56 | until [[ "${DPKG_ID}${APT_ID}${CACHE_ID}" == "" ]]
57 | do
58 | echo "Waiting for apt lock held by: [${DPKG_ID}-${APT_ID}-${CACHE_ID}]"
59 | sleep 3
60 | DPKG_ID=$(lsof -t /var/lib/dpkg/lock) || true
61 | APT_ID=$(lsof -t /var/lib/apt/lists/lock) || true
62 | CACHE_ID=$(lsof -t /var/cache/apt/archives/lock) || true
63 | done
64 | echo "/var/lib/dpkg/lock is unlocked."
65 | echo "/var/lib/apt/lists/lock is unlocked."
66 | echo "/var/cache/apt/archives/lock is unlocked."
67 | }
68 |
69 | function apt_safe() {
70 | wait_on_apt_lock
71 | apt install -y $@
72 | }
73 |
74 | function apt_update_safe() {
75 | wait_on_apt_lock
76 | apt update -y
77 | }
78 |
79 | function apt_upgrade_safe() {
80 | wait_on_apt_lock
81 | DEBIAN_FRONTEND=noninteractive apt upgrade -y
82 | }
83 |
84 | function apt_remove_safe() {
85 | wait_on_apt_lock
86 | apt remove -y $@ --auto-remove
87 | }
88 |
89 | function apt_clean_safe() {
90 | wait_on_apt_lock
91 | apt autoremove -y
92 |
93 | wait_on_apt_lock
94 | apt autoclean -y
95 | }
96 |
97 | function update_and_clean_packages() {
98 |
99 | # RHEL/CentOS
100 | if [[ -f /etc/redhat-release ]]; then
101 | yum update -y
102 | yum clean all
103 | # Ubuntu / Debian
104 | elif [[ "$(grep -c "debian" /etc/os-release)" != "0" ]]; then
105 | apt_update_safe
106 | apt_upgrade_safe
107 | apt_clean_safe
108 | fi
109 | }
110 |
111 | function set_vultr_kernel_option() {
112 | # RHEL/CentOS
113 | if [[ -f /etc/redhat-release ]]; then
114 | /sbin/grubby --update-kernel=ALL --args vultr
115 | # Ubuntu / Debian
116 | elif [[ "$(grep -c "ID=debian" /etc/os-release)" != "0" ]]; then
117 | sed -i "/^GRUB_CMDLINE_LINUX_DEFAULT=/ s/\"$/ vultr\"/" /etc/default/grub
118 | update-grub
119 | fi
120 | }
121 |
122 | function install_cloud_init() {
123 |
124 | if [ -x "$(command -v cloud-init)" ]; then
125 | echo "cloud-init is already installed."
126 | return
127 | fi
128 |
129 | update_and_clean_packages
130 |
131 | if [[ -f /etc/redhat-release ]]; then
132 | BUILD="rhel"
133 | DIST="rpm"
134 | fi
135 |
136 | if [[ "$(grep -c "ID=ubuntu" /etc/os-release)" != "0" ]]; then
137 | BUILD="universal"
138 | DIST="deb";
139 | fi
140 |
141 | if [[ "$(grep -c "ID=debian" /etc/os-release)" != "0" ]]; then
142 | BUILD="debian"
143 | DIST="deb";
144 | fi
145 |
146 | if [[ "${DIST}" == "" ]]; then
147 | echo "Undetected OS, please install from source!"
148 | exit 255
149 | fi
150 |
151 | RELEASE=$1
152 |
153 | if [[ "${RELEASE}" == "" ]]; then
154 | RELEASE="latest"
155 | fi
156 |
157 | if [[ "${RELEASE}" != "latest" ]] && [[ "${RELEASE}" != "nightly" ]]; then
158 | echo "${RELEASE} is an invalid release option. Allowed: latest, nightly"
159 | exit 255
160 | fi
161 |
162 | # Lets remove all traces of previously installed cloud-init
163 | # Ubuntu installs have proven problematic with their left over
164 | # configs for the installer in recent versions
165 | cleanup_cloudinit || true
166 |
167 | wget https://ewr1.vultrobjects.com/cloud_init_beta/cloud-init_${BUILD}_${RELEASE}.${DIST} -O /tmp/cloud-init_${BUILD}_${RELEASE}.${DIST}
168 |
169 | if [[ "${DIST}" == "rpm" ]]; then
170 | yum install -y /tmp/cloud-init_${BUILD}_${RELEASE}.${DIST}
171 | elif [[ "${DIST}" == "deb" ]]; then
172 | apt_safe /tmp/cloud-init_${BUILD}_${RELEASE}.${DIST}
173 | fi
174 |
175 | rm -f /tmp/cloud-init_${BUILD}_${RELEASE}.${DIST}
176 | }
177 |
178 | function cleanup_cloudinit() {
179 | rm -rf /etc/cloud
180 | rm -rf /etc/systemd/system/cloud-init.target.wants/*
181 | rm -rf /usr/src/cloud*
182 | rm -rf /usr/local/bin/cloud*
183 | rm -rf /usr/bin/cloud*
184 | rm -rf /usr/lib/cloud*
185 | rm -rf /usr/local/bin/cloud*
186 | rm -rf /lib/systemd/system/cloud*
187 | rm -rf /var/lib/cloud
188 | rm -rf /var/log/cloud*
189 | rm -rf /run/cloud-init
190 | }
191 |
192 | function clean_tmp() {
193 | mkdir -p /tmp
194 | chmod 1777 /tmp
195 | rm -rf /tmp/*
196 | rm -rf /var/tmp/*
197 | }
198 |
199 | function clean_keys() {
200 | rm -f /root/.ssh/authorized_keys /etc/ssh/*key*
201 | touch /etc/ssh/revoked_keys
202 | chmod 600 /etc/ssh/revoked_keys
203 | }
204 |
205 | function clean_logs() {
206 | find /var/log -mtime -1 -type f -exec truncate -s 0 {} \;
207 | rm -rf /var/log/*.gz
208 | rm -rf /var/log/*.[0-9]
209 | rm -rf /var/log/*.log
210 | rm -rf /var/log/lastlog
211 | rm -rf /var/log/wtmp
212 | echo "" >/var/log/auth.log
213 | }
214 |
215 | function clean_history() {
216 | history -c
217 | echo "" > /root/.bash_history
218 | unset HISTFILE
219 | }
220 |
221 | function clean_mloc() {
222 | /usr/bin/updatedb
223 | }
224 |
225 | function clean_random() {
226 | rm -f /var/lib/systemd/random-seed
227 | }
228 |
229 | function clean_machine_id() {
230 | rm -f /etc/machine-id
231 | touch /etc/machine-id
232 | }
233 |
234 | function clean_free_space() {
235 | dd if=/dev/zero of=/zerofile
236 | sync
237 | rm -f /zerofile
238 | sync
239 | }
240 |
241 | function trim_ssd() {
242 | fstrim /
243 | }
244 |
245 | function cleanup_marketplace_scripts() {
246 | rm -f /root/*.sh
247 | }
248 |
249 | function disable_network_manager() {
250 | ## Disable NetworkManager, replace with network-scripts
251 | systemctl stop NetworkManager
252 | systemctl disable NetworkManager
253 | sed -i 's/^ONBOOT.*/ONBOOT=yes/g' /etc/sysconfig/network-scripts/ifcfg-*
254 | sed -i 's/^NM_CONTROLLED.*/NM_CONTROLLED=no/g' /etc/sysconfig/network-scripts/ifcfg-*
255 | yum install -y network-scripts
256 | }
257 |
258 | function clean_system() {
259 |
260 | update_and_clean_packages
261 | set_vultr_kernel_option
262 | clean_tmp
263 | clean_keys
264 | clean_logs
265 | clean_history
266 | clean_random
267 | clean_machine_id
268 |
269 | clean_mloc || true
270 | clean_free_space || true
271 | trim_ssd || true
272 |
273 | cleanup_marketplace_scripts
274 | }
275 |
--------------------------------------------------------------------------------