Es kann keine verlustfreie Komprimierung für die Arbeit mit ffmpeg mit Upscaling unter Windows 10 erhalten werden

275
Jack

Ich versuche, eine Sequenz von PNG-Bildern in ein verlustfreies Video umzuwandeln, während das Bild hochskaliert wird (bei gleichem Seitenverhältnis). Ich habe ein png-Bild angehängt

png bild.

Allerdings ist jede verlustfreie Option, die ich verwende, offensichtlich nicht verlustfrei oder führt zu fehlerhaftem Video.

Ich habe versucht ffmpeg -framerate 60 -i %d.png -vf scale=-1:2160 -c:v libx264 -crf 0 -preset veryslow -c:a libmp3lame -b:a 320k output.mp4, die Cmd-Zeilenausgabe hinzuzufügen, aber diese Website beschwert sich, dass meine Frage Spam ist, wenn ich das mache, und mich dies nicht veröffentlichen lässt.

Was meiner Meinung nach aufgrund der -crf 0 verlustfrei sein sollte, erzeugt jedoch ein fehlerhaftes Video gemäß vlc, Windows Media Player und Firefox. Chrome schafft es zwar, es zu spielen, aber die Ergebnisse sind in diesem Fall offensichtlich verlustbehaftet. Hier sehen Sie sehr deutlich dicke konzentrische Farbbänder, die im eigentlichen .png nicht vorhanden sind und stattdessen glatt abfallen. Verlust der Kompression

Ich habe dies sowohl mit dem vollständigen Satz von Bildern, die ich in ein Video aufnehmen möchte, getestet, als auch mit 3 Frames, sodass ich sicher bin, dass mit der Eingabe .png nichts falsch ist. In beiden Fällen treten die gleichen Ergebnisse auf.

Ich habe nach einer Online-Suche festgestellt, dass das Hinzufügen von -pix_fmt yuv420p helfen kann, also habe ich es versucht

ffmpeg -framerate 60 -i %d.png -vf scale=-1:2160 -c:v libx264 -crf 0 -preset veryslow -c:a libmp3lame -b:a 320k -pix_fmt yuv420p output.mp4

Dadurch kann VLC es jetzt öffnen (Firefox und Windows Media Player sagen jedoch immer noch, dass es beschädigt ist). Es ist jedoch offensichtlich verlustbehaftet in Chrom und VLC komprimiert.

Ich habe es dann versucht ffmpeg -framerate 60 -i %d.png -vf scale=-1:2160 -c:v libvpx-vp9 -lossless 1 output.webm

Was ich zusammenfasse, sollte aufgrund von -lossless 1 verlustfrei sein, dies führt jedoch zu einer sehr seltsamen Ausgabe. In VLC und Firefox ist die Ausgabe nur schwarz. In Chrom ist die Ausgabe jedoch hauptsächlich ein grüner Hintergrund, der von dunkelgrün am unteren Rand des Bildschirms bis hellgrün oben mit einem dunkleren grünen Kreis in der Mitte reicht und der Text oben links rosa geworden ist. In Windows Media Player ist die Ausgabe ähnlich, jedoch gibt es keinen dunkelgrünen Kreis in der Mitte, und der Text oben links hat sich in ein sehr helles Hellgrün geändert und wurde auch in niedrigerer Auflösung, aber größerer Schrift und geändert unter sich selbst dupliziert Ich verstehe nicht, wie das passieren könnte

very weird windows media player output

Ich habe dann versucht, -pix_fmt yuv420p wie zuvor hinzuzufügen. ffmpeg -framerate 60 -i %d.png -vf scale=-1:2160 -c:v libvpx-vp9 -lossless 1 -pix_fmt yuv420p output.webm

Dabei ist die Ausgabe in VLC und Firefox immer noch leer, jedoch zeigen Chrome und Windows Media Player jetzt normale Ausgaben, das Ergebnis ist jedoch offensichtlich eine verlustbehaftete Komprimierung.

Ich habe dann versucht, ffmpeg -framerate 60 -i% d.png -vf scale = -1: 2160 -c: v ffv1 -c: ein libmp3lame -b: ein 320k-output.avi

Die Ausgabe ist jedoch nur ein leerer schwarzer Bildschirm in VLC, der sowohl auf einem Windows 10-Computer als auch auf einem Ubuntu-Computer neu installiert wurde. Die cmd-Ausgabe hierfür ist

ffmpeg -framerate 60 -i %d.png -vf scale=-1:2160 -c:v ffv1 -c:a libmp3lame -b:a 320k output.avi ffmpeg version N-91999-g148a21611d Copyright (c) 2000-2018 the FFmpeg developers built with gcc 8.2.1 (GCC) 20180813 configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth libavutil 56. 19.101 / 56. 19.101 libavcodec 58. 30.100 / 58. 30.100 libavformat 58. 18.102 / 58. 18.102 libavdevice 58. 4.103 / 58. 4.103 libavfilter 7. 32.100 / 7. 32.100 libswscale 5. 2.100 / 5. 2.100 libswresample 3. 2.100 / 3. 2.100 libpostproc 55. 2.100 / 55. 2.100 Input #0, image2, from '%d.png': Duration: 00:00:10.00, start: 0.000000, bitrate: N/A Stream #0:0: Video: png, rgb24(pc), 3840x1408, 60 fps, 60 tbr, 60 tbn, 60 tbc Codec AVOption b (set bitrate (in bits/s)) specified for output file #0 (output.avi) has not been used for any stream. The most likely reason is either wrong type (e.g. a video option with no video streams) or that it is a private option of some encoder which was not actually used for any stream. Stream mapping: Stream #0:0 -> #0:0 (png (native) -> ffv1 (native)) Press [q] to stop, [?] for help Output #0, avi, to 'output.avi': Metadata: ISFT : Lavf58.18.102 Stream #0:0: Video: ffv1 (FFV1 / 0x31564646), bgr0, 5891x2160, q=2-31, 200 kb/s, 60 fps, 60 tbn, 60 tbc Metadata: encoder : Lavc58.30.100 ffv1 frame= 600 fps=4.0 q=-0.0 Lsize= 100850kB time=00:00:10.00 bitrate=82616.4kbits/s speed=0.067x video:100830kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.019776%

Beigefügt ist ein Link zur Dateiausgabe https://cernbox.cern.ch/index.php/s/ggEtDZmwxqzap3Y

Wie verwandle ich eine Sequenz von PNG-Bildern in ein verlustfrei komprimiertes Video?

Danke für jede Hilfe

1
Was meinen Sie konkret mit "offensichtlich verlustbehaftet" im Fall des ersten Befehls? Das sollte das produzieren, was Sie wollen, mit der Ausnahme, dass viele Player YUV 4: 4: 4 nicht als Pixelformat verarbeiten können. Stellen Sie sicher, dass Sie eine etwas neuere Version von VLC verwenden. Ist Ihre Anforderung, dass das Video auf den meisten Geräten / Playern abspielbar sein soll? In diesem Fall können Sie nicht "vollständig verlustfrei" gehen, da die Farbe auf 4: 2: 0 unterabgetastet werden muss. slhck vor 2 Jahren 0
@slhck Nein, ich habe keine Voraussetzungen, dass es auf anderen Geräten als meinen eigenen abgespielt werden kann. Mit offensichtlich verlustbehaftetem Ich meine, ich kann sofort sehen, dass die Ausgabe sehr komprimiert ist. Der diffuse rote kreisförmige Fleck im ersten Bild erscheint als eine Reihe von sehr gut sichtbaren dicken konzentrischen Farbbändern. Jack vor 2 Jahren 0
@slhck Ich habe den Hauptbeitrag so bearbeitet, dass er einen Screenshot des offensichtlich verlustbehafteten Videos enthält. (Ich dachte, vielleicht hat das mit Upscaling zu tun, aber ich habe es ohne Upscaling versucht und die gleichen konzentrischen Bänder sind sichtbar.) Ich bin ziemlich zuversichtlich, dass ich eine aktuelle Version von VLC verwenden sollte. Ich bin nicht sicher, wie Sie prüfen, in welcher Version Sie sich gerade befinden, aber ich habe es erst gestern hier heruntergeladen: https://www.videolan.org/vlc/download-windows.html (insbesondere, weil Windows Media Player nicht geladen wurde it) und wenn ich nach Updates suche, wird mir die neueste Version des VLC media player angezeigt. Jack vor 2 Jahren 0
Das Problem, das bei Ihnen auftritt (Farbstreifen), ist auf die Konvertierung vom RGB-Farbraum in YUV (genau genommen YCbCr) zurückzuführen. Verwenden Sie einen Videocodec, der den RGB-Farbraum unterstützt, z. B. `ffv1` (verlustfrei, keine Einstellung von Parametern erforderlich). slhck vor 2 Jahren 0
Hallo @slhck, vielen Dank. Tut mir leid, dass ich sehr wenig über Video-Kodierung weiß, also nur um zu überprüfen, ob Sie ffmpeg -framerate 60 -i% d.png -vf scale = -1: 2160 -c: v libx264 -crf 0 -preset veryslow -c: ein libmp3lame -b: eine 320k-Ausgabe.mp4 an ffmpeg -framerate 60 -i% d.png -vf scale = -1: 2160 -c: v ffv1 -c: eine libmp3lame -b: eine 320k-Ausgabe.mp4? Nochmals vielen Dank für die Hilfe Jack vor 2 Jahren 0
@Slhck Ich habe versucht, ffmpeg -framerate 60 auszuführen. -I% d.png -vf scale = -1: 2160 -c: v ffv1 -c: ein libmp3lame -b: ein 320k output.avi (mit .mp4 ffmpeg würde nicht ausgeführt) , und das Video ist nur ein leerer schwarzer Bildschirm in VLC und Windows Meida Player. Jack vor 2 Jahren 0
Ja, das sollte funktionieren, und ich könnte das resultierende Video in meinem Fall mit VLC erfolgreich abspielen. (Vergessen Sie Windows Media Player, um solche Dinge zu testen.) Könnten Sie die vollständige Befehlszeilenausgabe des letzten Laufs und möglicherweise das Ausgabevideo als Beispiel hinzufügen? slhck vor 2 Jahren 0
@slhck hi, ich habe die cmd-Zeilenausgabe und einen Link zum Ausgangsvideo am unteren Rand des Hauptpostens hinzugefügt. Ich habe versucht, VLC zu deinstallieren und erneut zu installieren, sehe jedoch immer noch einen schwarzen leeren Bildschirm, wenn ich versuche, das Video zu öffnen. Ich habe es jedoch sowohl mit 3 als auch mit 600 Bildern getestet, und es dauert eine angemessene Zeit (weniger als 1 Sekunde bei 3 Bildern, 10 Sekunden bei der 600). Ich habe es auch mit VLC versucht, das auf einer Ubuntu-Maschine frisch installiert wurde, und dies zeigt auch nur einen schwarzen leeren Bildschirm. Nochmals vielen Dank für die Hilfe Jack vor 2 Jahren 0
Entschuldigung für die späte Antwort. Das von Ihnen hochgeladene Video sieht für mich gut aus und zeigt keine Streifenbildung. Ich kann es mit der neuesten Version von VLC (unter macOS) anzeigen. Ein weiterer probierbarer Codec ist ProRes über `-c: v prores_ks` (es gibt auch` prores`, unterstützt aber keine 4: 4: 4-Kodierung). slhck vor 2 Jahren 0
@slhck kein Problem, du warst eine große Hilfe. Huh, komisch. Ich denke, VLC muss auf MacOS besser unterstützt werden als Windows und Ubuntu. Ich habe prores_ks ausprobiert, das mir bei einer Neuinstallation von VLC auch nur einen schwarzen Bildschirm gibt. Ich nehme an, dass sich jemandes Mac leihen muss. Danke für die Geduld und Hilfe Jack vor 2 Jahren 0

0 Antworten auf die Frage