Compiling FFmpeg and Codecs from Source Code: All-in-One Script

Compiling FFmpeg from Source Code: All-in-One Script to Install Audio Video Codecs and the FFmpeg Suite

FFmpeg Project Logo - Image: Wikicommons
FFmpeg Project Logo – Image: Wikicommons

This article provides a complete, ready-to-execute script to obtain, build, and install the FFmpeg suite alongside a selection of audio video codecs, and is a supplement to my detailed guide Compiling Software from Source Code on the Raspberry Pi: The FFmpeg Suite

A Note Before Proceeding

I strongly advise that a full backup be made of the system, as there is no simple method to reverse the actions of the compilation and installation processes described below.

A full image of the Raspberry Pi’s SD Card can be made using a tool such as Win32DiskImager.

Script Guidance
For guidance on creating and running a script by cutting and pasting code into a new file, please see the ‘Installing the Menu Script’ section of my earlier post.
Creating and Executing the FFmpeg Installation Script

1. Create an empty file to hold the script code:

mkdir /home/pi/tools
cd /home/pi/tools
sudo nano ffmpeg-install.sh

2. Cut and Paste the script code into the file.
(To paste into the Nano editor, use Ctrl + Shift + v)

3. Save the result:
Ctrl + X, then y

4. Mark the script file as Executable:

sudo chmod +x ffmpeg-install.sh

5. Run the script with super-user privileges using the sudo command:

sudo ./ffmpeg-install.sh

The script completes in approximately 45 minutes on a Raspberry Pi 3, overclocked to 1350mhz

FFmpeg Install Script - Nano Editor
FFmpeg Install Script – Nano Editor

The All-in-One Script

#!/bin/bash
# Compile and install (or install via Apt) FFmpeg Codecs
# Compile and install FFmpeg suite

echo "Begining Installation of FFmpeg Suite"

#Update APT Repository
echo "Updating the APT repository information"
apt-get update

#Create Working Directories
echo "Setting up working directories to be used during the installation and build process"
cd ~
mkdir ~/ffmpeg_sources
mkdir ~/ffmpeg_build

#Build Tools
echo "Installing various tools and packages, including audio-video codecs, required for building FFmpeg"
apt-get -y install autoconf automake build-essential libass-dev libfreetype6-dev \
  libsdl1.2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev \
  libxcb-xfixes0-dev pkg-config texinfo zlib1g-dev

#YASM Assembler
echo "Installing the YASM Assembler"
apt-get install -y yasm

echo "Compiling and Installing FFmpeg Codecs"

#x264 Codec
echo "X264 Codec"
cd /home/pi/ffmpeg_sources
git clone git://git.videolan.org/x264
cd x264
./configure --host=arm-unknown-linux-gnueabi --enable-shared --disable-opencl
make -j2
make install
make clean
make distclean

echo "Libfdk-aac Codec"
cd ~/ffmpeg_sources
wget -O fdk-aac.tar.gz https://github.com/mstorsjo/fdk-aac/tarball/master
tar xzvf fdk-aac.tar.gz
cd mstorsjo-fdk-aac*
autoreconf -fiv
./configure  --enable-shared
make -j2
make install
make clean
make distclean

#Libmp3lame Codec 
echo "Libmp3lame Codec"
apt-get install -y libmp3lame-dev

#Libopus Codec
echo "Libopus Codec"
apt-get install -y libopus-dev

#Libvpx Codec
echo "Libvpx Codec"
cd ~/ffmpeg_sources
wget http://storage.googleapis.com/downloads.webmproject.org/releases/webm/libvpx-1.5.0.tar.bz2
tar xjvf libvpx-1.5.0.tar.bz2
cd libvpx-1.5.0
PATH="$HOME/bin:$PATH" ./configure --enable-shared --disable-examples --disable-unit-tests
PATH="$HOME/bin:$PATH" make -j2
make install
make clean
make distclean

# FFmpeg Suite
echo "Compiling and installing the FFmpeg Suite"
cd ~/ffmpeg_sources
wget http://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2
tar xjvf ffmpeg-snapshot.tar.bz2
cd ffmpeg

PATH="$HOME/bin:$PATH" ./configure \
  --pkg-config-flags="--static" \
  --extra-cflags="-fPIC -I$HOME/ffmpeg_build/include" \
  --extra-ldflags="-L$HOME/ffmpeg_build/lib" \
  --enable-gpl \
  --enable-libass \
  --enable-libfdk-aac \
  --enable-libfreetype \
  --enable-libmp3lame \
  --enable-libopus \
  --enable-libtheora \
  --enable-libvorbis \
  --enable-libvpx \
  --enable-libx264 \
  --enable-nonfree \
  --enable-pic \
  --extra-ldexeflags=-pie \
  --enable-shared

PATH="$HOME/bin:$PATH" make -j2
make install
make distclean
hash -r

#Update Shared Library Cache
echo "Updating Shared Library Cache"
ldconfig

echo "FFmpeg and Codec Installation Complete"

About
Disclaimers
Privacy Policy
Terms and Conditions
© Retro Resolution