updated:  2024 10. July
published:  2020 09. December

FFMPEG - Video, Audio, Streaming, Codecs, Konvertierung.

FFMPEG - Programm zum bearbeiten, streamen, konvertieren von Video und Audiomaterial.

Bildschirmaufnahme mit ffmpeg

ffmpeg als Bildschirmaufnahmegerät in Linux

 # Bildschirmauflösung ermitteln
 current=`xrandr -q 2>/dev/null | grep "*" | awk '{ print $1}'`;

 # Desktopaufnahme mit Audio 
 ffmpeg -hide_banner \
        -f alsa \
        -i default \
        -video_size $current \
        -f x11grab \
        -framerate 30 \
        -probesize 42M \
        -i :0.0 \
 	/tmp/output.mp4

Um bei einer Desktopaufnahme den Audiostream anstatt vom Mikrofon direkt vom Lautsprecher in ffmpeg zu transportieren, ist der Lautstärkekontroller von PulsAudio pavucontrol notwendig.

Bildschirmaufnahme mit ffmpeg unter Windows

Lade dir die Windowsbinarys von der ffmpeg-Seite runter. Die unten aufgeführten Beispiele nutzen die Releaseversion 5.1.2 von gyan.dev.

Desktopaufnahme mit ffmpeg ohne Audio.


@echo off
set PATH_FFMPEG=%~dp0
echo %PATH%  | find /C /I "%PATH_FFMPEG%"   || @echo 'Das Verzeichnis: %PATH_FFMPEG% wird in die PATH-Umgebungsvariable aufgenommen.' && set PATH=%PATH%;%PATH_FFMPEG%

rem ffmpeg.exe -list_devices true -f dshow -i dummy -hide_banner

cmd.exe /C		^
  ffmpeg.exe		^
	-f gdigrab 	^
 	-draw_mouse 1	^
 	-framerate 25	^	
 	-i desktop 	^
 	-f dshow 	^
 	output.mp4


@echo off
cls

mode con cols=160 lines=20
title Desktopaufnahme mit ffmpeg

::set PATH_FFMPEG=m:\bin\ffmpeg\ffmpeg-5.1.2-full_build
set PATH_FFMPEG=c:\Users\%USERNAME%\LK-SPN\bin\ffmpeg\ffmpeg-5.1.2-full_build

echo %PATH%  | find /C /I "%PATH_FFMPEG%\bin"   || @echo 'Das Verzeichnis: %PATH_FFMPEG%\bin   wird in die PATH-Umgebungsvariable aufgenommen.' && set PATH=%PATH%;%PATH_FFMPEG%\bin
echo %PATH%  | find /C /I "%PATH_FFMPEG%\tools" || @echo 'Das Verzeichnis: %PATH_FFMPEG%\tools wird in die PATH-Umgebungsvariable aufgenommen.' && set PATH=%PATH%;%PATH_FFMPEG%\tools

:: Exe in Variable
set FFMPEG=%PATH_FFMPEG%\bin\ffmpeg.exe

set CURTIME=%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%-%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%
setlocal enabledelayedexpansion
set CURTIME=!CURTIME:^ =0!
setlocal disabledelayedexpansion
Set AufnahmeDatei=%USERPROFILE%\Videos\DesktopAufnahme_%CURTIME%

Set WorkPath=%~dp0
Set FILE.OUT="%WorkPath%\dxdiag.out.%RANDOM%.txt"
Set resolutionX=1920
Set resolutionY=1200

where.exe /Q dxdiag.exe
if %errorlevel% equ 0 (
	echo.
	echo Suche Bildschirmaufloesung mit dxdiag.exe 
	echo - Bitte warten -
	echo.
	echo.
	start /WAIT /B dxdiag.exe /whql:off /t %FILE.OUT%
	FOR /F "tokens=3,5" %%A IN ('findstr /C:"Current Mode:" %FILE.OUT%') DO (
		set resolutionX=%%A
		set resolutionY=%%B
		)
	) 
if exist %FILE.OUT% del %FILE.OUT%
												
echo Verwende Aufloesung: %resolutionX% x %resolutionY%
echo.
echo Starte Desktopaufzeichnung in Datei: %AufnahmeDatei%
echo Stoppe Desktopaufzeichnung mit der Tastenkombination: [Strg]+[C]
echo.

pause
echo Los geht's.

 cmd.exe /C 						^
	%FFMPEG%					^
 	-hide_banner					^
	-f gdigrab					^
 	-hwaccel dxva2 					^
 	-rtbufsize 2000M 				^
 	-draw_mouse 1					^
 	-framerate 30					^
 	-thread_queue_size 32 				^
 	-probesize 42M 					^
	-video_size %resolutionX%x%resolutionY% 		^
	-i desktop 						^
	-f dshow 						^
	-vcodec h264 -crf 0 -preset ultrafast -b:v 2400k 	^
	-vf mpdecimate 						^
	-f segment -segment_time 120 -reset_timestamps 1 	^
  	%AufnahmeDatei%_%%003d.mp4


Desktopaufnahme mit ffmpeg mit Audioton.

Um den Audioton bei Streamingdiensten wie Youtube aufzunehmen, muss bei Windows 10 erst das Mikrofon eingeschaltet werden.


 start ms-settings:privacy-microphone

Im Weiteren muss das Audioausgabegerät ermittelt werden.


 ffmpeg.exe -list_devices true -f dshow -i dummy -hide_banner

 [dshow @ 000002c2e5602580] DirectShow video devices (some may be both video and audio devices)
 [dshow @ 000002c2e5602580] Could not enumerate video devices (or none found).
 [dshow @ 000002c2e5602580] DirectShow audio devices
 [dshow @ 000002c2e5602580]  "Stereomix (Realtek High Definition Audio)"
 [dshow @ 000002c2e5602580]     Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{CB94CC19-6B83-4657-B22A-8FCE4F13E0AD}"
 dummy: Immediate exit requested

Das Audioausgabegerät ist demnach:


 Stereomix (Realtek High Definition Audio)   
 Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{CB94CC19-6B83-4657-B22A-8FCE4F13E0AD}"

Das Audiogerät wird mit seinem alternativen Namen der ffmpeg-Option: -i audio übergeben.


 -i audio="@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{CB94CC19-6B83-4657-B22A-8FCE4F13E0AD}"

Hier nochmal der Code für Desktopaufnahme mit ffmpeg und Audio.

ffmpeg als Bildschirmaufnahmegerät in Windows mit Audioton

 @echo off
 set PATH_FFMPEG=%~dp0
 echo %PATH%  | find /C /I "%PATH_FFMPEG%"   || @echo 'Das Verzeichnis: %PATH_FFMPEG% wird in die PATH-Umgebungsvariable aufgenommen.' && set PATH=%PATH%;%PATH_FFMPEG%


 rem ffmpeg.exe -list_devices true -f dshow -i dummy -hide_banner

 cmd.exe /C		^
   ffmpeg.exe		^
 	-f gdigrab 	^
 	-draw_mouse 1	^
 	-framerate 25	^
 	-i desktop 	^
 	-f dshow 	^
 	-i audio="@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{CB94CC19-6B83-4657-B22A-8FCE4F13E0AD}" ^
 	output.mp4

Nach mehrmaligen herum probieren ist letztendlich folgendes Windowsscript entstanden.

Bildschirmaufnahmegerät mit Audio und Dateispliting

@echo off
cls
set PATH_FFMPEG=m:\bin\ffmpeg\ffmpeg-5.1.2-full_build

echo %PATH%  | find /C /I "%PATH_FFMPEG%\bin"   || @echo 'Das Verzeichnis: %PATH_FFMPEG%\bin   wird in die PATH-Umgebungsvariable aufgenommen.' && set PATH=%PATH%;%PATH_FFMPEG%\bin
echo %PATH%  | find /C /I "%PATH_FFMPEG%\tools" || @echo 'Das Verzeichnis: %PATH_FFMPEG%\tools wird in die PATH-Umgebungsvariable aufgenommen.' && set PATH=%PATH%;%PATH_FFMPEG%\tools


:: Exe in Variable
set FFMPEG=%PATH_FFMPEG%\bin\ffmpeg.exe

:: Datum und Uhrezeit fuer Dateinamen
set CURTIME=%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%-%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%
setlocal enabledelayedexpansion
set CURTIME=!CURTIME:^ =0!
setlocal disabledelayedexpansion
Set AufnahmeDatei=m:/DesktopAufnahme_%CURTIME%

:: Miteilung
msg %USERNAME% /W "Ganz Wichtig: Mit USB Kopfhoerer wird kein Ton aufgezeichnet. Wenn du also dein Jabra Headset hast, stecke einfach den Kopfhoerer in die Kopfhoererbuchse des PC.'s"

:: Mikrophone einschalten
msg %USERNAME% /W "Zuerst muss der Zugriff auf das Mikrofon erlaubt werden."
start /WAIT ms-settings:privacy-microphone
pause

:: Lautstaerkepegel einstellen
msg %USERNAME% /W "Stelle den Lautstaerkepegel des Laufsprechers ein."
start /WAIT ms-settings:apps-volume
pause

msg %USERNAME% /W "Starte Desktopaufzeichnung mit Ton. %AufnahmeDatei%   Stop mit [Strg]+[C]  - Aufnahmedatei wird fortlaufend gesplitet."

 cmd.exe /C 			^
 %FFMPEG% 			^
 	-hide_banner 		^
 	-hwaccel dxva2 		^
 	-rtbufsize 2000M 	^
 	-f gdigrab 		^
 	-draw_mouse 1 		^
 	-framerate 30 		^
 	-thread_queue_size 32 	^
 	-probesize 42M 		^
	-video_size 1920x1200 	^
	-i desktop 		^
	-f dshow 		^
	-i audio="@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{CB94CC19-6B83-4657-B22A-8FCE4F13E0AD}" ^
	-vcodec h264 -crf 0 -preset ultrafast -b:v 2400k 	^
	-vf mpdecimate 						^
	-f segment -segment_time 120 -reset_timestamps 1 	^
  	%AufnahmeDatei%_%%003d.mp4


Link1

Stichworte (tags)