Linux Desktop als Stream im Netzwerk bereitstellen

manchmal wünsche ich mir den Linux-Desktop riesengroß auf meinem Projektor im Wohnzimmer darzustellen. Meinen PC zum Projektor tragen, Steckdosen und langes HDMI Kabel suchen mag ich aber nicht. Da ich meinen Projektor jedoch über einen Raspberry Pi mit Kodi-Mediacenter betreibe kann ich mit Hilfe von avconv (oder, wer dies lieber mag, auch mit ffmpeg die Optionen sind die gleichen) das Audiosignal und Videobild vom meinem Desktop aufnehmen und das Ergebnis zum Kodi streamen.

X11 Desktop als Stream Aufnehmen

Den Aufgezeichneten Stream sende ich via VLC in mein lokales Netzwerk. Auf meinem XBMC erstelle ich dann eine neue Quelle, in der eine  STRM Datei liegt.

Die Audioquelle ist hier Alsa (-f alsa), über die ich den Stereoton (-ac 2) von dem Standard Audiogerät der gewählten Soundkarte (-i default) aufnehme.
Die Videoquelle ist der x11 Desktop (-f x11grab), deb ich mit einer Bildwiederholrate von 25 Bildern in der Sekunde (-r 25) und in der Auflösung des Desktops 1920×1080 Pixel aufnehme. Der Linux Desktop :0.0, dies ist der erste gestartete X11 Desktop, wird aufgenommen (-i :0.0).

Die Kompression der Audioaufnahme soll mit mp3 in den Standarteinstellungen erfolgen (-acodec libmp3lame), als Videocodec soll x264 (libx264) mit dem Preset „Ultrafast“ und allen verfügbaren CPU Kernen um die Kompression zu verteilen. Die Ausgabe soll in einem MPEG TS Container erfolgen (-f mpegts).

Dann wird das Fertige Video an vlc übergeben (vlc -I dummy -) und an das Netzwerk ausgegeben.

den Stream Wiedergeben

Wenn der Stream auf dem Linux-PC gestartet wurde kann er im Kodi-Mediacenter mit Hilfe einer, folgend beschriebenen, STRM Datei geöffnet werden.

Die STRM Datei „Stream.strm“ ist eine Textdatei, Sie enthält das Protokoll, die IP-Adresse des Streamenden Computers und den Port über den der Stream ausgegeben wird.:

Scan to Donate Bitcoin
Like this? Donate Bitcoin to at:
Bitcoin 17g7tgR4KYKSqS1f8LUCpLEeum4PAcnGbo
Donate

x264 encode

1.) mit dem Videolan Client (VLC) die Ränder suchen.

Im Video Lan Client kann mit Hilfe des Videoeffekts Beschneiden die genaue Pixelzahl der Ränder festgestellt werden.
Werkzeuge => Effekte und Filter => Videoeffekte => Beschneiden

Video Beschnelden im VLC Videolan Client

Um die Schwarzen Bildränder zu schneiden lautet die Crop Angabe:
–video-filter crop:[links],[oben],[rechts],[unten]

2.) Binary von x264 herunterladen:
http://download.videolan.org/pub/videolan/x264/binaries/

3.) Video umwandeln:
a) ohne beschnitt:
[x264] --level 4.1 --crf 21 --profile high --preset slower --tune film --no-interlaced -o [Ausgabe].mkv [Eingabe]

b) mit Beschnitt:
[x264] --level 4.1 --crf 21 --profile high --preset slower --tune film --no-interlaced --video-filter crop:[links],[oben],[rechts],[unten] -o [Ausgabe].mkv [Eingabe]

Parameter
[x264] – Pfad und Dateiname des x264 encoders
[links] – Abzuschneidender Bildbereich auf der linken Seite in Pixeln
[oben] – Abzuschneidender Bildbereich auf der oberen Seite in Pixeln
[rechts] – Abzuschneidender Bildbereich auf der rechten Seite in Pixeln
[unten] – Abzuschneidender Bildbereich auf der unteren Seite in Pixeln
[Ausgabe] – Name (und Pfad) der zu schreibenden Datei
[Eingabe] – Name (und Pfad) der neu zu kodierenden Datei

Scan to Donate Bitcoin
Like this? Donate Bitcoin to at:
Bitcoin 17g7tgR4KYKSqS1f8LUCpLEeum4PAcnGbo
Donate

.ts und .mpg Dateien zusammenfügen

Bei manchen Festplattenrecordern erscheinen aufnahmen als eine reihe von *.ts oder *.mpg Dateien an. Diese Dateien lassen sich mit jedem Videoplayer wiedergeben, wenn sie jedoch zusammengefügt werden läuft Ton und Bild langsam auseinander.

Dies wird durch die ungewöhnliche Art verursacht, in der viele Festplattenrecorder die .ts/.mpg Dateien schreiben. Häufig ist im ersten mpeg Frame keine Bildinformation sondern Zusatzinformationen des Rekorders abgelegt, die es zu entfernen gilt.:

 ffmpeg

-ss 00:00:00.2
überspringt die ersten beiden Frames jeder Video-Datei

-i „concat:eins.ts|zwei.ts|…|letzte.ts“
nimmt die zusammengefügten Dateien eins.ts, zwei.ts und letzte.ts als Quelle 0
meint in diesem Zusammenhang nur hier belibig weitere Dateien!

-i „concat:eins.ts|zwei.ts|…|letzte.ts“
nimmt die zusammengefügten Dateien eins.ts, zwei.ts und letzte.ts als Quelle 1

-acodec copy -vcodec copy
Die Audio- und Videospur soll unverändert übernommen werden.

-map 0:0 -map 1:1
Nimmt aus der „Quelle 0“ die Spur 0 (das Video) und aus der „Quelle 1“ die Spur 1 (Audio)

-f mpegts
nimmt als Ausgabeformat das Format MPEG-ts

Am ende folgt die Ausgabedatei, welche Ihr Kontainerformat aus der Dateierweiterung bezieht, in unserem Fall „ausgabe.mkv“. Als Ausgabedatei kann je nach persönlichem Geschmack

Scan to Donate Bitcoin
Like this? Donate Bitcoin to at:
Bitcoin 17g7tgR4KYKSqS1f8LUCpLEeum4PAcnGbo
Donate

DVD to x264 und AAC…

Meist stammen die eigenen Lokalen .mkv Videos von der eigenen DVD Sammlung und sind, da das Video im mpeg2 Format vorliegt, vier bis acht Gigabyte groß. Auch wird, zumindest von meinem XBMC, auf dem Raspberry Pi, MPEG2 nicht Hardware beschleunigt wiedergegeben. (einen Lizenzschlüssel das er es doch kann gibt es auf raspberrypi.com)

Um dies zu beheben können wir die Video-Spur der .mkv Dateien mit hilfe von x264 in ein moderneres Format umwandeln.

1.) Benötigte Software

für das „rippen“ brauchen wir:

zum Transcodieren brauchen wir:

1.) Daten von DVD extrahiert

copy from DVD
decss

2.) Transcodieren

2.1.) Audio

Zuerst die Audio Spuren in das PCM Wave format wandeln:

Anschließend die entstandene wav Datei mit AAC komprimieren:

2.2.) Video

Beim Entfernen der Schwarzen Balken muss man leider Höhe und Breite „MOD16“ festlegen. Die Höhe als auch die Breite müssen ohne rest durch 16 teilbar sein.

–preset slow
–level 4.1
–deblock 0:0 deblocking Filter anschalten
–keyint 300 maximaler Abstand zwischen zwei Key-Frames – 10*FPS
–min-keyint 30 minimaler Abstand zwischen zwei Key-Frames – 1*FPS
–crf 18 Qualität
–tune film voreinstellungen für „Film“ nutzen
–video-filter crop:0,20,0,10 rand links,oben,rechts,unten abschneiden
-o output.mkv Ausgabedatei
Optional
–no-interlaced fals das Quellvideo nicht Interlaced ist

3.) Audio und Video zusammenfügen

mkvmerge

Scan to Donate Bitcoin
Like this? Donate Bitcoin to at:
Bitcoin 17g7tgR4KYKSqS1f8LUCpLEeum4PAcnGbo
Donate

Aktualisieren von FFmpeg und x264

FFmpeg

Um ffmpeg, x264, libx264-dev und yasm zu aktualisieren, wenn diese zuvor mit diese Anleitung eingerichtet wurde müssen diese zuerst deinstalliert werden:
sudo apt-get remove yasm ffmpeg x264 libx264-dev

Jetzt ein Paket nach dem anderen bereinigen, aktualisieren und neu Übersetzen:

yasm

cd /usr/src/yasm
make distclean
git pull
./autogen.sh
./configure --disable-nls --prefix=/usr
make
sudo checkinstall --pkgname=yasm --pkgversion="$(cat YASM-VERSION-FILE)" \
--backup=no --deldoc=yes --fstrans=no --default

x264

cd /usr/src/x264
make distclean
git pull
./configure
make
sudo checkinstall --pkgname=x264 --pkgversion="3:$(./version.sh | awk -F'[" ]' '/POINT/{print $4"+git"$5}')" --backup=no --deldoc=yes --fstrans=no --default

ffmpeg

cd /usr/src/ffmpeg/
make distclean
git pull
./configure --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid --enable-x11grab
make
sudo checkinstall --pkgname=ffmpeg --pkgversion="5:$(./version.sh)" --backup=no --deldoc=yes --fstrans=no --default
hash x264 ffmpeg ffplay ffprobe

Sollten zweifel bestehen ob ffmpeg und x264 korrekt eingerichtet wurden, im Aufruf von x264 –version und im Aufruf von ffmpeg erscheint als „built“-Datum das aktuelle Datum.

Scan to Donate Bitcoin
Like this? Donate Bitcoin to at:
Bitcoin 17g7tgR4KYKSqS1f8LUCpLEeum4PAcnGbo
Donate

Aktuelle FFmpeg und x264 Version Installieren

Abhängigkeiten Installieren

Entfernen der alten Installationen von x264, libx264-dev und ffmpeg.
sudo apt-get remove ffmpeg x264 libx264-dev

Alle für die übersetzung von x264 und FFmpeg notwendigen Pakete holen.
sudo apt-get update
sudo apt-get install build-essential checkinstall git libfaac-dev \
libjack-jackd2-dev libmp3lame-dev libopencore-amrnb-dev \
libopencore-amrwb-dev libsdl1.2-dev libtheora-dev libva-dev \
libvdpau-dev libvorbis-dev libx11-dev \
libxfixes-dev texi2html yasm zlib1g-dev

Der aktuelle Benutzer muss noch in die Gruppe „src“ so das er in /usr/src schreiben darf:
sudo usermod -aG src $(whoami)

YASM holen und Compilieren!

cd /usr/src
git clone https://github.com/yasm/yasm.git
cd yasm
./autogen.sh
./configure --disable-nls --prefix=/usr
make
sudo checkinstall --pkgname=yasm --pkgversion="$(cat YASM-VERSION-FILE)" \
--backup=no --deldoc=yes --fstrans=no --default

x264 Installieren

Die aktuellen Sourcecodes für x264 holen und übersetzen.
cd /usr/src
git clone git://git.videolan.org/x264
cd x264
./configure --enable-static
make
sudo checkinstall --pkgname=x264 --pkgversion="3:$(./version.sh | \
awk -F'[" ]' '/POINT/{print $4"+git"$5}')" --backup=no --deldoc=yes \
--fstrans=no --default

Install libvpx

VP8/WEBM holen und compilieren

sudo apt-get remove libvpx-dev
cd
git clone http://git.chromium.org/chromium/deps/libvpx.git
cd libvpx
./configure
make
sudo checkinstall --pkgname=libvpx --pkgversion="1:$(date +%Y%m%d%H%M)-git" \
--backup=no --deldoc=yes --fstrans=no --default

Installation von FFmpeg

Holen der aktuellsten Version, Compilieren, und Installation von FFMPEG.
cd /usr/src
git clone --depth 1 git://source.ffmpeg.org/ffmpeg
cd ffmpeg
./configure --enable-gpl --enable-libfaac --enable-libmp3lame \
--enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora \
--enable-libvorbis \ --enable-libx264 --enable-nonfree --enable-postproc \
--enable-version3 --enable-x11grab --enable-libvpx
make
sudo checkinstall --pkgname=ffmpeg --pkgversion="5:$(date +%Y%m%d%H%M)-git" \
--backup=no --deldoc=yes --fstrans=no --default
hash x264 ffmpeg ffplay ffprobe

lavf Support zu x264 Hinzufügen.

Der lavf-Support erlaubt x264 alle Input-Dateien anzunehmen die von FFmpeg unterstützt werden. Dies ist sehr praktisch wenn x264 direkt verwendet werden soll.
cd /usr/src/x264
make distclean
./configure --enable-static
make
sudo checkinstall --pkgname=x264 --pkgversion="3:$(./version.sh | \
awk -F'[" ]' '/POINT/{print $4"+git"$5}')" --backup=no --deldoc=yes \
--fstrans=no --default

Hiermit ist die Installation abgeschlossen.
Du solltest die Source-Verzeichnisse von x264, libvpx, und ffmpeg behalten um Sie später einfach aktualisieren zu können. Siehe auch Aktualisieren von FFmpeg und x264 für weitere Informationen.

Um die Änderungen dieser Anleitung rückgängig zu machen und FFmpeg, x264, yasm und alle anderen Pakete aus dieser Anleitung wieder zu entfernen nutze folgendes Kommando:
sudo apt-get autoremove x264 ffmpeg qt-faststart build-essential git checkinstall \
yasm texi2html libfaac-dev libjack-jackd2-dev libmp3lame-dev libsdl1.2-dev \
libtheora-dev libva-dev libvdpau-dev libvorbis-dev libvpx libx11-dev \
libxfixes-dev zlib1g-dev

Scan to Donate Bitcoin
Like this? Donate Bitcoin to at:
Bitcoin 17g7tgR4KYKSqS1f8LUCpLEeum4PAcnGbo
Donate

Shell Videomanipulation / konvertierung

FLV Dateien Zusammenfügen

avidemux2_cli –load in1.flv –append in2.flv \
–audio-codec COPY –video-codec COPY –output-format FLV –save out.flv

FLV in MKV umwandeln

ffmpeg -i in.flv -vcodec copy -acodec copy out.mkv

Video Dateien Zusammenfügen (variante nicht FLV)

cat in1.avi in2.avi|ffmpeg -f mpeg -i - -sameq -vcodec copy -acodec copy out.mkv

FLV Dateien konvertieren

avidemux2_cli –load in.flv –audio-codec aac –video-codec x264 –output-format AVI –save out.avi

MP3 aus Video extrahieren

ffmpeg -i in.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 out.mp3

Video-DVD erstellen

ffmpeg -i in.avi -aspect 4:3 -target pal-dvd dvd.vob
ffmpeg -i in.avi -aspect 16:9 -target pal-dvd dvd.vob
dvdauthor -o ZielVerzeichniss/ -t in1.vob in2.vob in3.vob
dvdauthor -T -o ZielVerzeichniss/

 

Scan to Donate Bitcoin
Like this? Donate Bitcoin to at:
Bitcoin 17g7tgR4KYKSqS1f8LUCpLEeum4PAcnGbo
Donate