Wie liest man 10-Bit-RGB-Werte aus HDR-Videos?

Ich hatte ein HDR-Video und das Format ist ProRes. Die Farbtiefe von ProRes beträgt 10 Bit. Ich möchte die 10-Bit-RGB-Werte aus dem HDR-Video extrahieren.

Gemäß diesem Link habe ich zuerst das 10-Bit-HDR-Video in eine Reihe von 16-Bit-TIFF-Bildern konvertiert. Wenn ich jedoch ein Programm wie Python verwende, um die RGB-Werte aus dem TIFF-Bild zurückzulesen, sind einige der 16-Bit-RGB-Werte größer als 1024 (= 2 ^ 10). Es scheint mir, dass der 10-Bit-RGB-Wert auf 16-Bit erweitert wurde und den erweiterten Wert im TIFF-Bild speichert, aber ich bin mir nicht sicher, ob dies der Fall ist. Wie kann ich die ursprünglichen 10-Bit-RGB-Werte aus den im TIFF-Bild gespeicherten 16-Bit-RGB-Werten erhalten?

Antworten (1)

Der ProRes-Eingang hat YUV-Kodierung, nicht RGB. Wenn Sie einen Raw-Dump benötigen, speichern Sie ihn als Rawvideo.

ffmpeg -i in.mov -f rawvideo raw.yuv

Beachten Sie, dass Bittiefen, die keine Vielfachen von 8 sind, immer noch in Datenlayouts gespeichert werden, die mit Auffüllung versehen sind. Wenn also ProRes yuv422p10le im eingeschränkten / Studio-Bereich ist, beträgt der 10-Bit-Luma-Wert für ein weißes Pixel 940 oder 1110101100wird als 16-Bit in der Datei gespeichert: 1110110000000011wobei die Reihenfolge Little-Endian ist.

Sie können jedoch als RGB 10-Bit (mit Polsterung) speichern.

ffmpeg -i in.mov -pix_fmt gbrp10be -f rawvideo raw.rgb

wo die grüne Ebene zuerst gespeichert wird, dann blau, dann rot. Das Obige gilt für Big-Endian, sodass die Byte-Reihenfolge nicht umgekehrt wird.

Entschuldigung für die späte Antwort. Wenn ich den zweiten ffmpeg-Befehl verwende, um die Datei mit dem RGB-10-Bit-Format als „raw.rgb“ zu konvertieren, wie kann ich dann „raw.rgb“ in ein TIFF-Bild konvertieren? Ich habe es versucht ffmpeg -f rawvideo -pix_fmt gbrp10be -i raw.rgb -f image2 img%05d.tif, aber es beschwert sich[IMGUTILS @ 015ff914] Picture size 0x0 is invalid raw.rgb: Invalid argument
Ersetzen -f rawvideo raw.rgbdurchout.tiff
Es wird die folgende Warnung angezeigt Incompatible pixel format 'gbrp10be' for codec 'tiff', auto-selecting format 'rgb48le'und ich habe das Python-Programm verwendet, um die Bilder zu lesen, aber die Werte sind nicht 10-Bit.
Kann Ihre App nur TIFFs lesen?
Ich schreibe ein Python-Programm, um die RGB-Werte aus dem 10-Bit-HDR-Video zu lesen. Ich hatte vor, das Video in eine Reihe von Bildern umzuwandeln und die 10-Bit-RGB-Werte auszulesen. Anfangs dachte ich, dass tiff 16-Bit-Werte speichern kann, sodass es zum Speichern der 10-Bit-HDR-Frames geeignet ist. Leider scheint ffmpeg keinen TIFF-Codec zu haben, um das gbrp10beFormat zu unterstützen. Alle alternativen Vorschläge sind willkommen, solange ich die 10-Bit-RGB-Werte aus dem HDR-Video lesen kann.