Browse Source

base init script

gemer 4 years ago
commit
45da5a26d8

+ 1 - 0
.vagrant/bundler/global.sol

@@ -0,0 +1 @@
+{"dependencies":[["vagrant-proxyconf",["= 2.0.10"]]],"checksum":"e708fcab66abd82f4f40e5185a4a3804a328777a5a19f6d25a63ae78acd962ff","vagrant_version":"2.2.14"}

+ 1 - 0
.vagrant/machines/default/virtualbox/action_provision

@@ -0,0 +1 @@
+1.5:b0a35fd8-05be-4f82-866c-df4089bd0b62

+ 1 - 0
.vagrant/machines/default/virtualbox/action_set_name

@@ -0,0 +1 @@
+1611136248

+ 1 - 0
.vagrant/machines/default/virtualbox/box_meta

@@ -0,0 +1 @@
+{"name":"bento/ubuntu-14.04","version":"201808.24.0","provider":"virtualbox","directory":"boxes/bento-VAGRANTSLASH-ubuntu-14.04/201808.24.0/virtualbox"}

+ 1 - 0
.vagrant/machines/default/virtualbox/creator_uid

@@ -0,0 +1 @@
+501

+ 1 - 0
.vagrant/machines/default/virtualbox/id

@@ -0,0 +1 @@
+b0a35fd8-05be-4f82-866c-df4089bd0b62

+ 1 - 0
.vagrant/machines/default/virtualbox/index_uuid

@@ -0,0 +1 @@
+9a5be50d099048e68d25a5ff488df49c

+ 27 - 0
.vagrant/machines/default/virtualbox/private_key

@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEowIBAAKCAQEA0+0jjIee+9URLieKzBVUzLyu980/i7lWozmwgVODcfudjdGZ
+NaKDRXqeft+PTm07fhuH+5cmlgocUgrWxKW8zxeOMdgt+EaCkaiGtUDQjoFzDCPJ
+OTySGQmNeYCkkmdk3YpTAuUneHBno0mmTHYNEoarbjgVAbOPKOYDU8RPCzg2ny1W
+TLalmUh5bhku8sutsy/p4Q0sOoCYohg3XZeDgUKXJl69ICmDn2GPeqEMGdUv41Ug
+O6iizvdW+Xva8sZWDGbXj1q2UKcDKv8hi9d71rnE5J0X+haqdeVb5Uhb3LN/9/EL
+jUA9kqLlSFRa3KhK7X+HQVTSq7LCckesl9kxYwIDAQABAoIBACzn//NkPYUBZg2Q
+pXGPR5PGm5C4tjFmSXx22fbdemnptj353uwljolnbTRXLOeib8vOC6d9JNkANXYR
+A+dRc0uyoxfexgbo8fvpaPn5TPgVaAp3fskZE6AojQjlAHphXFcxW1uusQltUBii
+n5FuJmD5llPZoGHm6XvyGVxjqZgnoxeMG6L4dj47dLPQB+GfT5lVcoQwPrtNUYgR
+QwYYCKbHGCEvjMSuK6XPDdP+r8Yn+E6/QHboPYYddoZuPxaU3LtwOOGxNEvRENv7
++ZP9FOf9+QmvZA+LykHmpWS6a0DDM48RnG+utKNZAcgPe7PEf+XiYK6ldDUGq/Lj
+p6p4p7kCgYEA/sGm20OrrsL4bC9bjfyt6/MOq7WlLn6EpvWFrl+ed0nwlSo7lw4t
+RSPbb8gET0KhNsr3bGHpI3l4ubZk+p93rNLaLwmnVHdmVBM8pvKsKDmocUpu6KOT
+vfC+dNV9nPNq8Ab1ulDKvoR6dv7M7vI10hvb4ymNMd3kunqVflIm778CgYEA1PX3
+PbiAKreuGxWeRv0sUOaoORtV8ftAHi+za6y2ZKsX/v5Mz8FyM0/EEglt5luo4Emc
+2vJ+Gi1hn5rvGn1NTz2M8oUb9h3zj1kAoTNqwv5Ukzne4mS6KEWlmPdZ7UoE9P6L
+3xWT9m+qIjTuyceaKuhYb6oqa96ei1cHNXpSJ10CgYEAp+KMiFDnMitQtVLcPgz3
+vNeXonb5XVOJLdH9f/WJo8k5X8POM3TnRnoj4V1p4aXiQg6t0WIQ1wz1D0Xw8+zl
+XCI0IO12tUZeTCfFP6wK4hNlOwu3XV53PaQKj0omFqmfnoCnrVoS0kzRu9ucyBcc
+etNbLC+02dkGJBImtHGFMVcCgYA4nZd4SieQs7pOqwWkG8R/UYLhg7nqlgAqxkWt
+14G56556hQLIrMX+jDM1FFqqRi30Sr2vm44YyX3Nn7P3V96ItXVWODsByF6q+l9n
+e7LjWhgD9/ugNmUjNbjbnM7Efcwpkc5/pU3r0y3o4CenbzA2PgTc0uFqQgnmQ2HA
+Pt++ZQKBgAn9fGOzOlcecCh9SGJBKtXU80T2PMiRM/ZfGLwHBB/367I9QzR18l77
+zaB6jLqfwc16Zk13GLSI3b1ZbQdMwr4rjEUnsqQmv7yLETUinhsM2L8SxXzHPvdY
+vnscePehjErqDlTyD727fowMCJ3M7hApvqYML2RLyMz+6Gixm0jS
+-----END RSA PRIVATE KEY-----

+ 1 - 0
.vagrant/machines/default/virtualbox/synced_folders

@@ -0,0 +1 @@
+{"rsync":{"/vagrant":{"type":"rsync","guestpath":"/vagrant","hostpath":"/Users/gemer/GEM/4DAge/4dage-ffmpeg","disabled":false,"__vagrantfile":true,"owner":"vagrant","group":"vagrant"}}}

+ 1 - 0
.vagrant/machines/default/virtualbox/vagrant_cwd

@@ -0,0 +1 @@
+/Users/gemer/GEM/4DAge/4dage-ffmpeg

+ 9 - 0
.vagrant/rgloader/loader.rb

@@ -0,0 +1,9 @@
+# This file loads the proper rgloader/loader.rb file that comes packaged
+# with Vagrant so that encoded files can properly run with Vagrant.
+
+if ENV["VAGRANT_INSTALLER_EMBEDDED_DIR"]
+  require File.expand_path(
+    "rgloader/loader", ENV["VAGRANT_INSTALLER_EMBEDDED_DIR"])
+else
+  raise "Encoded files can't be read outside of the Vagrant installer."
+end

+ 212 - 0
4dage-ffmpeg.sh

@@ -0,0 +1,212 @@
+#!/bin/bash
+
+videoFile=''
+audioFile=''
+outputName=''
+outputFolder=''
+tempFolder=/tmp/4dage-ffmpeg
+tempFilePrefix='4dage-source'
+declare -a outputVideoList=('mp4 flv')
+red=$(tput setaf 1)
+green=$(tput setaf 2)
+reset=$(tput sgr0)
+
+print_usage() {
+    echo -e "\033[43;34m $package - 4dage custom version for ffmpeg: \033[0m"
+    echo -e "${green}If have problem with this, please contact with gemer AKA: 张宇鹏<zhangyupeng@cgaii.com>"
+    echo "$package [options] application [arguments]"
+    echo " "
+    echo "${red}options:"
+    echo "-h, --help                show brief help"
+    echo "-s, --source=source file path       input the video source path"
+    echo "-a, --audio=audio file path       audio file path"
+    echo "-n, --name=output file name       output file name"
+    echo "-o, --output=DIR      specify a directory to store output in"
+    echo " "
+    echo -ne "\033[0;33m"
+    cat <<EOF
+                                  _oo0oo_
+                                 088888880
+                                 88" . "88
+                                 (| -_- |)
+                                  0\ = /0
+                               ___/'---'\___
+                             .' \\\\|     |// '.
+                            / \\\\|||  :  |||// \\
+                           /_ ||||| -:- |||||- \\
+                          |   | \\\\\\  -  /// |   |
+                          | \_|  ''\---/''  |_/ |
+                          \  .-\__  '-'  __/-.  /
+                        ___'. .'  /--.--\  '. .'___
+                     ."" '<  '.___\_<|>_/___.' >'  "".
+                    | | : '-  \'.;'\ _ /';.'/ - ' : | |
+                    \  \ '_.   \_ __\ /__ _/   .-' /  /
+                ====='-.____'.___ \_____/___.-'____.-'=====
+                                  '=---='
+   
+   
+              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+                        佛祖保佑    TTT    万无一失
+EOF
+    echo -ne "\033[m"
+}
+make_temp_dir() {
+    # # Make a temp folder
+    if [ ! -d $tempFolder ]; then
+        mkdir -p $tempFolder && chmod 776 $tempFolder
+    fi
+}
+make_temp_dir
+
+while test $# -gt 0; do
+    case "$1" in
+    -h | --help)
+        print_usage
+        exit 0
+        ;;
+    -s)
+        shift
+        if test $# -gt 0; then
+
+            export videoFile=$1
+        else
+            echo "{$red}no video path specified"
+            exit 1
+        fi
+        shift
+        ;;
+    --source*)
+        export videoFile=$(echo $1 | sed -e 's/^[^=]*=//g')
+        echo $1
+        shift
+        ;;
+    -a)
+        shift
+        if test $# -gt 0; then
+            export audioFile=$1
+        else
+
+            echo "{$red}no audioFile specified"
+            exit 1
+        fi
+        shift
+        ;;
+    --audio*)
+        export audioFile=$(echo $1 | sed -e 's/^[^=]*=//g')
+        shift
+        ;;
+    -o)
+        shift
+        if test $# -gt 0; then
+            export outputFolder=$1
+        else
+            echo "{$red}no output dir folder specified"
+            exit 1
+        fi
+        shift
+        ;;
+    --output*)
+        export outputFolder=$(echo $1 | sed -e 's/^[^=]*=//g')
+        shift
+        ;;
+    -n)
+        shift
+        if test $# -gt 0; then
+            export outputName=$1
+        else
+            echo "no output video name specified"
+            exit 1
+        fi
+        shift
+        ;;
+    --name*)
+        export outputName=$(echo $1 | sed -e 's/^[^=]*=//g')
+        shift
+        ;;
+    *)
+        print_usage
+        # echo "111"
+        break
+        ;;
+    esac
+done
+
+covertVideoTask() {
+    videoFileType=${videoFile##*.}
+    audioFileType=${audioFile##*.}
+    tempbaseAudio="$tempFolder/$tempFilePrefix-base.$audioFileType"
+    tempAudio="$tempFolder/$tempFilePrefix.$audioFileType"
+    tempVideo="$tempFolder/$tempFilePrefix.$videoFileType"
+    # FFREPORT=file="$outputFolder/audio.log":level=32 ffmpeg -i $tempAudio -filter_complex 'lv2=plugin=https\\://github.com/lucianodato/speech-denoiser' $tempAudio -y
+    FFREPORT=file="$outputFolder/$outputName.audio.log":level=32 ffmpeg -i $audioFile -af "lv2=p=https\\\\://github.com/lucianodato/speech-denoiser" -ac 1 $tempAudio -y
+    RC=$?
+    if [ "${RC}" -ne "0" ]; then
+        FFREPORT=file="$outputFolder/$outputName.audio.log":level=32 ffmpeg -i $audioFile -af "highpass=f=200, lowpass=f=3000" $tempAudio -y
+    fi
+    ffmpeg -i $videoFile -i $tempAudio -c:v copy -c:a aac $tempVideo -y
+    FFREPORT=file="$outputFolder/$outputName.$videoFileType.log":level=32 ffmpeg -i $tempVideo -s 1056x792 -c:v libx264 -profile:v high -level:v 4.0 -movflags faststart -bf 2 -c:a copy "$outputFolder/$outputName.$videoFileType" -y
+    FFREPORT=file="$outputFolder/$outputName.flv.log":level=32 ffmpeg -i $tempVideo -s 1056x792 -c:v libx264 -profile:v high -level:v 4.0 -movflags faststart -bf 2 -c:a copy "$outputFolder/$outputName.flv" -y
+    # ffmpeg -i $tempVideo -s 1056x792 -c:v libx265 -movflags faststart -bf 2 -c:a copy "$outputFolder/$outputName.265.$videoFileType" -y
+
+    rm $tempAudio $tempVideo
+}
+
+if [ ! -z $videoFile ] && [ ! -z $audioFile ] && [ ! -z $outputName ] && [ ! -z $outputFolder ]; then
+    # ffmpeg -i $audioFile -af "highpass=f=200, lowpass=f=3000" temp.mp3 -y
+    # ffmpeg -i $audioFile -filter_complex 'lv2=plugin=https\\://github.com/lucianodato/speech-denoiser' $tempAudio -y
+    # ffmpeg -i $videoFile -i $tempAudio -c:v copy -c:a aac $tempVideo -y
+    # ffmpeg -i $tempVideo -s 1056x792 -c:v libx264 -profile:v high -level:v 4.0 -movflags faststart -bf 2 -c:a copy $outputFolder/$outputName.$i -y
+    # for i in "${outputVideoList[@]}"; do
+    # done
+    # ffmpeg -i temp.mp4 -s 1056x792 -c:v libx264 -profile:v high -level:v 4.0 -movflags faststart -bf 2 -c:a copy temp1.mp4 -y
+    # ffmpeg -i temp1.mp4 -pix_fmt rgb24 -color_range 2 $output -y
+    # rm temp.mp4 temp1.mp4 temp.mp3
+    # mediainfo --fullscan $output --Output=JSON >"$output.json"
+    covertVideoTask
+
+    echo -ne "\033[0;32m"
+    cat <<EOF
+                                  _oo0oo_
+                                 088888880
+                                 88" . "88
+                                 (| -_- |)
+                                  0\ = /0
+                               ___/'---'\___
+                             .' \\\\|     |// '.
+                            / \\\\|||  :  |||// \\
+                           /_ ||||| -:- |||||- \\
+                          |   | \\\\\\  -  /// |   |
+                          | \_|  ''\---/''  |_/ |
+                          \  .-\__  '-'  __/-.  /
+                        ___'. .'  /--.--\  '. .'___
+                     ."" '<  '.___\_<|>_/___.' >'  "".
+                    | | : '-  \'.;'\ _ /';.'/ - ' : | |
+                    \  \ '_.   \_ __\ /__ _/   .-' /  /
+                ====='-.____'.___ \_____/___.-'____.-'=====
+                                  '=---='
+   
+   
+              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+                        佛祖保佑    TTT    顺利转换
+EOF
+    echo -ne "\033[m"
+    echo "covert done!"
+else
+    if [ ! -n "$1" ]; then
+        print_usage
+    else
+        if [ -z $videoFile ]; then
+            echo "${red}miss video file path: 缺视频文件路径"
+        fi
+        if [ -z $audioFile ]; then
+            echo "${red}miss audio file path : 缺音频少文件路径"
+        fi
+        if [ -z $outputName ]; then
+            echo "${red}miss file name : 缺音输出文件名称"
+        fi
+        if [ -z $outputFolder ]; then
+            echo "${red}miss output path : 缺音输出路径"
+        fi
+    fi
+
+fi

+ 11 - 0
Vagrantfile

@@ -0,0 +1,11 @@
+Vagrant.configure("2") do |config|
+    config.vm.box = "bento/ubuntu-14.04"
+    config.vm.box_version = "201808.24.0"
+    config.vm.synced_folder ".", "/vagrant", type: "rsync"
+    # if Vagrant.has_plugin?("vagrant-proxyconf")
+    #   config.proxy.http     = "http://192.168.2.108:7890/"
+    #   config.proxy.https    = "http://192.168.2.108:7890/"
+    #   config.proxy.no_proxy = "localhost,127.0.0.1,.example.com"
+    # end
+    # config.vm.provision "shell", path: "vagrant-installer.sh"
+  end

+ 742 - 0
install-ffmpeg

@@ -0,0 +1,742 @@
+#!/bin/bash
+
+# HOMEPAGE: https://github.com/markus-perl/ffmpeg-build-script
+# LICENSE: https://github.com/markus-perl/ffmpeg-build-script/blob/master/LICENSE
+
+PROGNAME=$(basename "$0")
+VERSION=1.22
+CWD=$(pwd)
+PACKAGES="$CWD/packages"
+WORKSPACE="$CWD/workspace"
+CFLAGS="-I$WORKSPACE/include"
+LDFLAGS="-L$WORKSPACE/lib"
+LDEXEFLAGS=""
+EXTRALIBS="-ldl -lpthread -lm -lz"
+MACOS_M1=false
+CONFIGURE_OPTIONS=()
+# Check for Apple Silicon
+if [[ ("$(uname -m)" == "arm64") && ("$OSTYPE" == "darwin"*) ]]; then
+  # If arm64 AND darwin (macOS)
+  export ARCH=arm64
+  export MACOSX_DEPLOYMENT_TARGET=11.0
+  MACOS_M1=true
+fi
+
+# Speed up the process
+# Env Var NUMJOBS overrides automatic detection
+if [[ -n "$NUMJOBS" ]]; then
+  MJOBS="$NUMJOBS"
+elif [[ -f /proc/cpuinfo ]]; then
+  MJOBS=$(grep -c processor /proc/cpuinfo)
+elif [[ "$OSTYPE" == "darwin"* ]]; then
+  MJOBS=$(sysctl -n machdep.cpu.thread_count)
+  CONFIGURE_OPTIONS=("--enable-videotoolbox")
+else
+  MJOBS=4
+fi
+
+make_dir() {
+  remove_dir "$1"
+  if ! mkdir "$1"; then
+    printf "\n Failed to create dir %s" "$1"
+    exit 1
+  fi
+}
+
+remove_dir() {
+  if [ -d "$1" ]; then
+    rm -r "$1"
+  fi
+}
+
+download() {
+  # download url [filename[dirname]]
+
+  DOWNLOAD_PATH="$PACKAGES"
+  DOWNLOAD_FILE="${2:-"${1##*/}"}"
+
+  if [[ "$DOWNLOAD_FILE" =~ tar. ]]; then
+    TARGETDIR="${DOWNLOAD_FILE%.*}"
+    TARGETDIR="${3:-"${TARGETDIR%.*}"}"
+  else
+    TARGETDIR="${3:-"${DOWNLOAD_FILE%.*}"}"
+  fi
+
+  if [ ! -f "$DOWNLOAD_PATH/$DOWNLOAD_FILE" ]; then
+    echo "Downloading $1 as $DOWNLOAD_FILE"
+    curl -L --silent -o "$DOWNLOAD_PATH/$DOWNLOAD_FILE" "$1"
+
+    EXITCODE=$?
+    if [ $EXITCODE -ne 0 ]; then
+      echo ""
+      echo "Failed to download $1. Exitcode $EXITCODE. Retrying in 10 seconds"
+      sleep 10
+      curl -L --silent -o "$DOWNLOAD_PATH/$DOWNLOAD_FILE" "$1"
+    fi
+
+    EXITCODE=$?
+    if [ $EXITCODE -ne 0 ]; then
+      echo ""
+      echo "Failed to download $1. Exitcode $EXITCODE"
+      exit 1
+    fi
+
+    echo "... Done"
+  else
+    echo "$DOWNLOAD_FILE has already downloaded."
+  fi
+
+  make_dir "$DOWNLOAD_PATH/$TARGETDIR"
+
+  if [ -n "$3" ]; then
+    if ! tar -xvf "$DOWNLOAD_PATH/$DOWNLOAD_FILE" -C "$DOWNLOAD_PATH/$TARGETDIR" 2>/dev/null >/dev/null; then
+      echo "Failed to extract $DOWNLOAD_FILE"
+      exit 1
+    fi
+  else
+    if ! tar -xvf "$DOWNLOAD_PATH/$DOWNLOAD_FILE" -C "$DOWNLOAD_PATH/$TARGETDIR" --strip-components 1 2>/dev/null >/dev/null; then
+      echo "Failed to extract $DOWNLOAD_FILE"
+      exit 1
+    fi
+  fi
+
+  echo "Extracted $DOWNLOAD_FILE"
+
+  cd "$DOWNLOAD_PATH/$TARGETDIR" || (
+    echo "Error has occurred."
+    exit 1
+  )
+}
+
+execute() {
+  echo "$ $*"
+
+  OUTPUT=$("$@" 2>&1)
+
+  # shellcheck disable=SC2181
+  if [ $? -ne 0 ]; then
+    echo "$OUTPUT"
+    echo ""
+    echo "Failed to Execute $*" >&2
+    exit 1
+  fi
+}
+
+build() {
+  echo ""
+  echo "building $1"
+  echo "======================="
+
+  if [ -f "$PACKAGES/$1.done" ]; then
+    echo "$1 already built. Remove $PACKAGES/$1.done lockfile to rebuild it."
+    return 1
+  fi
+
+  return 0
+}
+
+command_exists() {
+  if ! [[ -x $(command -v "$1") ]]; then
+    return 1
+  fi
+
+  return 0
+}
+
+library_exists() {
+  if ! [[ -x $(pkg-config --exists --print-errors "$1" 2>&1 >/dev/null) ]]; then
+    return 1
+  fi
+
+  return 0
+}
+
+build_done() {
+  touch "$PACKAGES/$1.done"
+}
+
+verify_binary_type() {
+  BINARY_TYPE=$(file "$WORKSPACE/bin/ffmpeg" | sed -n 's/^.*\:\ \(.*$\)/\1/p')
+  echo ""
+  case $BINARY_TYPE in
+  "Mach-O 64-bit executable arm64")
+    echo "Successfully built Apple Silicon (M1) for ${OSTYPE}: ${BINARY_TYPE}"
+    ;;
+  *)
+    echo "Successfully built binary for ${OSTYPE}: ${BINARY_TYPE}"
+    ;;
+  esac
+}
+
+cleanup() {
+  remove_dir "$PACKAGES"
+  remove_dir "$WORKSPACE"
+  echo "Cleanup done."
+  echo ""
+}
+
+usage() {
+  echo "Usage: $PROGNAME [OPTIONS]"
+  echo "Options:"
+  echo "  -h, --help          Display usage information"
+  echo "      --version       Display version information"
+  echo "  -b, --build         Starts the build process"
+  echo "  -c, --cleanup       Remove all working dirs"
+  echo "  -f, --full-static   Build a full static FFmpeg binary (eg. glibc, pthreads etc...) **only Linux**"
+  echo "                      Note: Because of the NSS (Name Service Switch), glibc does not recommend static links."
+  echo ""
+}
+
+while (($# > 0)); do
+  case $1 in
+  -h | --help)
+    usage
+    exit 0
+    ;;
+  --version)
+    echo "$VERSION"
+    exit 0
+    ;;
+  -*)
+    if [[ "$1" == "--build" || "$1" =~ 'b' ]]; then
+      bflag='-b'
+    fi
+    if [[ "$1" == "--cleanup" || "$1" =~ 'c' && ! "$1" =~ '--' ]]; then
+      cflag='-c'
+      cleanup
+    fi
+    if [[ "$1" == "--full-static" || "$1" =~ 'f' ]]; then
+      if [[ "$OSTYPE" == "darwin"* ]]; then
+        echo "Error: A full static binary can only be build on Linux."
+        exit 1
+      fi
+      LDEXEFLAGS="-static"
+    fi
+    shift
+    ;;
+  *)
+    usage
+    exit 1
+    ;;
+  esac
+done
+
+echo "ffmpeg-build-script v$VERSION"
+echo "========================="
+echo ""
+
+if [ -z "$bflag" ]; then
+  if [ -z "$cflag" ]; then
+    usage
+    exit 1
+  fi
+  exit 0
+fi
+
+echo "Using $MJOBS make jobs simultaneously."
+
+if [ -n "$LDEXEFLAGS" ]; then
+  echo "Start the build in full static mode."
+fi
+
+mkdir -p "$PACKAGES"
+mkdir -p "$WORKSPACE"
+
+export PATH="${WORKSPACE}/bin:$PATH"
+PKG_CONFIG_PATH="/usr/local/lib/x86_64-linux-gnu/pkgconfig:/usr/local/lib/pkgconfig"
+PKG_CONFIG_PATH+=":/usr/local/share/pkgconfig:/usr/lib/x86_64-linux-gnu/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig:/usr/lib64/pkgconfig"
+export PKG_CONFIG_PATH
+
+if ! command_exists "make"; then
+  echo "make not installed."
+  exit 1
+fi
+
+if ! command_exists "g++"; then
+  echo "g++ not installed."
+  exit 1
+fi
+
+if ! command_exists "curl"; then
+  echo "curl not installed."
+  exit 1
+fi
+
+if ! command_exists "python"; then
+  echo "Python command not found. Lv2 filter will not be available."
+fi
+
+##
+## build tools
+##
+
+if build "pkg-config"; then
+  download "https://pkgconfig.freedesktop.org/releases/pkg-config-0.29.2.tar.gz"
+  execute ./configure --silent --prefix="${WORKSPACE}" --with-pc-path="${WORKSPACE}"/lib/pkgconfig --with-internal-glib
+  execute make -j $MJOBS
+  execute make install
+  build_done "pkg-config"
+fi
+
+if command_exists "python"; then
+
+  if build "lv2"; then
+    download "https://lv2plug.in/spec/lv2-1.18.0.tar.bz2" "lv2-1.18.0.tar.bz2"
+    execute ./waf configure --prefix="${WORKSPACE}" --lv2-user
+    execute ./waf
+    execute ./waf install
+
+    build_done "lv2"
+  fi
+
+  if build "waflib"; then
+    download "https://gitlab.com/drobilla/autowaf/-/archive/cc37724b9bfa889baebd8cb10f38b8c7cab83e37/autowaf-cc37724b9bfa889baebd8cb10f38b8c7cab83e37.tar.gz" "autowaf.tar.gz"
+    build_done "waflib"
+  fi
+
+  if build "serd"; then
+    download "https://gitlab.com/drobilla/serd/-/archive/v0.30.6/serd-v0.30.6.tar.gz" "serd-v0.30.6.tar.gz"
+    execute cp -r "${PACKAGES}"/autowaf/* "${PACKAGES}/serd-v0.30.6/waflib/"
+    execute ./waf configure --prefix="${WORKSPACE}" --static --no-shared --no-posix
+    execute ./waf
+    execute ./waf install
+    build_done "serd"
+  fi
+
+  if build "pcre"; then
+    download "https://ftp.pcre.org/pub/pcre/pcre-8.44.tar.gz" "pcre-8.44.tar.gz"
+    execute ./configure --prefix="${WORKSPACE}" --disable-shared --enable-static
+    execute make -j $MJOBS
+    execute make install
+
+    build_done "pcre"
+  fi
+
+  if build "sord"; then
+    download "https://gitlab.com/drobilla/sord/-/archive/v0.16.6/sord-v0.16.6.tar.gz" "sord-v0.16.6.tar.gz"
+    execute cp -r "${PACKAGES}"/autowaf/* "${PACKAGES}/sord-v0.16.6/waflib/"
+    execute ./waf configure --prefix="${WORKSPACE}" CFLAGS="${CFLAGS}" --static --no-shared --no-utils
+    execute ./waf CFLAGS="${CFLAGS}"
+    execute ./waf install
+
+    build_done "sord"
+  fi
+
+  if build "sratom"; then
+    download "https://gitlab.com/lv2/sratom/-/archive/v0.6.6/sratom-v0.6.6.tar.gz" "sratom-v0.6.6.tar.gz"
+    execute cp -r "${PACKAGES}"/autowaf/* "${PACKAGES}/sratom-v0.6.6/waflib/"
+    execute ./waf configure --prefix="${WORKSPACE}" --static --no-shared
+    execute ./waf
+    execute ./waf install
+
+    build_done "sratom"
+  fi
+
+  if build "lilv"; then
+    download "https://gitlab.com/lv2/lilv/-/archive/v0.24.10/lilv-v0.24.10.tar.gz" "lilv-v0.24.10.tar.gz"
+    execute cp -r "${PACKAGES}"/autowaf/* "${PACKAGES}/lilv-v0.24.10/waflib/"
+    execute ./waf configure --prefix="${WORKSPACE}" --static --no-shared --no-utils
+    execute ./waf
+    execute ./waf install
+    CFLAGS+=" -I$WORKSPACE/include/lilv-0"
+    build_done "lilv"
+  fi
+
+  CONFIGURE_OPTIONS+=("--enable-lv2")
+fi
+
+if build "yasm"; then
+  download "https://github.com/yasm/yasm/releases/download/v1.3.0/yasm-1.3.0.tar.gz"
+  execute ./configure --prefix="${WORKSPACE}"
+  execute make -j $MJOBS
+  execute make install
+  build_done "yasm"
+fi
+
+if build "nasm"; then
+  download "https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/nasm-2.15.05.tar.xz"
+  execute ./configure --prefix="${WORKSPACE}" --disable-shared --enable-static
+  execute make -j $MJOBS
+  execute make install
+  build_done "nasm"
+fi
+
+if build "zlib"; then
+  download "https://www.zlib.net/zlib-1.2.11.tar.gz"
+  execute ./configure --static --prefix="${WORKSPACE}"
+  execute make -j $MJOBS
+  execute make install
+  build_done "zlib"
+fi
+
+if build "openssl"; then
+  download "https://www.openssl.org/source/openssl-1.1.1i.tar.gz"
+  if $MACOS_M1; then
+    sed -n 's/\(##### GNU Hurd\)/"darwin64-arm64-cc" => { \n    inherit_from     => [ "darwin-common", asm("aarch64_asm") ],\n    CFLAGS           => add("-Wall"),\n    cflags           => add("-arch arm64 "),\n    lib_cppflags     => add("-DL_ENDIAN"),\n    bn_ops           => "SIXTY_FOUR_BIT_LONG", \n    perlasm_scheme   => "macosx", \n}, \n\1/g' Configurations/10-main.conf
+    execute ./configure --prefix="${WORKSPACE}" no-shared no-asm darwin64-arm64-cc
+  else
+    execute ./config --prefix="${WORKSPACE}" --openssldir="${WORKSPACE}" --with-zlib-include="${WORKSPACE}"/include/ --with-zlib-lib="${WORKSPACE}"/lib no-shared zlib
+  fi
+  execute make -j $MJOBS
+  execute make install_sw
+  build_done "openssl"
+fi
+CONFIGURE_OPTIONS+=("--enable-openssl")
+
+if build "cmake"; then
+  download "https://cmake.org/files/v3.18/cmake-3.18.4.tar.gz"
+  execute ./configure --prefix="${WORKSPACE}" --system-zlib
+  execute make -j $MJOBS
+  execute make install
+  build_done "cmake"
+fi
+
+if build "svtav1"; then
+  download "https://github.com/AOMediaCodec/SVT-AV1/archive/v0.8.6.tar.gz"
+  cd Build/linux || exit
+  execute cmake -DCMAKE_INSTALL_PREFIX="${WORKSPACE}" -DENABLE_SHARED=off -DBUILD_SHARED_LIBS=OFF ../.. -G"Unix Makefiles" -DCMAKE_BUILD_TYPE=Release
+  execute make -j $MJOBS
+  execute make install
+  execute cp SvtAv1Enc.pc "${WORKSPACE}/lib/pkgconfig/"
+  execute cp SvtAv1Dec.pc "${WORKSPACE}/lib/pkgconfig/"
+  build_done "svtav1"
+fi
+CONFIGURE_OPTIONS+=("--enable-libsvtav1")
+
+##
+## video library
+##
+
+if build "x264"; then
+  download "https://code.videolan.org/videolan/x264/-/archive/0d754ec36013fee82978496cd56fbd48824910b3/x264-0d754ec36013fee82978496cd56fbd48824910b3.tar.gz" "x264-0d754ec.tar.gz"
+  cd "${PACKAGES}"/x264-0d754ec || exit
+
+  if [[ "$OSTYPE" == "linux-gnu" ]]; then
+    execute ./configure --prefix="${WORKSPACE}" --enable-static --enable-pic CXXFLAGS="-fPIC"
+  else
+    execute ./configure --prefix="${WORKSPACE}" --enable-static --enable-pic
+  fi
+
+  execute make -j $MJOBS
+  execute make install
+  execute make install-lib-static
+
+  build_done "x264"
+fi
+CONFIGURE_OPTIONS+=("--enable-libx264")
+
+if build "x265"; then
+  download "https://github.com/videolan/x265/archive/Release_3.5.tar.gz" "x265-3.5.tar.gz"
+  cd build/linux || exit
+
+  execute cmake -DCMAKE_INSTALL_PREFIX="${WORKSPACE}" -DENABLE_SHARED=off -DBUILD_SHARED_LIBS=OFF ../../source
+  execute make -j $MJOBS
+  execute make install
+
+  if [ -n "$LDEXEFLAGS" ]; then
+    sed -i.backup 's/-lgcc_s/-lgcc_eh/g' "${WORKSPACE}/lib/pkgconfig/x265.pc" # The -i.backup is intended and required on MacOS: https://stackoverflow.com/questions/5694228/sed-in-place-flag-that-works-both-on-mac-bsd-and-linux
+  fi
+
+  build_done "x265"
+fi
+CONFIGURE_OPTIONS+=("--enable-libx265")
+
+if build "libvpx"; then
+  download "https://github.com/webmproject/libvpx/archive/v1.9.0.tar.gz" "libvpx-1.9.0.tar.gz"
+
+  if [[ "$OSTYPE" == "darwin"* ]]; then
+    echo "Applying Darwin patch"
+    sed "s/,--version-script//g" build/make/Makefile >build/make/Makefile.patched
+    sed "s/-Wl,--no-undefined -Wl,-soname/-Wl,-undefined,error -Wl,-install_name/g" build/make/Makefile.patched >build/make/Makefile
+  fi
+
+  execute ./configure --prefix="${WORKSPACE}" --disable-unit-tests --disable-shared --as=yasm
+  execute make -j $MJOBS
+  execute make install
+
+  build_done "libvpx"
+fi
+CONFIGURE_OPTIONS+=("--enable-libvpx")
+
+if build "xvidcore"; then
+  download "https://downloads.xvid.com/downloads/xvidcore-1.3.7.tar.gz"
+  cd build/generic || exit
+  execute ./configure --prefix="${WORKSPACE}" --disable-shared --enable-static
+  execute make -j $MJOBS
+  execute make install
+
+  if [[ -f ${WORKSPACE}/lib/libxvidcore.4.dylib ]]; then
+    execute rm "${WORKSPACE}/lib/libxvidcore.4.dylib"
+  fi
+
+  if [[ -f ${WORKSPACE}/lib/libxvidcore.so ]]; then
+    execute rm "${WORKSPACE}"/lib/libxvidcore.so*
+  fi
+
+  build_done "xvidcore"
+fi
+CONFIGURE_OPTIONS+=("--enable-libxvid")
+
+if build "vid_stab"; then
+  download "https://github.com/georgmartius/vid.stab/archive/v1.1.0.tar.gz" "vid.stab-1.1.0.tar.gz"
+
+  if $MACOS_M1; then
+
+    curl -s -o "$PACKAGES/vid.stab-1.1.0/fix_cmake_quoting.patch" https://raw.githubusercontent.com/Homebrew/formula-patches/5bf1a0e0cfe666ee410305cece9c9c755641bfdf/libvidstab/fix_cmake_quoting.patch
+    patch -p1 <fix_cmake_quoting.patch
+  fi
+
+  execute cmake -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX="${WORKSPACE}" -DUSE_OMP=OFF -DENABLE_SHARED=off .
+  execute make
+  execute make install
+
+  build_done "vid_stab"
+fi
+CONFIGURE_OPTIONS+=("--enable-libvidstab")
+
+if build "av1"; then
+  download "https://aomedia.googlesource.com/aom/+archive/b52ee6d44adaef8a08f6984390de050d64df9faa.tar.gz" "av1.tar.gz" "av1"
+  make_dir "$PACKAGES"/aom_build
+  cd "$PACKAGES"/aom_build || exit
+  if $MACOS_M1; then
+    execute cmake -DENABLE_TESTS=0 -DCMAKE_INSTALL_PREFIX="${WORKSPACE}" -DCMAKE_INSTALL_LIBDIR=lib -DCONFIG_RUNTIME_CPU_DETECT=0 "$PACKAGES"/av1
+  else
+    execute cmake -DENABLE_TESTS=0 -DCMAKE_INSTALL_PREFIX="${WORKSPACE}" -DCMAKE_INSTALL_LIBDIR=lib "$PACKAGES"/av1
+  fi
+  execute make -j $MJOBS
+  execute make install
+
+  build_done "av1"
+fi
+CONFIGURE_OPTIONS+=("--enable-libaom")
+
+##
+## audio library
+##
+
+if build "opencore"; then
+  download "https://deac-riga.dl.sourceforge.net/project/opencore-amr/opencore-amr/opencore-amr-0.1.5.tar.gz"
+  execute ./configure --prefix="${WORKSPACE}" --disable-shared --enable-static
+  execute make -j $MJOBS
+  execute make install
+
+  build_done "opencore"
+fi
+CONFIGURE_OPTIONS+=("--enable-libopencore_amrnb" "--enable-libopencore_amrwb")
+
+if build "lame"; then
+  download "https://netcologne.dl.sourceforge.net/project/lame/lame/3.100/lame-3.100.tar.gz"
+  execute ./configure --prefix="${WORKSPACE}" --disable-shared --enable-static
+  execute make -j $MJOBS
+  execute make install
+
+  build_done "lame"
+fi
+CONFIGURE_OPTIONS+=("--enable-libmp3lame")
+
+if build "opus"; then
+  download "https://archive.mozilla.org/pub/opus/opus-1.3.1.tar.gz"
+  execute ./configure --prefix="${WORKSPACE}" --disable-shared --enable-static
+  execute make -j $MJOBS
+  execute make install
+
+  build_done "opus"
+fi
+CONFIGURE_OPTIONS+=("--enable-libopus")
+
+if build "libogg"; then
+  download "https://ftp.osuosl.org/pub/xiph/releases/ogg/libogg-1.3.3.tar.gz"
+  execute ./configure --prefix="${WORKSPACE}" --disable-shared --enable-static
+  execute make -j $MJOBS
+  execute make install
+  build_done "libogg"
+fi
+
+if build "libvorbis"; then
+  download "https://ftp.osuosl.org/pub/xiph/releases/vorbis/libvorbis-1.3.6.tar.gz"
+  execute ./configure --prefix="${WORKSPACE}" --with-ogg-libraries="${WORKSPACE}"/lib --with-ogg-includes="${WORKSPACE}"/include/ --enable-static --disable-shared --disable-oggtest
+  execute make -j $MJOBS
+  execute make install
+
+  build_done "libvorbis"
+fi
+CONFIGURE_OPTIONS+=("--enable-libvorbis")
+
+if build "libtheora"; then
+  download "https://ftp.osuosl.org/pub/xiph/releases/theora/libtheora-1.1.1.tar.gz"
+  sed "s/-fforce-addr//g" configure >configure.patched
+  chmod +x configure.patched
+  mv configure.patched configure
+  execute ./configure --prefix="${WORKSPACE}" --with-ogg-libraries="${WORKSPACE}"/lib --with-ogg-includes="${WORKSPACE}"/include/ --with-vorbis-libraries="${WORKSPACE}"/lib --with-vorbis-includes="${WORKSPACE}"/include/ --enable-static --disable-shared --disable-oggtest --disable-vorbistest --disable-examples --disable-asm --disable-spec
+  execute make -j $MJOBS
+  execute make install
+
+  build_done "libtheora"
+fi
+CONFIGURE_OPTIONS+=("--enable-libtheora")
+
+if build "fdk_aac"; then
+  download "https://sourceforge.net/projects/opencore-amr/files/fdk-aac/fdk-aac-2.0.1.tar.gz/download?use_mirror=gigenet" "fdk-aac-2.0.1.tar.gz"
+  execute ./configure --prefix="${WORKSPACE}" --disable-shared --enable-static
+  execute make -j $MJOBS
+  execute make install
+
+  build_done "fdk_aac"
+fi
+CONFIGURE_OPTIONS+=("--enable-libfdk-aac")
+
+##
+## image library
+##
+
+if build "libwebp"; then
+  download "https://github.com/webmproject/libwebp/archive/v1.1.0.tar.gz" "libwebp-1.1.0.tar.gz"
+  make_dir build
+  cd build || exit
+  execute cmake -DCMAKE_INSTALL_PREFIX="${WORKSPACE}" -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_BINDIR=bin -DCMAKE_INSTALL_INCLUDEDIR=include -DENABLE_SHARED=OFF -DENABLE_STATIC=ON ../
+  execute make -j $MJOBS
+  execute make install
+
+  build_done "libwebp"
+fi
+CONFIGURE_OPTIONS+=("--enable-libwebp")
+
+##
+## other library
+##
+
+if build "libsdl"; then
+  download "https://www.libsdl.org/release/SDL2-2.0.14.tar.gz"
+  execute ./configure --prefix="${WORKSPACE}" --disable-shared --enable-static
+  execute make -j $MJOBS
+  execute make install
+
+  build_done "libsdl"
+fi
+
+if build "srt"; then
+  download "https://github.com/Haivision/srt/archive/v1.4.1.tar.gz" "srt-1.4.1.tar.gz"
+  export OPENSSL_ROOT_DIR="${WORKSPACE}"
+  export OPENSSL_LIB_DIR="${WORKSPACE}"/lib
+  export OPENSSL_INCLUDE_DIR="${WORKSPACE}"/include/
+  execute cmake . -DCMAKE_INSTALL_PREFIX="${WORKSPACE}" -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_BINDIR=bin -DCMAKE_INSTALL_INCLUDEDIR=include -DENABLE_SHARED=OFF -DENABLE_STATIC=ON -DENABLE_APPS=OFF -DUSE_STATIC_LIBSTDCXX=ON
+  execute make install
+
+  if [ -n "$LDEXEFLAGS" ]; then
+    sed -i.backup 's/-lgcc_s/-lgcc_eh/g' "${WORKSPACE}"/lib/pkgconfig/srt.pc # The -i.backup is intended and required on MacOS: https://stackoverflow.com/questions/5694228/sed-in-place-flag-that-works-both-on-mac-bsd-and-linux
+  fi
+
+  build_done "srt"
+fi
+CONFIGURE_OPTIONS+=("--enable-libsrt")
+
+##
+## HWaccel library
+##
+
+if [[ "$OSTYPE" == "linux-gnu" ]]; then
+  if command_exists "nvcc"; then
+    if build "nv-codec"; then
+      download "https://github.com/FFmpeg/nv-codec-headers/releases/download/n11.0.10.0/nv-codec-headers-11.0.10.0.tar.gz"
+      execute make PREFIX="${WORKSPACE}"
+      execute make install PREFIX="${WORKSPACE}"
+      build_done "nv-codec"
+    fi
+    CFLAGS+=" -I/usr/local/cuda/include"
+    LDFLAGS+=" -L/usr/local/cuda/lib64"
+    CONFIGURE_OPTIONS+=("--enable-cuda-nvcc" "--enable-cuvid" "--enable-nvenc" "--enable-cuda-llvm")
+
+    if [ -z "$LDEXEFLAGS" ]; then
+      CONFIGURE_OPTIONS+=("--enable-libnpp") # Only libnpp cannot be statically linked.
+    fi
+
+    # https://arnon.dk/matching-sm-architectures-arch-and-gencode-for-various-nvidia-cards/
+    CONFIGURE_OPTIONS+=("--nvccflags=-gencode arch=compute_52,code=sm_52")
+  fi
+
+  # Vaapi doesn't work well with static links FFmpeg.
+  if [ -z "$LDEXEFLAGS" ]; then
+    # If the libva development SDK is installed, enable vaapi.
+    if library_exists "libva"; then
+      if build "vaapi"; then
+        build_done "vaapi"
+      fi
+      CONFIGURE_OPTIONS+=("--enable-vaapi")
+    fi
+  fi
+fi
+
+##
+## FFmpeg
+##
+
+build "ffmpeg"
+download "https://git.ffmpeg.org/gitweb/ffmpeg.git/snapshot/553eb0773763798a6b9656b621cb125e1f6edbcc.tar.gz"
+# shellcheck disable=SC2086
+./configure "${CONFIGURE_OPTIONS[@]}" \
+  --disable-debug \
+  --disable-doc \
+  --disable-shared \
+  --enable-gpl \
+  --enable-nonfree \
+  --enable-pthreads \
+  --enable-static \
+  --enable-small \
+  --enable-version3 \
+  --extra-cflags="${CFLAGS}" \
+  --extra-ldexeflags="${LDEXEFLAGS}" \
+  --extra-ldflags="${LDFLAGS}" \
+  --extra-libs="${EXTRALIBS}" \
+  --pkgconfigdir="$WORKSPACE/lib/pkgconfig" \
+  --pkg-config-flags="--static" \
+  --prefix="${WORKSPACE}"
+
+execute make -j $MJOBS
+execute make install
+
+INSTALL_FOLDER="/usr/bin"
+if [[ "$OSTYPE" == "darwin"* ]]; then
+  INSTALL_FOLDER="/usr/local/bin"
+fi
+
+verify_binary_type
+
+echo ""
+echo "Building done. The following binaries can be found here:"
+echo "- ffmpeg: $WORKSPACE/bin/ffmpeg"
+echo "- ffprobe: $WORKSPACE/bin/ffprobe"
+echo "- ffplay: $WORKSPACE/bin/ffplay"
+
+echo ""
+
+if [[ "$AUTOINSTALL" == "yes" ]]; then
+  if command_exists "sudo"; then
+    sudo cp "$WORKSPACE/bin/ffmpeg" "$INSTALL_FOLDER/ffmpeg"
+    sudo cp "$WORKSPACE/bin/ffprobe" "$INSTALL_FOLDER/ffprobe"
+    sudo cp "$WORKSPACE/bin/ffplay" "$INSTALL_FOLDER/ffplay"
+    echo "Done. FFmpeg is now installed to your system."
+  else
+    cp "$WORKSPACE/bin/ffmpeg" "$INSTALL_FOLDER/ffmpeg"
+    cp "$WORKSPACE/bin/ffprobe" "$INSTALL_FOLDER/ffprobe"
+    sudo cp "$WORKSPACE/bin/ffplay" "$INSTALL_FOLDER/ffplay"
+    echo "Done. FFmpeg is now installed to your system."
+  fi
+elif [[ ! "$SKIPINSTALL" == "yes" ]]; then
+  read -r -p "Install these binaries to your $INSTALL_FOLDER folder? Existing binaries will be replaced. [Y/n] " response
+  case $response in
+  [yY][eE][sS] | [yY])
+    if command_exists "sudo"; then
+      sudo cp "$WORKSPACE/bin/ffmpeg" "$INSTALL_FOLDER/ffmpeg"
+      sudo cp "$WORKSPACE/bin/ffprobe" "$INSTALL_FOLDER/ffprobe"
+      sudo cp "$WORKSPACE/bin/ffplay" "$INSTALL_FOLDER/ffplay"
+    else
+      cp "$WORKSPACE/bin/ffmpeg" "$INSTALL_FOLDER/ffmpeg"
+      cp "$WORKSPACE/bin/ffprobe" "$INSTALL_FOLDER/ffprobe"
+      cp "$WORKSPACE/bin/ffplay" "$INSTALL_FOLDER/ffplay"
+    fi
+    echo "Done. FFmpeg is now installed to your system."
+    ;;
+  esac
+fi
+
+exit 0

+ 143 - 0
install-ffmpeg.sh

@@ -0,0 +1,143 @@
+#!/bin/bash
+
+#ubuntu: 14.04+
+#
+
+#install required things from apt
+installLibs() {
+    echo "Installing prerequisites"
+    sudo apt-get update
+    sudo apt-get -y --force-yes install autoconf automake build-essential libass-dev libfreetype6-dev libgpac-dev \
+        libsdl1.2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev \
+        libxcb-xfixes0-dev pkg-config texi2html zlib1g-dev
+}
+
+#Compile nasm
+compileNasm() {
+    echo "Compiling nasm"
+    cd ~/ffmpeg_sources
+    wget http://www.nasm.us/pub/nasm/releasebuilds/2.14rc0/nasm-2.14rc0.tar.gz
+    tar xzvf nasm-2.14rc0.tar.gz
+    cd nasm-2.14rc0
+    ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin"
+    make -j$(nproc)
+    make -j$(nproc) install
+    make -j$(nproc) distclean
+}
+
+#Compile libx264
+compileLibX264() {
+    echo "Compiling libx264"
+    cd ~/ffmpeg_sources
+    wget http://download.videolan.org/pub/x264/snapshots/last_x264.tar.bz2
+    tar xjvf last_x264.tar.bz2
+    cd x264-snapshot*
+    PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-static
+    PATH="$HOME/bin:$PATH" make -j$(nproc)
+    make -j$(nproc) install
+    make -j$(nproc) distclean
+}
+
+#Compile libfdk-acc
+compileLibfdkcc() {
+    echo "Compiling libfdk-cc"
+    sudo apt-get install unzip
+    cd ~/ffmpeg_sources
+    wget -O fdk-aac.zip https://github.com/mstorsjo/fdk-aac/zipball/master
+    unzip fdk-aac.zip
+    cd mstorsjo-fdk-aac*
+    autoreconf -fiv
+    ./configure --prefix="$HOME/ffmpeg_build" --disable-shared
+    make -j$(nproc)
+    make -j$(nproc) install
+    make -j$(nproc) distclean
+}
+
+#Compile libmp3lame
+compileLibMP3Lame() {
+    echo "Compiling libmp3lame"
+    sudo apt-get install nasm
+    cd ~/ffmpeg_sources
+    wget http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
+    tar xzvf lame-3.99.5.tar.gz
+    cd lame-3.99.5
+    ./configure --prefix="$HOME/ffmpeg_build" --enable-nasm --disable-shared
+    make -j$(nproc)
+    make -j$(nproc) install
+    make -j$(nproc) distclean
+}
+
+#Compile libopus
+compileLibOpus() {
+    echo "Compiling libopus"
+    cd ~/ffmpeg_sources
+    wget http://downloads.xiph.org/releases/opus/opus-1.2.1.tar.gz
+    tar xzvf opus-1.2.1.tar.gz
+    cd opus-1.2.1
+    ./configure --prefix="$HOME/ffmpeg_build" --disable-shared
+    make -j$(nproc)
+    make -j$(nproc) install
+    make -j$(nproc) distclean
+}
+
+#Compile libvpx
+compileLibPvx() {
+    echo "Compiling libvpx"
+    cd ~/ffmpeg_sources
+    git clone https://chromium.googlesource.com/webm/libvpx
+    cd libvpx
+    PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --disable-examples --enable-runtime-cpu-detect --enable-vp9 --enable-vp8 \
+        --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 \
+        --cpu=native --as=nasm
+    PATH="$HOME/bin:$PATH" make -j$(nproc)
+    make -j$(nproc) install
+    make -j$(nproc) clean
+}
+
+#Compile ffmpeg
+compileFfmpeg() {
+    echo "Compiling ffmpeg"
+    cd ~/ffmpeg_sources
+    git clone https://github.com/FFmpeg/FFmpeg -b master
+    cd FFmpeg
+    PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure \
+        --prefix="$HOME/ffmpeg_build" \
+        --extra-cflags="-I$HOME/ffmpeg_build/include" \
+        --extra-ldflags="-L$HOME/ffmpeg_build/lib" \
+        --bindir="$HOME/bin" \
+        --enable-cuvid \
+        --enable-libnpp \
+        --enable-gpl \
+        --enable-libass \
+        --enable-libfdk-aac \
+        --enable-vaapi \
+        --enable-libfreetype \
+        --enable-libmp3lame \
+        --enable-libopus \
+        --enable-libtheora \
+        --enable-libvorbis \
+        --enable-libvpx \
+        --enable-libx264 \
+        --enable-libx265 \
+        --enable-nonfree \
+        --enable-lv2 \
+        --samples=fate-suite/
+
+    PATH="$HOME/bin:$PATH" make -j$(nproc)
+    make -j$(nproc) install
+    make -j$(nproc) distclean
+    hash -r
+}
+
+#The process
+cd ~
+mkdir ffmpeg_sources
+installLibs
+compileNasm
+compileLibX264
+compileLibfdkcc
+compileLibMP3Lame
+compileLibOpus
+compileLibPvx
+compileFfmpeg
+echo "Complete!"

+ 5 - 0
vagrant-installer.sh

@@ -0,0 +1,5 @@
+#!/bin/sh
+
+sudo apt-get install build-essential
+
+sh > /vagrant/install-ffmpeg --build