Größte Eingangsbildgröße beim Codieren eines Videos?

Ich habe eine Reihe wirklich großer 16-Bit-Videos mit einer Größe von annähernd 65535 × 65535 Pixel erhalten. Dies sind im Wesentlichen hochwertige Zeitraffer-Panoramen. Ich möchte sie in einen 7680×4320-Film (8K UHD, 8 Bit) konvertieren. Ich bin nicht allzu besorgt über das Format, aber ich möchte eine Art Komprimierung.

Ich denke, ich kann die Bilder mit Python skalieren, um sie auf HEVC (8192 × 4320) zu bringen ...

Gibt es etwas, das (mit VLC?) Wiedergeben kann, das eine größere Anzahl von Pixeln als 8192 × 4320 verarbeiten kann? Welche Möglichkeiten habe ich?

Wenn ich versuche, FFmpeg zu verwenden, erhalte ich Fehler wie:

[mjpeg @ 000000000062eae0] [IMGUTILS @ 000000000023ed40] Picture size 20000x19824 is invalidN/A
Error while decoding stream #0:0: Invalid data found when processing input
Jeder Player, der auf ffmpeg/libav basiert, wird wahrscheinlich fehlschlagen, wenn ffmpeg dies tut. Sie müssen das Video verkleinern und dann konvertieren. Da Ihre Eingabe MJPEG ist, können Sie versuchen, die Frames verlustfrei als Bildsequenz zu extrahieren. Verkleinern Sie mit einer anderen App (imagemagick?) Und codieren Sie dann das Ergebnis.ffmpeg -i in.mov -c copy frames%d.jpg
Ich würde mir vorstellen, dass es unabhängig von der Software Hardwarebeschränkungen bei der Wiedergabe dieser Dateien geben könnte.

Antworten (1)

FFmpeg stolpert bei dieser Aussage Imgutils.cin Funktionav_image_check_size()

if ((int)w>0 && (int)h>0 && (w+128)*(uint64_t)(h+128) < INT_MAX/8) return;  [ else error() ]

wobei INT_MAXin je nach Compiler limits.hmindestens 32767( ) oder größer definiert ist.2^15-1

Das Kompilieren mit einem 64-Bit-Compiler ermöglicht größere Bilder.

Es stolpert bei (int)w<=0 || (int)h<=0 || stride >= INT_MAX || stride*(uint64_t)(h+128) >= INT_MAXUnd INT_MAX ist auf 2^31-1 fixiert. Auf welche Compiler-Limits.h beziehst du dich? Meins ist GCC 6.3.0. Ich habe 64-Bit-ffmpeg mit einer 64-Bit-Toolchain kompiliert und erhalte auch den gleichen Fehler für die Größe des OP.
Tatsächlich ist die von Ihnen zitierte Anweisung im aktuellen Code nicht vorhanden. Die von mir zitierte ist und wurde dort im Dezember 2016 hinzugefügt.
@Mulvya - en.m.wikibooks.org/wiki/C_Programming/C_Reference/limits.h - Der Standard besagt, dass ein größerer Wert zulässig ist. Dass INT_MAX ein Mindestwert unter dem Standard ist (Kein konformer C-Compiler kann einen niedrigeren Wert haben. Weiteres Googeln zeigt, dass die Größe einiger Betriebssysteme 64 Bit beträgt. Ich akzeptiere die neuere Quelle. Stecken Sie seine Werte ein. Würde die Hälfte der Größe passen? Wenn er Python verwenden wird, kann ich mir nicht vorstellen, dass es beliebig große Werte akzeptiert, aber es könnte 64-Bit-Werte annehmen.Die Größe, mit der er wiedergeben möchte, impliziert, dass er einen 8K-Bildschirm hat (oder für die Zukunft archiviert).
Ich wäre überrascht, wenn dies ein 64-Bit-Limit wäre, da ich speziell eine 64-Bit-Version von ffmpeg verwendeffmpeg-20170321-db7a05d-win64-static
Nur ein Kommentar: Warum zum Teufel verwendet FFMPEG (signed) Ints für H und W? Wenn sie unsigned int wären, wäre alles in Ordnung und gut bis 65535 (einschließlich).