Skip to content

Instantly share code, notes, and snippets.

@janyo1201
Created November 24, 2017 08:40
Show Gist options
  • Save janyo1201/efd64b8ec82c04b8a59b143f3c23eb30 to your computer and use it in GitHub Desktop.
Save janyo1201/efd64b8ec82c04b8a59b143f3c23eb30 to your computer and use it in GitHub Desktop.
FFmpeg installer
##################################################
#
# FFmpeg installer
#
# written
# by K. (https://github.com/wlzla000)
# on October 17-18, 2017.
#
# for Ubuntu 17.04 (zesty)
#
#
#
# This shell script installs these:
#
# autoconf
# automake
# build-essential
# libass-dev
# libfreetype6-dev
# libsdl2-dev
# libtheora-dev
# libtool
# libva-dev
# libvdpau-dev
# libvorbis-dev
# libxcb1-dev
# libxcb-shm0-dev
# libxcb-xfixes0-dev
# pkg-config
# texinfo
# wget
# zlib1g-dev
# yasm 1.3.0
# nasm 2.13.01
# libx264 latest version
# cmake
# mercurial
# libx265 latest version
# libfdk-aac latest version
# libmp3lame 3.100
# libopus 1.2.1
# git
# libvpx latest version
# FFmpeg latest version (nightly build)
#
## Make sure dpkg is available
sudo rm /var/lib/apt/lists/lock /var/cache/apt/archives/lock /var/lib/dpkg/lock
sudo dpkg --configure -a
## Installing the dependencies
sudo apt-get update
sudo apt-get -y install autoconf automake build-essential libass-dev libfreetype6-dev \
libsdl2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev \
libxcb-xfixes0-dev pkg-config texinfo wget zlib1g-dev
## Make a directory for the source files
mkdir -p ~/ffmpeg_sources
## Installing yasm 1.3.0
# Remove currently installed yasm if any
sudo apt-get purge -y yasm
sudo apt autoremove -y
# Download yasm 1.3.0 source code
cd ~/ffmpeg_sources
wget -N http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
tar xzvf yasm-1.3.0.tar.gz
cd yasm-1.3.0
# Build yasm 1.3.0
./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin"
make
# Install yasm 1.3.0
make install
sudo ln -sf `pwd`/yasm /usr/bin/yasm
## Installing nasm 2.13.01
# Remove currently installed nasm if any
sudo apt-get purge -y nasm
sudo apt autoremove -y
# Download nasm 2.13.01 source code
cd ~/ffmpeg_sources
wget -N http://www.nasm.us/pub/nasm/releasebuilds/2.13.01/nasm-2.13.01.tar.bz2
tar xjvf nasm-2.13.01.tar.bz2
cd nasm-2.13.01
# Build nasm 2.13.01
./autogen.sh
PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin"
PATH="$HOME/bin:$PATH" make
# Install nasm 2.13.01
make install
sudo ln -sf "$HOME/bin/nasm" /usr/bin/nasm
## Installing libx264 latest version
# Remove currently installed libx264 if any
sudo apt-get purge -y libx264-dev
sudo apt autoremove -y
# Download libx264 latest version source code
cd ~/ffmpeg_sources
wget -N http://download.videolan.org/pub/x264/snapshots/last_x264.tar.bz2
tar xjvf last_x264.tar.bz2
cd x264-snapshot*
# Build libx264 latest version
PATH="$HOME/bin:$PATH" ./configure \
--prefix="$HOME/ffmpeg_build" \
--bindir="$HOME/bin" \
--enable-pic \
--enable-shared \
--disable-opencl
# Credit # https://github.com/lutris/ffmpeg-nvenc/issues/5
PATH="$HOME/bin:$PATH" make
# Install libx264 latest version
make install
sudo ln -sf "$HOME/bin/x264" /usr/bin/x264
## Installing libx265 latest version
# Remove currently installed libx265 if any
sudo apt-get purge -y libx265-dev
sudo apt autoremove -y
# Install the dependencies: cmake, mercurial.
sudo apt-get update
sudo apt-get install -y cmake mercurial
# Download libx265 latest version source code
cd ~/ffmpeg_sources
hg clone https://bitbucket.org/multicoreware/x265
cd ~/ffmpeg_sources/x265/build/linux
# Build libx265 latest version
PATH="$HOME/bin:$PATH" cmake \
-G "Unix Makefiles" \
-DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" \
-DENABLE_SHARED:bool=off \
../../source
make
# Install libx265 latest version
make install
sudo ln -sf "$HOME/ffmpeg_build/bin/x265" /usr/bin/x265
## Installing libfdk-aac latest version
# Remove currently installed libfdk-aac if any
sudo apt-get purge -y libfdk-aac-dev
sudo apt autoremove -y
# Download libfdk-aac latest version source code
cd ~/ffmpeg_sources
wget -N https://github.com/mstorsjo/fdk-aac/tarball/master -O fdk-aac.tar.gz
tar xzvf fdk-aac.tar.gz
cd mstorsjo-fdk-aac*
# Build libfdk-aac latest version
autoreconf -fiv
./configure --prefix="$HOME/ffmpeg_build" --disable-shared
make
# Install libfdk-aac latest version
make install
## Installing libmp3lame 3.100
# Remove currently installed libmp3lame if any
sudo apt-get purge -y libmp3lame-dev
sudo apt autoremove -y
# Download libmp3lame 3.100 source code
cd ~/ffmpeg_sources
wget -N http://downloads.sourceforge.net/project/lame/lame/3.100/lame-3.100.tar.gz
tar xzvf lame-3.100.tar.gz
cd lame-3.100
# Build libmp3lame 3.100
./configure --prefix="$HOME/ffmpeg_build" --enable-nasm --disable-shared
make
# Install libmp3lame 3.100
make install
sudo ln -sf "$HOME/ffmpeg_build/bin/lame" /usr/bin/lame
## Installing libopus 1.2.1
# Remove currently installed libopus if any
sudo apt-get purge -y libopus-dev
sudo apt autoremove -y
# Download libopus 1.2.1 source code
cd ~/ffmpeg_sources
wget -N https://archive.mozilla.org/pub/opus/opus-1.2.1.tar.gz
tar xzvf opus-1.2.1.tar.gz
cd opus-1.2.1
# Build libopus 1.2.1
./configure --prefix="$HOME/ffmpeg_build" --disable-shared
make
# Install libopus 1.2.1
make install
## Installing libvpx latest version
# Remove currently installed libvpx if any
sudo apt-get purge -y libvpx-dev
sudo apt autoremove -y
# Install the dependency: git.
sudo apt-get update
sudo apt-get install -y git
# Download libvpx latest version source code
cd ~/ffmpeg_sources
git clone --depth 1 https://chromium.googlesource.com/webm/libvpx.git
cd libvpx
# Build libvpx latest version
PATH="$HOME/bin:$PATH" ./configure \
--prefix="$HOME/ffmpeg_build" \
--disable-examples \
--disable-unit-tests \
--enable-vp9-highbitdepth \
--enable-pic
PATH="$HOME/bin:$PATH" make
# Install libvpx latest version
make install
## Installing libraries
sudo ln -sf $HOME/ffmpeg_build/lib/lib* /usr/local/lib/
sudo mkdir -p /usr/local/lib/pkgconfig
sudo ln -sf $HOME/ffmpeg_build/lib/pkgconfig/* /usr/local/lib/pkgconfig/
## Installing FFmpeg latest version
# Remove currently installed FFmpeg if any
sudo apt-get purge -y ffmpeg
sudo apt-get purge -y ffmpeg-dev
sudo apt autoremove -y
# Download FFmpeg latest version source code
cd ~/ffmpeg_sources
wget -N http://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2
tar xjvf ffmpeg-snapshot.tar.bz2
cd ffmpeg
# Hotfix for `ERROR: libmp3lame >= 3.98.3 not found` problem.
# CREDIT # https://stackoverflow.com/a/46756012/4510033
sed -i -e 's/\(3.98.3..lame.lame.h.lame.set.VBR.quality..lmp3lame\)/\1 -lm/' ./configure
# Hotfix for `ERROR: x265 not found using pkg-config` problem.
sed -i -e 's/\(x265.h.x265_api_get\)/\1 -lpthread/' ./configure
# Build FFmpeg latest version
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure \
--prefix="$HOME/ffmpeg_build" \
--pkg-config-flags="--static" \
--extra-cflags="-I$HOME/ffmpeg_build/include" \
--extra-ldflags="-L$HOME/ffmpeg_build/lib" \
--bindir="$HOME/bin" \
--enable-gpl \
--enable-libass \
--enable-libfdk-aac \
--enable-libfreetype \
--enable-libmp3lame \
--enable-libopus \
--enable-libtheora \
--enable-libvorbis \
--enable-libvpx \
--enable-libx264 \
--enable-libx265 \
--enable-nonfree
PATH="$HOME/bin:$PATH" make
# Install FFmpeg latest version
make install
hash -r
sudo ldconfig
echo "MANPATH_MAP $HOME/bin $HOME/ffmpeg_build/share/man" >> ~/.manpath
source ~/.profile
sudo ln -s $HOME/bin/ff* /usr/bin/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment