Tag Archive: installer

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