Archive for the ‘Video’ Category

Windows Desktop mit FFMPEG aufzeichnen

28 Februar 2019

Um mal schnell etwas in Windows als Video aufzuzeichnen gibt es viele verschiedene Möglichkeiten. Bei Windows 10 gibt es mittlerweile die GameBar bzw. Spielleiste aus dem App-Store. Allerdings kann die Spielleiste nur 3D Spiele oder Anwendungen aufzeichnen, also braucht man etwas anderes. Da kommt FFMPEG zur Hilfe,das ultimative Werkzeug wenn es um Video-oder Audio-Dateien geht. https://ffmpeg.zeranoe.com/builds/.

Um nun den Desktop aufzuzeichnen verwendet man

.\ffmpeg.exe -f gdigrab -draw_mouse 1 -framerate 30 -i desktop -f dshow -i audio="@device_cm_{33455762-9558-1340-BD43-34453454CE86}\wave_{E3453455-0445-4D3F-92FF-573453453E3E}" output.mp4

Zum Beenden der Aufzeichnung holt man das Fenster mit obigem Befehl wieder in den Vordergrund und bricht die Aufzeichnung mittels STRG+C ab. Die Aufzeichnung landet in output.mp4 im aktuellen Verzeichnis.

Durch die Angabe von –f gdigrab und –f dshow benutzt man zwei Filter, einmal für die Videoaufzeichnung mit –i desktop und bei –i audio… für die Audioaufzeichnung.

Der Parameter –draw_mouse 1 zeichnet die Maus mit auf, bei –draw_mouse 0 würde die Maus nicht mitaufgezeichnet.

Um den Mauszeiger größer zu bekommen verwendet man

start main.cpl

bzw. unter Windows 10 gleich

start ms-settings:easeofaccess-mouse

Für die Soundeinstellunge um z. B. das Mikrofon anzupassen verwendet man

start mmsys.cpl

control /name Microsoft.Sound

oder unter Windows 10

start ms-settings:sound

Zur Ermittlung der zur Verfügung stehenden Audioquellen verwendet man diesen Befehl:

ffmpeg -list_devices true -f dshow -i dummy

Dabei kann das Problem entstehen, dass ein Umlaut wie im Wort Kopfhörer zu Windows-typischen Problemen führt, wie hier:

[dshow @ 0000354540145480]  "Kopfh├Ârermikrofon (Plantronics Blackwire 5220 Series)"
[dshow @ 00000114d01e8a80]     Alternative name "@device_cm_{33455762-9558-1340-BD43-34453454CE86}\wave_{E3453455-0445-4D3F-92FF-573453453E3E}"

Die Zeichen ├ sollte eigentlich ein ö für Kopfhörer sein. In solch einem Fall verwendet man den alternativen Namen:

"@device_cm_{33455762-9558-1340-BD43-34453454CE86}\wave_{E3453455-0445-4D3F-92FF-573453453E3E}"

Hier noch die offizielle Doku zur Desktopaufzeichnung: https://trac.ffmpeg.org/wiki/Capture/Desktop und zu DirectShow: https://trac.ffmpeg.org/wiki/DirectShow. Sowie https://ffmpeg.org/ffmpeg.html#Video-and-Audio-grabbing.

Werbeanzeigen

Wie kann man m3u8 Dateien in Powershell herunterladen

30 August 2018

Leider ist m3u8 kein eindeutig definiertes Format. Aber es wird oft für Streaming von MP4 und ähnlichen verwendet.

Hier ein einfaches Beispiel wie man die Teile aus einer .m3u8-Datei mittels Powershell herunterladen kann:

$m3u8 = "http://irgendwoher.net/Video.m3u8"
$m3u8Local = ".\video.m3u8"
Invoke-WebRequest -UseBasicParsing –Uri $m3u8 –OutFile $m3u8Local

Die m3u8-Datei besteht dann aus irgendwelchen Textzeilen:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:7
#EXT-X-MEDIA-SEQUENCE:1
#EXT-X-PLAYLIST-TYPE:VOD
#EXTINF:6.006,
afis4sqr_00103518-16×9-720p-720p-3000k_00001.ts
#EXTINF:6.006,
afis4sqr_00103518-16×9-720p-720p-3000k_00002.ts
#EXTINF:6.006,
afis4sqr_00103518-16×9-720p-720p-3000k_00003.ts
#EXT-X-ENDLIST

Die TS-Dateien sind Sequenzen aus der MP4-Datei. Man erhält alle TS-Eintragungen z. B. so:

$ts = Get-Content $m3u8Local | where {$_ -notmatch "#.*"}

Damit werden alle Kommentarzeilen, die mit # beginnen entfernt.

Nun muss man aus $m3u8 Url den Stammpfad ermitteln.

$url = $m3u8.Substring(0,$m3u8.LastIndexOf(‚/‘))

Nun kann man mit dem Stammpfad von $m3u8 und den TS-Dateinamen die einzelnen Teile herunterladen:

$ts | % {Invoke-Webrequest -UseBasicParsing -Uri "$url/$_" -OutFile $_ -Verbose}

Um am Ende aus den einzelnen .TS-Dateien eine komplette .MP4-Datei zu bekommen kann man z. B. FFMPEG benutzen: https://www.ffmpeg.org/download.html. So bekommt man mit diesem Aufruf eine MP4-Datei:

.\ffmpeg.exe –i $m3u8Local -c copy -bsf:a aac_adtstoasc video.mp4

Man hätte aber auch hergehen können und gleich alles ffmpeg überlassen Zwinkerndes Smiley:

ffmpeg –i $m3u8 -c copy -bsf:a aac_adtstoasc .\video.mp4

Aber über den Umweg Powershell war es doch viel schöner. Vor allem hat die Powershell-Lösung auch den Vorteil, dass man die Headerzeilen und den Agenten verändern kann, falls nötig. Ach? Das geht mit ffmpeg auch? Na egal…

VLC Player Logging über Eingabeaufforderung um Probleme beim Streaming zu lösen

6 Juli 2012

Ist leider ein etwas komplizierteres Thema. Es gibt zuhauf Dinge im VLC Player die toll sind aber wenn sie nicht funktionieren, für dauernde Frustration sorgen. Es gibt soviel im Internet über mögliche Probleme und wie etwas funktioniert aber wenn es hart auf hart kommt fehlen die Erklärungen. Siehe auch: https://newyear2006.wordpress.com/2010/12/30/vlc-playerkann-alles-aber-keiner-versteht-ihn/

Zu allererst, ist es wichtig zu wissen, dass der VLC Player auf verschiedenen Plattformen läuft. Dies muss man immer im Hinterkopf behalten, wenn man sich an Sachen wie Kommandozeilenparameter heranmacht.

Dabei spielt es teilweise eine Rolle ob man dann Parameter mittels ‚ oder " angibt.

Um Probleme generell zu lösen, gibt es über das Menü Extras->Meldungen die Möglichkeit den Verboselevel einzustellen. Ist dieser aktiviert, werden ab diesem Zeitpunkt verschiedene Informationen und vor allem Fehler aufgezeichnet. Damit Fehler auch aufgezeichnet werden sollte der Verboselevel zumindest auf 1-Warnungen gestellt werden.

Wer nun aber nicht jedes Mal in der GUI herumturnen möchte, sondern direkt per Eingabeaufforderung zum Ziel kommen will, der verwendet folgende Parameter:

–verbose=1 –file-logging –logfile=<Datei>

Dabei setzt man anstatt <Datei> einen Dateinamen.

Wichtig ist, ab Windows Vista einen Dateinamen in einem Pfad anzugeben, für den man auch Schreibrechte hat. Was bei “C:\Program Files\VideoLAN\VLC” oder “C:\Program Files (x86)\VideoLAN\VLC” nicht standardmäßig der Fall ist!

Ein Aufruf könnte also so aussehen:

vlc.exe MeinFilm.avi :sout=#transcode{vcodec=h264,vb=800,scale=1,acodec=mpga,ab=128,channels=2,
samplerate=44100}:std{access=udp{ttl=1},dst=192.168.10.72:1234} :sout-keep  –verbose=1 –file-logging –logfile=C:\temp\vlc.log

Ein gern gesehener Fehler, ist z. B. beim Versuch etwas über ein Netz zu streamen, dieser:

error: no mux specified or found by extension

Dieser kann anscheinend auch die zu Anfang aufgeführte Tatsache mit den oberen Anführungsstrichen haben, siehe: http://wiki.videolan.org/Documentation:Streaming_HowTo/Streaming_
for_the_iPhone
.

Die aber wahrscheinlichere Ursache dürfte am verwendeten Codec bzw. Mux liegen. Dazu ist bei Streamingproblemen hilfreich auf dieser Seite nachzuschauen, was geht und was nicht: http://www.videolan.org/streaming-features.html. Es werden schön die unterschiedlichen Kombinationen dargestellt.

Dort steht dann auch, dass z. B. das Streaming über UDP nur über einen TS muxer funktioniert. Man muss bei Verwendung von UDP immer darauf achten, dass ein (TS) in der GUI steht oder eben mux=ts angeben. Im Zweifelsfall muss ein Video also zuerst transcodiert werden, damit es dieses Format unterstützt, hiermit klappts:

vlc.exe MeinFilm.avi :sout=#transcode{vcodec=h264,vb=800,scale=1,acodec=mpga,ab=128,channels=2,
samplerate=44100}:std{access=udp{ttl=1},mux=ts,dst=192.168.10.72:1234} :sout-keep –verbose=1 –file-logging –logfile=C:\temp\vlc.log

Videos aus Youtube im H.264 oder im WebM Format downloaden zur Offlineverwendung

31 Oktober 2011

Wer hat das nicht schon Mal gebraucht. Ein Video von Youtube downloaden und offline speichern. Nicht jeder ist mit einer fetten Bandbreite belohnt und da macht es oft Sinn ein Video herunterzuladen. Mal abgesehen von rechtlichen Aspekten ist es quasi mit Bordmitteln möglich.

Benötigt wird Chrome Browser, hier beim Test war es Version 15. Mit diesem fährt man die Seite

http://youtube.de/html5

an. Dort klickt man unten den kleinen Link Am HTML5-Test teilnehmen an, falls nicht bereits aktiviert.

Nun klickt man sein Lieblingsvideo an, z. B.: http://www.youtube.com/watch?v=9BrLrwbkQWQ

Während das Video abgespielt wird, klickt man mit der rechten Maustaste auf das Video. Es wird ein Kontextmenü mit diesen Punkten dargestellt:

  • Video-URL an dieser Stelle kopieren
    Bingebetteten HTML-Code kopieren
    Problem bei der Wiedergabe melden
    Debug-lnformationen kopieren
    Download beenden
    Geschwindigkeitstest durchführen
    Über HTML5

Hier klickt man auf Debug-Informationen kopieren. Nun öffnet man Notepad und fügt dort die Zwischenablage ein. Es werden ein paar Json Variablen dargestellt. Davon wird der Link der mittels http:// beginnt benötigt. Im obigen Beispiel wars:

http://o-o.preferred.twtelecom-dfw1.v15.lscache1.c.youtube.com/videoplayback?sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Csource%2Cratebypass%2Ccp&fexp=904522%2C905241&itag=43&ip=64.0.0.0&signature=5DEEAD1814E0ACE
109CB9B5814546EB92DD6B4C4.1D3180E38CAC67AFED264828
482EA07D2865037E&sver=3&ratebypass=yes&source=youtube
&expire=1320105600&key=yt1&ipbits=8&cp=U0hRRVFLU19FSkN
OMV9JRVdHOlRLNmJ4MHQ4NGk2&id=f41acbaf06e44164

Wenn man diesen Link nun kopiert und in einem separaten Chrome Tab einfügt, so wird nur das Video dargestellt. Obiger Link funktioniert wahrscheinlich nicht, da nur temporär verfügbar. Deshalb nach obiger Methode seinen eigenen Link erzeugen!

Spielt nun der Browser den direkten Link ab, kann man mittels rechter Maustaste auf das Video klicken und dort gibt es nun den Punkt “Video speichern unter”. Darüber lässt sich das Video problemlos lokal speichern.

Schön aber was soll ich mit Googles Video Format anfangen? Ich will H.264! Auch dies ist möglich. Man benötigt nur z. B. den Internet Explorer 9, denn dieser unterstützt noch nicht das Google-WebM-Videoformat. Wenn man sich also das ursprüngliche Video mittels IE9 darstellen lässt, wird einem dies in der Regel mittels H.264 präsentiert. Nun kopiert man sich davon die Debuginformationen und fügt den gewonnen Link dann wieder in ein neues Tab ein und los geht die Show.