Wie sollte ich meinen 4K-Videostream codieren?

Ich nehme unkomprimiertes 4K-Video von meiner Sony A7R II über ein Videoaufnahmegerät auf und verwende ffmpeg, um das Video zu speichern.

Mein Problem ist, dass ich nicht weiß, welchen Codec ich verwenden soll. Die beiden Optionen, die ich ausprobiert habe, sind:

  • Unkomprimiert : Dies nimmt zu viel Speicherplatz ein, etwa 1 GB alle paar Sekunden.
  • h264 : Dadurch werden sehr schnell Frames übersprungen. Ich habe es versucht libx264, nvencund qvxsie alle füllen im Wesentlichen den Puffer auf und beginnen dann nach weniger als einer Minute Aufnahme, Frames zu überspringen.

Ich mache das alles auf einem Laptop, daher habe ich wenig Spielraum für das Hinzufügen von Hardwarecodierung, insbesondere wenn man bedenkt, dass die Lösungen von Intel und Nvidia – zumindest auf meinem Computer – für 4K eindeutig unzureichend sind.

Meine Anforderungen sind, dass der Codec Folgendes zulässt:

  • Ungefähr 4-5 Stunden aufgenommenes Filmmaterial passen zuverlässig auf eine 500-GB-SSD
  • Die Kodierung kann in Echtzeit erfolgen, ohne dass Frames ausgelassen werden
  • Der Codec ist postprocessing-freundlich

Nur für den Fall, dass es nützlich ist, mein Laptop hat einen i7-4710MQ und 32 GB RAM.

Update : einige Klarstellungen: Ich nehme mit 30 FPS auf, mein Aufnahmegerät ist INOGENI, das Sampling ist 4:2:0. Und nein, ich möchte nicht mehr Qualität verlieren, als ich muss. Wenn ich 100 GB/Stunde für die Aufnahme aufwenden muss, bin ich damit einverstanden.

Welche ffmpeg-Befehle haben Sie versucht? Nimmst du auch Ton auf? Wissen Sie, welches Chroma-Sampling die Kamera ausgibt? Ich nehme an, Sie führen ein HDMI von der Kamera zu Ihrem Laptop.
Zusätzlich zum Chroma-Subsampling (4:2:0 oder 4:2:2 oder 4:4:4) geben Sie bitte die Frames pro Sekunde genau an.
Bitte fügen Sie auch Ihre Priorität zwischen Qualitätsverlust oder Verringerung der Aufnahmekapazität hinzu
@RawBean hat Klarstellungen hinzugefügt
@Mulvya Ich habe Dinge ausprobiert wieffmpeg -f dshow -rtbufsize 2000M -video_size 3840x2160 -i video="2318-INOGENI 4K2USB3":audio="Digital Audio Interface (2318-INOGENI 4K2USB3)" -c:v nvenc -preset slow -loglevel info r:\4k.mp4
Ein paar Dinge: Ich gehe davon aus, dass die direkte Aufzeichnung auf SD-Karten nicht akzeptabel ist - die Kamera speichert XAVC-S als 100-Mbit / s-Stream auf SD-Karten, dh 5 Stunden in ~ 225 GB. Genauer gesagt haben Sie die langsame Voreinstellung angewendet - ffmpeg muss in der Lage sein, Pakete schnell genug zu verbrauchen. Verwenden Sie libx264mit veryfastoder ultrafastvoreingestellt und Profil mainoder baseline.
@ Mulvya ha! Eine direkte Aufnahme auf SD ist wegen der schrecklichen 30-Minuten-Grenze unmöglich. das killt die ganze Sache geradezu.
@Mulvya veryfastscheint zu funktionieren, alles langsamere nicht

Antworten (1)

Wie von @Mulvya erwähnt, denke ich, dass das Problem die Voreinstellung "langsam" ist.

Eine Möglichkeit besteht darin, einen komprimierten Stream zu codieren, der ebenfalls verlustfrei ist. Der x264-Encoder kann dies beispielsweise mit "-preset ultrafast -qp 0" tun. Dies wird wahrscheinlich dazu führen, dass Ihre dritte Anforderung (Kompatibilität) nicht bestanden wird, aber da es verlustfrei ist, können Sie später auf billige sich drehende Festplatten umcodieren. Sie können auch den verlustfreien Huffyuv-Encoder verwenden, der möglicherweise besser unterstützt wird. Bei dieser Methode gibt es einige Fallstricke, daher sollten Sie Ihren Workflow auf jeden Fall von Anfang bis Ende testen. Siehe insbesondere diese Frage: Die Verwendung von h264 im loseless-Modus bringt kleine unerwartete Ergebnisse

Wenn Sie diesen Weg gehen, würde ich auch damit experimentieren, Subsampling fallen zu lassen und mit 4:4:4 zu codieren. Es erhöht Ihre Dateigröße möglicherweise nicht so stark und hilft Ihnen, wenn Sie vorhaben, Nachbearbeitungsarbeiten durchzuführen.

Eine weitere Option, abhängig von Ihrem Budget, ist der Kauf eines Encoders. Ich liebe FFmpeg, aber es soll überall funktionieren und nicht Ihre Hardware voll ausnutzen. Mainconcept ist nicht zu teuer und wird besser in der Lage sein, den i7-Prozessor zu verwenden, für den Sie bereits geschält haben. (Siehe zum Beispiel https://software.intel.com/en-us/articles/using-the-intel-media-sdk-within-mainconcept-h264avc-encoder-for-intel-quick-sync-video .) Sie bieten auch einen HEVC-Encoder an, der Ihre Dateigröße weiter verringern würde. Ich kann jedoch nicht für die Qualität bürgen, da meine Erfahrung mit Ateme ist. Aber ich glaube, Sie können es zumindest kostenlos auswerten.

x264 erzeugt eine verlustfreie Ausgabe. Ich habe eine Antwort auf die von Ihnen verlinkte Frage hinzugefügt.