Kodiert in schlechter Qualität nach Prores4444 mit Alpha von ffmpeg

EDIT: Dieser Fehler wurde behoben. Wenn das folgende Problem auftritt, versuchen Sie, ffmpeg zu aktualisieren

Ich muss ein Video mit Alpha als prores4444-codierte Datei bereitstellen. Ich habe versucht, ffmpeg zu verwenden, aber ausnahmsweise scheint es mich im Stich zu lassen (ich weiß, verblüfft!).

Ich verwende den prores_ks-Codec und befolge die Anweisungen auf der Manpage . Dies ist mein Befehl, der an einer QTRLE-codierten Datei mit 8-Bit-RGBA testet:

ffmpeg -i '.\alpha test.mov'  -c:v prores_ks -profile:v 4 -quant_mat 'hq' -pix_fmt yuva444p10le 'prorestest2.mov'

Die Ausgabe ist:

ffmpeg version N-82664-g801b5c1 Copyright (c) 2000-2016 the FFmpeg developers
  built with gcc 5.4.0 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-dxva2 --enable-libmfx --enable-nvenc --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-lzma --enable-decklink --enable-zlib
  libavutil      55. 41.101 / 55. 41.101
  libavcodec     57. 66.108 / 57. 66.108
  libavformat    57. 58.101 / 57. 58.101
  libavdevice    57.  2.100 / 57.  2.100
  libavfilter     6. 67.100 /  6. 67.100
  libswscale      4.  3.101 /  4.  3.101
  libswresample   2.  4.100 /  2.  4.100
  libpostproc    54.  2.100 / 54.  2.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '.\alpha test.mov':
  Metadata:
    major_brand     : qt
    minor_version   : 537199360
    compatible_brands: qt
    creation_time   : 2016-12-12T03:17:14.000000Z
  Duration: 00:00:10.00, start: 0.000000, bitrate: 406275 kb/s
    Stream #0:0(eng): Video: qtrle (rle  / 0x20656C72), bgra(progressive), 1920x1080, 405436 kb/s, SAR 1:1 DAR 16:9, 25 fps, 25 tbr, 25 tbn, 25 tbc (default)
    Metadata:
      creation_time   : 2016-12-12T03:17:14.000000Z
      handler_name    : Apple Alias Data Handler
      encoder         : Animation
      timecode        : 00:00:00:00
    Stream #0:1(eng): Data: none (tmcd / 0x64636D74), 0 kb/s (default)
    Metadata:
      creation_time   : 2016-12-12T03:17:14.000000Z
      handler_name    : Apple Alias Data Handler
      timecode        : 00:00:00:00
File 'prorestest2.mov' already exists. Overwrite ? [y/N] y
Output #0, mov, to 'prorestest2.mov':
  Metadata:
    major_brand     : qt
    minor_version   : 537199360
    compatible_brands: qt
    encoder         : Lavf57.58.101
    Stream #0:0(eng): Video: prores (prores_ks) (ap4h / 0x68347061), yuva444p10le, 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 25 fps, 12800 tbn, 25 tbc (default)
    Metadata:
      creation_time   : 2016-12-12T03:17:14.000000Z
      handler_name    : Apple Alias Data Handler
      timecode        : 00:00:00:00
      encoder         : Lavc57.66.108 prores_ks
Stream mapping:
  Stream #0:0 -> #0:0 (qtrle (native) -> prores (prores_ks))
Press [q] to stop, [?] for help
frame=  250 fps=5.5 q=-0.0 Lsize=  186122kB time=00:00:09.96 bitrate=153082.2kbits/s speed=0.218x
video:186119kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.001761%

Es sieht alles gut aus, bis Sie die Ergebnisse sehen. Hier ist ein Frame aus dem Original, exportiert als PNG (mit djv):Geben Sie hier die Bildbeschreibung ein

…und hier ist die prores-kodierte Version. Es gibt Blockbildungs- und Klingelartefakte, die am deutlichsten in Bereichen mit partiellem Alpha sind:

prores444-kodierte Version

Am deutlichsten wird es, wenn man sich die Farbkanäle einzeln ansieht:

Geben Sie hier die Bildbeschreibung ein

Ich habe die verschiedenen -quant_matEinstellungen ausprobiert (in den Dokumenten sieht es so aus, als ob es 6 geben sollte, aber wenn ich es versuche -quant_mat 5, erhalte ich einen Fehler außerhalb des Bereichs. Ich habe auch versucht, die Zeichenfolgenversion zu verwenden, dh -quant_mat 'hq'. Eine andere Sache, die ich versucht habe, war das Ändern der Anzahl von Alpha-Bits mit -alpha_bits 16und -alpha_bits 8.Das Problem war noch schlimmer mit 16-Bit-Alpha.

Also ist es etwas, was ich mache oder ist es der Codec, der nicht richtig funktioniert?

Können Sie einen Frame aus dem Original als PNG bereitstellen?
Ich habe die Frage mit PNGs aus dem Film anstelle von Screenshots bearbeitet. Die Blockigkeit ist gegen Weiß schwerer zu erkennen.
@stib Hast du auch getestet prores_aw? Es ist ein weiterer ProRes-Encoder. Ich habe es nicht versucht oder mir den Quellcode angesehen: Ich muss stattdessen Trockenbau installieren ...
ach das ist einfach:cd ~/drywall; ./configure && make && sudo make install
Habe es ausprobiert, kein Alpha. ffmpeg -i '.\alpha test.mov' -c:v prores_aw -profile:v 3 -pix_fmt yuva444p10le 'prores_aw-test.mov'Incompatible pixel format 'yuva444p10le' for codec 'prores_aw', auto-selecting format 'yuv422p10le'

Antworten (1)

Scheint ein Encoder-Defizit zu sein, wahrscheinlich aufgrund des schnellen Übergangs im Alpha von 1 auf 0 in den Grenzregionen. Die Ausgabe an VP9 mit Alpha führt zu einem sauberen Ergebnis, ebenso wie die Ausgabe an Prores ohne Alpha. Die Ausgabe mit einem einheitlichen Alpha, dh die gesamte Alpha-Ebene auf 0 oder 0,5 oder 1 zurückgesetzt, führt ebenfalls zu einem sauberen Ergebnis. Es ist kein Scaler-Problem, da Rawvideo mit yuva444p10le auch ein sauberes Ergebnis liefert.

Wenn ich mir den Quellcode ansehe, sehe ich diese Zeile, die relevant sein könnte:

// todo alpha quantisation for high quants
Soll ich einen Fehlerbericht erstellen oder ist er überflüssig, da er bereits ein Todo-Element ist?
Erstellen Sie einen Fehlerbericht, da dies die Priorität erhöhen kann.
Link zum Fehlerbericht .
@stib Der Fehlerbericht ist als behoben markiert . Kannst du das verifizieren?
Danke für die Warnung. Es scheint zu funktionieren, aber ich habe es noch nicht vollständig getestet.
Scheint jetzt behoben zu sein.