├── .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 | --------------------------------------------------------------------------------