Script: FFmpeg Snapshot Installer für Ubuntu

FFmpeg

Da ich wieder häufiger mit FFmpeg arbeiten muss und viel zu viel mit den verschiedenen Ubuntu-Derivaten experimentiere, habe ich mir einen „FFmpeg Snapshot Installer“ zum installieren, upgraden und deinstallieren von FFmpeg geschrieben.
 
 
Changelog

  • 16. Mär – ~/bin zu PATH hinzufügen

FFmpeg Snapshot Installer – Vorwort

FFmpeg Script
FFmpeg Script
Das Script überprüft das Betriebssystem auf das Vorkommen des Wortes „Ubuntu“ (~ Kubuntu, Xubuntu, …). Linux Mint und sonstige Derivate werden noch nicht unterstützt.

Installiert wird nur für den lokalen Benutzer. Die Binaries befinden sich nach der Installation im Verzeichnis „~/bin“.

FFmpeg Binaries
FFmpeg Binaries
Die Links („TARGETS“ Array) sind austauschbar, falls es für die Abhängigkeiten Updates geben- oder sich die URL ändern sollte. Zusätzlich wird der Link-Status geprüft: Ist eine Datei nicht mehr vorhanden, so bricht das Script noch vor der Ausführung ab.

Folgende Anwendungen werden vorab kompiliert:

  • Yasm 1.2.0, falls Ubuntu < v13.04, ansonsten via "apt-get"
  • x264 Snapshot
  • FDK-AAC Snaptshot
  • Opus 1.1
  • libvpx 1.3.0

Konfiguration FFmpegs:

--prefix="$HOME/ffmpeg_build" --extra-cflags="-I$HOME/ffmpeg_build/include" \
--extra-ldflags="-L$HOME/ffmpeg_build/lib" --bindir="$HOME/bin" \
--extra-libs=-ldl --enable-gpl --enable-libass --enable-libfdk-aac \
--enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis \
--enable-libvpx --enable-libx264 --enable-nonfree --enable-x11grab

Die Parameter sind vorwiegend aus dem Ubuntu Compilation Guide übernommen.

Das Script + Benutzung

 

#!/bin/bash
if [ "$(id -u)" != "0" ]; then
	echo "This script must be run as root" 1>&2
	exit 1
fi
if [ $# -lt 1 ]
then
	echo "Usage: $0 install/upgrade/uninstall"
	exit
fi

##############################################
#### some vars, do not rearrange TARGETS! ####
##############################################
CORECOUNT=`grep "^core id" /proc/cpuinfo | sort -u | wc -l`
OS=$(lsb_release -si)
VER=$(lsb_release -sr)
TARGETS=(
'http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz'
'http://download.videolan.org/pub/x264/snapshots/last_x264.tar.bz2'
'https://github.com/mstorsjo/fdk-aac/zipball/master'
'http://downloads.xiph.org/releases/opus/opus-1.1.tar.gz'
'http://webm.googlecode.com/files/libvpx-v1.3.0.tar.bz2'
'http://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2'
)

###################
#### functions ####
###################
function checks {
	if [[ $OS =~ .*ubuntu*. ]]; then
		echo "You are not running an Ubuntu derivate, exiting..."
		exit 1
	fi
	ISCURL=`which curl`
	if [ -z $ISCURL ]; then
		echo "Please install \"curl\"..."
		exit 1
	fi
	echo -en "Checking for dead targets, please wait...\t"
	for i in ${TARGETS[@]}
	do
		LINK_STATUS=$(curl -o /dev/null --silent --write-out '%{http_code}\n' $i)
		if [ $LINK_STATUS = "404" ]; then
			echo -e "\e[00;31m ERR\e[00m"
		        echo "Link $i seems offline, exiting..."
		        exit 1
		fi
	done
	echo -e "\e[00;32m OK\e[00m"
}

function install-ffmpeg {
	echo -en "Preparing system...\t\t\t\t"
		sudo apt-get update > /dev/null 2>&1
		sudo apt-get -y install unzip autoconf automake build-essential libass-dev libgpac-dev \
		libsdl1.2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libx11-dev \
		libxext-dev libxfixes-dev pkg-config texi2html zlib1g-dev libmp3lame-dev > /dev/null 2>&1
	if [ $? -ne 0 ] ; then
		echo -e "\e[00;31m ERR\e[00m"
		exit 1
	fi
	echo -e "\e[00;32m OK\e[00m"
	echo "######################"
	echo "THIS MAY TAKE A WHILE!"
	echo "######################"
        secs=3
        while [ $secs -gt 0 ]; do
                echo -ne "Progress will be spammed to console... $secs\r"
                sleep 1
                : $((secs--))
        done
	mkdir ~/ffmpeg_sources

	if (( $(echo "$VER > 13" | bc -l) )); then
		sudo apt-get -y install yasm
	else
		cd ~/ffmpeg_sources
		wget ${TARGETS[0]}
		tar xzvf yasm-1.2.0.tar.gz
		cd yasm-1.2.0
		./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin"
		make -j$CORECOUNT
		make install
		make distclean
		export "PATH=$PATH:$HOME/bin"
	fi

	cd ~/ffmpeg_sources
	wget ${TARGETS[1]}
	tar xjvf last_x264.tar.bz2
	cd x264-snapshot*
	./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-static
	make -j$CORECOUNT
	make install
	make distclean

	cd ~/ffmpeg_sources
	wget -O fdk-aac.zip ${TARGETS[2]}
	unzip fdk-aac.zip
	cd mstorsjo-fdk-aac*
	autoreconf -fiv
	./configure --prefix="$HOME/ffmpeg_build" --disable-shared
	make -j$CORECOUNT
	make install
	make distclean

	cd ~/ffmpeg_sources
	wget ${TARGETS[3]}
	tar xzvf opus-1.1.tar.gz
	cd opus-1.1
	./configure --prefix="$HOME/ffmpeg_build" --disable-shared
	make -j$CORECOUNT
	make install
	make distclean

	cd ~/ffmpeg_sources
	wget ${TARGETS[4]}
	tar xjvf libvpx-v1.3.0.tar.bz2
	cd libvpx-v1.3.0
	./configure --prefix="$HOME/ffmpeg_build" --disable-examples
	make -j$CORECOUNT
	make install
	make clean

	cd ~/ffmpeg_sources
	wget ${TARGETS[5]}
	tar xjvf ffmpeg-snapshot.tar.bz2
	cd ffmpeg
	PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig"
	export PKG_CONFIG_PATH
	./configure --prefix="$HOME/ffmpeg_build" --extra-cflags="-I$HOME/ffmpeg_build/include" \
	   --extra-ldflags="-L$HOME/ffmpeg_build/lib" --bindir="$HOME/bin" --extra-libs=-ldl --enable-gpl \
	   --enable-libass --enable-libfdk-aac --enable-libmp3lame --enable-libopus --enable-libtheora \
	   --enable-libvorbis --enable-libvpx --enable-libx264 --enable-nonfree --enable-x11grab
	make -j$CORECOUNT
	make install
	make distclean
	hash -r
	echo "Done!"
        echo -e "PLEASE RUN \"\e[00;31mexport \"PATH=\$PATH:\$HOME/bin\"\e[00m\" NOW (copy red command)"
}

function uninstall-ffmpeg {
	rm -rf ~/ffmpeg_build ~/ffmpeg_sources ~/bin/{ffmpeg,ffprobe,ffserver,vsyasm,x264,yasm,ytasm}
	sudo apt-get autoremove autoconf automake build-essential libass-dev libgpac-dev \
	  libmp3lame-dev libopus-dev libsdl1.2-dev libtheora-dev libtool libva-dev libvdpau-dev \
	  libvorbis-dev libvpx-dev libx11-dev libxext-dev libxfixes-dev texi2html zlib1g-dev
	sed -i '/ffmpeg_build/c\' ~/.manpath
	hash -r 
}

function upgrade-ffmpeg {
	rm -rf ~/ffmpeg_build ~/ffmpeg_sources ~/bin/{ffmpeg,ffprobe,ffserver,vsyasm,x264,yasm,ytasm}
	install-ffmpeg
}

##############
#### case ####
##############
case "$1" in

install)
	checks
	install-ffmpeg
	;;
upgrade)
	checks
	upgrade-ffmpeg
	;;
uninstall)
	uninstall-ffmpeg
	;;
*)
	echo "Invalid argument"
	;;
esac

Usage: sudo ./ffmpeg_installer.sh install|upgrade|uninstall
Vorab als ausführbar markieren: chmod +x ffmpeg_installer.sh

7 Antworten auf “Script: FFmpeg Snapshot Installer für Ubuntu

    1. André P. Autor

      Moment mal, FFmpeg ist doch quasi DAS Beispiel für Software, die man sich nach eigenen Wünschen selber baut. ;) Abgesehen davon ist es – glaube ich – gar nicht mehr im Repository Ubuntus. Selbst wenn, wie stelle ich mir dann das Bauen mit eigenen Flags vor?
      Arch und Debian (und Derivate) unterscheiden sich schon sehr, den Einsatz sehe ich bei beiden an komplett unterschiedlichen Ecken.
      Es gibt Software, die ich so oder so nicht aus einem Repo ziehen würde.
      Bisher hat mich übrigens besonders Systemd an Arch gestört, aber da komme ich als Debianer wohl nicht mehr dran vorbei. :)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.