Archive for the ‘ffmpeg’ 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…