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):
…und hier ist die prores-kodierte Version. Es gibt Blockbildungs- und Klingelartefakte, die am deutlichsten in Bereichen mit partiellem Alpha sind:
Am deutlichsten wird es, wenn man sich die Farbkanäle einzeln ansieht:
Ich habe die verschiedenen -quant_mat
Einstellungen 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 16
und -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?
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
Gyan
stib
Logan
prores_aw
? Es ist ein weiterer ProRes-Encoder. Ich habe es nicht versucht oder mir den Quellcode angesehen: Ich muss stattdessen Trockenbau installieren ...stib
cd ~/drywall; ./configure && make && sudo make install
stib
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'