ffmpeg für MAC OSX 10.6 compilieren

Mit älteren ffmpeg Versionen hat man des öfteren das Problem das aktuelle Videos nicht konvertiert werden können, da das Format erst in der aktuellen SVN Version unterstütz wird.
Häufig bei Formaten die von neueren Videokameras erstellt werden.

Das sieht dann z.B. so aus:

$ ./ffmpeg -i ./testvideo-aus-einzelbildern-erstellt.avi -vpre libx264-main -b 1200k -ab 128k ./testvideo-aus-einzelbildern-erstellt.mp4
FFmpeg version SVN-r17619, Copyright (c) 2000-2009 Fabrice Bellard, et al.
  configuration: --enable-gpl --enable-postproc --enable-swscale --enable-libx264 --enable-libxvid --enable-pthreads --enable-avfilter --enable-libfaac --enable-libvorbis --enable-libfaad --enable-libfaac
  libavutil     49.15. 0 / 49.15. 0
  libavcodec    52.19. 0 / 52.19. 0
  libavformat   52.30. 0 / 52.30. 0
  libavdevice   52. 1. 0 / 52. 1. 0
  libavfilter    0. 4. 0 /  0. 4. 0
  libswscale     0. 7. 1 /  0. 7. 1
  libpostproc   51. 2. 0 / 51. 2. 0
  built on Feb 26 2009 21:42:03, gcc: 4.2.1 (Apple Inc. build 5566)

Seems stream 0 codec frame rate differs from container frame rate: 3000.00 (3000/1) -> 29.67 (89/3)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from './testvideo-aus-einzelbildern-erstellt.avi':
  Duration: 00:00:30.00, start: 0.000000, bitrate: 114185 kb/s
    Stream #0.0(eng): Video: Y'CbCr 4:2:2 - yuyv, 640x480, PAR 1:1 DAR 4:3, 29.67 tbr, 3k tbn, 3k tbc
    Stream #0.1(eng): Audio: pcm_s16le, 44100 Hz, stereo, s16, 1411 kb/s

swScaler: Unknown format is not supported as input pixel format.
Cannot get resampling context.

Abhilfe schafft hier ein frisches ffmpeg aus dem SVN.

Um die Erstellung der Binärdatei zu automatisieren bietet sich hier ein Script an.

Um ffmpeg mit dem Script compilieren zu können, müssen die als Kommentar am Scriptanfang genannten Tools installiert sein.
Da ich macports installiert habe, kann es sein das weitere Tools/Librarys benötigt werden. Sollte dies der Fall sein bitte ein Komentar hinterlassen und ich passe das Script dahingehend an.

install-ffmpeg-from-svn.sh

#!/bin/bash

# ffmpeg installer, snow leopard, install xcode first !
#
#
# 2do first:
#
# install xcode from developer.apple.com
#
# install yasm from source (needed for compiling x264)
#
# wget http://www.tortall.net/projects/yasm/releases/yasm-0.8.0.tar.gz
#  - unzip and change to dir
#  - ./configure
#  - make
#  - sudo make install
#
# install git - if not exist: http://code.google.com/p/git-osx-installer/ (not the GUI version!)

svn_rev_ffmpeg=$(svn info svn://svn.ffmpeg.org/ffmpeg/trunk | grep "Revision: [0-0]*" | sed "s/Revision: \([0-9]*\)/\1/") 

myDir=$(date +src_%Y%m%d-%H%M-ffmpeg_rev$svn_rev_ffmpeg)

echo
echo " - using x264   lib from git";
echo " - using lame   lib from cvs";
echo " - using faac   lib from tar (v1.28)";
echo " - using faad2  lib from tar (v2.7)";
echo " - using ffmpeg bin from svn (rev$svn_rev_ffmpeg)";
echo
echo "[press enter for start]"
echo
read

echo "using /$myDir for sources"
mkdir $myDir
cd $myDir
pwd
echo

echo
echo "download+compile+install x264 codec lib"
echo
echo
git clone git://git.videolan.org/x264.git
cd x264/
echo "------------------------------------------"
echo "start configure:"
echo
./configure
echo "------------------------------------------"
echo "start make:"
echo
make
echo
echo "------------------------------------------"
echo "enter password for installing 'x264' if needed"
echo "$USER@../x264> sudo make install"
sudo make install
echo
echo
echo "------------------------------------------"
cd ..

echo
echo "download+compile+install lame codec lib"
echo
echo
mkdir lame
cvs -z3 -d:pserver:anonymous@lame.cvs.sourceforge.net:/cvsroot/lame co -P lame
cd lame/
echo "------------------------------------------"
echo "start configure:"
echo
./configure
echo "------------------------------------------"
echo "start make:"
echo
make
echo
echo "------------------------------------------"
echo "enter password for installing 'lame' if needed"
echo "$USER@../lame> sudo make install"
sudo make install
echo
echo
echo "------------------------------------------"
cd ..

echo
echo "download+compile+install faac codec lib"
echo
echo
wget http://downloads.sourceforge.net/faac/faac-1.28.tar.gz \
	|| (
		echo "=====) manual download http://downloads.sourceforge.net/faac/faac-1.28.tar.gz"
		echo "=====) save in: $(pwd)"
		echo "=====) return for extracting..."
		ls -la ./faac-1.28.tar.gz
		read
		)
ls -la ./faac-1.28.tar.gz
tar xpzf ./faac-1.28.tar.gz
cd faac-1.28
echo "------------------------------------------"
echo "start configure:"
echo
./configure
echo "------------------------------------------"
echo "start make:"
echo
make
echo
echo "------------------------------------------"
echo "enter password for installing 'faac'"
echo "$USER@../faac> sudo make install"
sudo make install
echo
echo
echo "------------------------------------------"
cd ..

echo
echo "download+compile+install faad codec lib"
echo
echo
wget http://downloads.sourceforge.net/faac/faad2-2.7.tar.gz \
	|| (
		echo "=====) manual download http://downloads.sourceforge.net/faac/faad2-2.7.tar.gz"
		echo "=====) save in: $(pwd)"
		echo "=====) press return if ready for extracting..."
		ls -la ./faad2-2.7.tar.gz
		read
		)
ls -la ./faad2-2.7.tar.gz
tar xpzf ./faad2-2.7.tar.gz
cd faad2-2.7
echo "------------------------------------------"
echo "start configure:"
echo
./configure
echo "------------------------------------------"
echo "start make:"
echo
make
echo
echo "------------------------------------------"
echo "enter password for installing 'faad'"
echo "$USER@../faad> sudo make install"
sudo make install
echo
echo
echo "------------------------------------------"
cd ..

echo
echo "download+compile+install ffmpeg"
echo
echo
svn -r $svn_rev_ffmpeg checkout svn://svn.ffmpeg.org/ffmpeg/trunk ffmpeg
cd ffmpeg
echo "------------------------------------------"
echo "start configure:"
echo
./configure \
	--enable-libmp3lame --enable-gpl \
	--enable-libx264 \
	--enable-libfaac --enable-nonfree \
	--enable-libfaad \
	--disable-debug \
	--disable-amd3dnow \
	--disable-amd3dnowext \
	--enable-shared \
	--enable-pthreads \
	--arch=x86_64
echo "------------------------------------------"
echo "start make:"
echo
make
echo
echo "------------------------------------------"
echo "enter password for installing 'ffmpeg'"
echo "$USER@../ffmpeg> sudo make install"
sudo make install
echo
echo
echo "------------------------------------------"
cd ..

# leave $myDate
cd ..
echo
echo
echo "run installed ffmpeg - is it $svn_rev ???"
echo
echo

/usr/local/bin/ffmpeg

echo
echo
echo
echo "------------------------------------------"
echo "all done."
echo

neuste Version:

$ ffmpeg
FFmpeg version SVN-r21485, Copyright (c) 2000-2010 Fabrice Bellard, et al.
  built on Jan 27 2010 21:04:23 with gcc 4.2.1 (Apple Inc. build 5646) (dot 1)
  configuration: --enable-libmp3lame --enable-gpl --enable-libx264 --enable-libfaac --enable-nonfree --enable-libfaad --disable-debug --disable-amd3dnow --disable-amd3dnowext --enable-shared --enable-pthreads --arch=x86_64
  libavutil     50. 7. 0 / 50. 7. 0
  libavcodec    52.48. 0 / 52.48. 0
  libavformat   52.47. 0 / 52.47. 0
  libavdevice   52. 2. 0 / 52. 2. 0
  libswscale     0. 9. 0 /  0. 9. 0
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

Use -h to get full help or, even better, run 'man ffmpeg'

Wenn jemand Verbesserungen am Script vornimmt, würde ich mich über eine Nachricht freuen und das Script ggf. anpassen.

MAC: Login Foto für lau

Wenn man wissen möchte „Wer hat an meinem MAC gespielt ?“ geht das sehr einfach mit einem kleinen Tool.

Benötigt wird das kleine Komandozeilen Tool wacaw.

Beim Testen ist mir aufgefallen, das die Dateinamenlänge bei Videos begrenzt ist.

Des weiteren will mein ffmpeg die erstellen Videos, welche unkomprimiert und dadurch sehr gross sind, nicht konvertieren. Fehlermeldung:

swScaler: Unknown format is not supported as input pixel format.
Cannot get resampling context.

Eine aktuell aus dem SVN compilierte Version macht jedoch keine Probleme und convertiert das Video.

Um nun beim Login und beim Logout die Person vor dem Rechner kurz zu fotografieren und ein kleines Video mit Ton aufzunehmen benötigt man auser dem wacaw Tool zwei Scripts.

Meine Ordnerstruktur:

/Users/meinname/shoot
/data/
/install.sh
/shoot.sh
/wacaw

Das Install Script ist zum Installieren der login/Logout Hooks. im /data/ Ordner werden die erstellten Videos+Fotos gespeichert.

install.sh:

#!/bin/bash

mydir=$(dirname $0)
cd $mydir
mydir=$(pwd)

if [ $UID != "0" ] ; then
	echo
	echo "login/logoff shooter installer"
	echo
	echo "this script installs a login/logout hook for creating a iSight login-video + screenshot"
	echo
	echo "	syntax: sudo $0"
	echo
	exit 255
fi

#install login hook
echo -e "#!/bin/bash\n" > /usr/local/bin/shootloginscript
echo -e "$mydir/shoot.sh login\n" >> /usr/local/bin/shootloginscript
chmod +x /usr/local/bin/shootloginscript
sudo defaults write com.apple.loginwindow LoginHook /usr/local/bin/shootloginscript

#install logout hook
echo -e "#!/bin/bash\n" > /usr/local/bin/shootlogoutscript
echo -e "$mydir/shoot.sh logout\n" >> /usr/local/bin/shootlogoutscript
chmod +x /usr/local/bin/shootlogoutscript
sudo defaults write com.apple.loginwindow LogoutHook /usr/local/bin/shootlogoutscript

#uninstall:
#sudo defaults delete com.apple.loginwindow LoginHook
#sudo defaults delete com.apple.loginwindow LogoutHook

echo -e "shoot installation done."

shoot.sh:

#!/bin/bash

mydir=$(dirname $0)
cd $mydir
mydir=$(pwd)
mkdir $mydir/data > /dev/null 2>&1

outfile="$mydir/data/$(date "+%Y%m%d_%H%M%S")_$1"
echo "$outfile"
	./wacaw -n 5 --png --SVGA $outfile

outfile="$mydir/data/$(date "+%Y%m%d_%H%M%S")_$1"
if [ "$1" == "logout" ] ; then
	./wacaw  --video --duration 5 --VGA $outfile
else
	./wacaw  --video --duration 30 --VGA $outfile
fi

if [ "$1" == "login" ] ; then
	#if login - then make two more shoots in 30s and 60s
	(sleep 120 ; $0 after) &
	(sleep 240 ; $0 after) &
fi

Wenn die beiden Scripte erstellt sind, kann installiert werden:

cd /Users/meinname/shoot
sudo ./install.sh

Nun testweise ausloggen und wieder einloggen.
Im „data“ Ordner sind nun die Erstellten Videos und Fotos.

Nun ist es schlau dies auf einem Account zumachen, welcher ohne Passwort oder mit Auto-Login funktioniert.

Als Diebstahlschutz kann man die erstellten Fotos und Videos (vorher convertieren damit sie kleiner werden) – wenn eine Internet Verbindung besteht – mit „curl“ auf einen FTP hochladen. Der FTP Account sollte möglichst nur Schreibzugriff haben und keine Berechtigung zum löschen der hochgeladenen Dateien.
Wenn der Rechner mal gestohlen wird und der Dieb das Gerät mit aktivem Internet bootet – so hat man ein schönes Bild des Diebs und dessen IP, so wie hier.

Leider lässt sich die grüne LED der iSight-Cam nicht abschalten.

xtreamer: base-Installer funktioniert in erster Version

Das Grundgerüst ist gebaut !

[nggallery id=6]

Installieren der Grundlegenden Tools funktioniert: /opt mit loopfile vergrößert, bash, opensshd, mc, php5

Nun kann es an das Eingemachte gehen: Abfragen von Inhalten und erstellen von menu.rss Dateien „on the fly“.

Hoffentlich wird in die kommende Firmware 3.x der Support für MMS:// Streams und WMV3 eingebaut – so das auch hier alle online Inhalte abgespielt werden können.

Es werden bereits fleißig Stream-URLs gesammelt. Jedoch ist die Navigation durch die Streams/Podcasts noch „unter aller Sau“. Hoffen wir das die Views in der 3’er Firmware freier gestaltbar werden.