Die FFmpeg-Aufnahme friert mitten in der Aufnahme ein und der Rest des Filmmaterials fehltPython

Python-Programme
Anonymous
 Die FFmpeg-Aufnahme friert mitten in der Aufnahme ein und der Rest des Filmmaterials fehlt

Post by Anonymous »

Ich versuche seit ein paar Monaten, eine Anwendung zu erstellen, die Ihren Bildschirm automatisch aufzeichnet. Allerdings ist mir ein Problem aufgefallen, das meine Benutzer gemeldet haben, und ich bin mir einfach nicht sicher, wie ich damit umgehen soll. Wir verwenden FFmpeg in meiner App und FFmpeg funktioniert gut, aber wenn es den Bildschirm aufzeichnet, friert es irgendwann ein, also habe ich mich einfach für den Wechsel zu OBS entschieden, aber den Leuten gefällt es nicht, dass man OBS verwenden muss, um eine ordnungsgemäße Aufnahme zu erhalten.
Also, hier ist mein Code:

Code: Select all

        if helpers.os_is_windows():
command = [
helpers.get_path(helpers.get_app_folder(), helpers.get_config("PATH_FFMPEG_WINDOWS")), "-y",
"-f", "dshow",
"-i", "video=screen-capture-recorder:audio=virtual-audio-capturer",
"-vf", f"crop={width}:{height}:0:0,format=yuv420p",
"-c:v", "libx264",  # Use H.264 codec for video
"-preset", "ultrafast",  # Use ultrafast preset for faster encoding (lower CPU usage)
"-crf", "23",  # Constant Rate Factor for good quality (lower is better, 23 is default)
"-pix_fmt", "yuv420p",  # Ensure compatibility with most players
"-c:a", "aac",  # Use AAC codec for audio
"-b:a", "128k",  # Set audio bitrate to ensure good quality
"-ar", "44100",  # Set audio sample rate to avoid bass boosting or distortion
output,
]
elif helpers.os_is_linux():
command = [
helpers.get_path(helpers.get_app_folder(), helpers.get_config("PATH_FFMPEG_LINUX")), "-y",
"-f", "x11grab",
"-s", f"{width}x{height}",
"-i", ":0.0",
"-f", "pulse",
"-i", "alsa_output.pci-0000_00_1b.0.analog-stereo.monitor",
"-ac", "2",
"-c:v", "libx264",
"-preset", "ultrafast",
"-crf", "23",
"-pix_fmt", "yuv420p",
"-c:a", "aac",
"-b:a", "128k",
"-ar", "44100",
output,
]
else:
logger.error("Unsupported OS")
return False
Ich konzentriere mich eigentlich nur auf den Windows-Teil – die Linux-Version, über die ich noch keine Berichte erhalten habe, also gehe ich davon aus, dass sie nicht kaputt ist, bin mir aber nicht sicher.
Der Befehl für Windows führt zu diesem Befehl:

Code: Select all

ffmpeg -y \
-f dshow \
-i "video=screen-capture-recorder:audio=virtual-audio-capturer" \
-vf "crop={VIDEO_WIDTH}:{VIDEO_HEIGHT}:0:0,format=yuv420p" \
-c:v libx264 \
-preset ultrafast \
-crf 23 \
-pix_fmt yuv420p \
-c:a aac \
-b:a 128k \
-ar 44100 \
"{OUTPUT_FILE_PATH}"
Ich verwende den Directshow-Treiber, der im FFmpeg-Wiki erwähnt wird.
Ich vermute, dass FFmpeg nicht mehr über genügend Speicher verfügt, es beendet die Aufnahme von Frames, weil es nicht alle speichern kann, und ich habe ein Update für die App veröffentlicht, das es dem Benutzer ermöglicht, die Aufnahme mit 60 fps auszuführen, früher waren es etwa 24 fps, weshalb ich zu diesem Schluss gekommen bin, denn danach Update, dieser Fehler tritt häufiger auf.
Könnte mir jemand eine Anleitung geben? Ich bin hier ratlos und würde mich über Hilfe freuen. Vielen Dank an alle, die sich die Zeit nehmen, mir zu helfen!
Bearbeiten: Ich wollte diese Änderung nur vornehmen, mir ist klar, dass sie diesen Fehler ausgibt:

Code: Select all

real-time buffer [screen-capture-recorder] [video input] too full or near too full (545% of size: 3041280 [rtbufsize parameter])! frame dropped!

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post