.png überlagern, ohne die Transparenz von .mov mit FFMPEG zu verlieren

347
drexdelta

Ich versuche zu überlagern. png (transparentes bild) vorbei. mov (transparentes Video) mit diesem Blog . Ich benutze grundlegende Befehle wie,

ffmpeg -i inputVideo.mov -i overlay.png -filter_complex "overlay = 100: 254" output.mov

während für Lösung suchen, fand ich ähnliches Problem hier, aber es nutzt C #. Ich suche nach einem einfachen ffmpeg-Befehl.

Ich fand auch diese . und es gibt keine Lösung :(. Danke.

BEARBEITEN 1: Ausgabe des Befehls gemäß Anforderung hinzugefügt.

ffmpeg version 4.0.2 Copyright (c) 2000-2018 the FFmpeg developers built with Apple LLVM version 9.1.0 (clang-902.0.39.1) configuration: --prefix=/usr/local/Cellar/ffmpeg/4.0.2 --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags='-I/Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home/include/darwin' --host-ldflags= --enable-gpl --enable-chromaprint --enable-ffplay --enable-frei0r --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfdk-aac --enable-libfontconfig --enable-libfreetype --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopus --enable-librtmp --enable-librubberband --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtesseract --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libzimg --enable-libzmq --enable-opencl --enable-videotoolbox --enable-openssl --enable-lzma --enable-libopenjpeg --disable-decoder=jpeg2000 --extra-cflags=-I/usr/local/Cellar/openjpeg/2.3.0/include/openjpeg-2.3 --enable-nonfree libavutil 56. 14.100 / 56. 14.100 libavcodec 58. 18.100 / 58. 18.100 libavformat 58. 12.100 / 58. 12.100 libavdevice 58. 3.100 / 58. 3.100 libavfilter 7. 16.100 / 7. 16.100 libavresample 4. 0. 0 / 4. 0. 0 libswscale 5. 1.100 / 5. 1.100 libswresample 3. 1.100 / 3. 1.100 libpostproc 55. 1.100 / 55. 1.100 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'inputVideo.mov': Metadata: major_brand : qt minor_version : 512 compatible_brands: qt encoder : Lavf58.12.100 Duration: 00:00:04.02, start: 0.000000, bitrate: 35096 kb/s Stream #0:0(eng): Video: prores (ap4h / 0x68347061), yuva444p10le, 540x640, 35241 kb/s, 30 fps, 30 tbr, 15360 tbn, 15360 tbc (default) Metadata: handler_name : DataHandler encoder : Apple ProRes 4444 timecode : 00:00:00:00 Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 2 kb/s (default) Metadata: handler_name : DataHandler Stream #0:2(eng): Data: none (tmcd / 0x64636D74), 0 kb/s Metadata: handler_name : DataHandler timecode : 00:00:00:00 Input #1, png_pipe, from 'overlay.png': Duration: N/A, bitrate: N/A Stream #1:0: Video: png, rgba(pc), 320x250 [SAR 2835:2835 DAR 32:25], 25 tbr, 25 tbn, 25 tbc 
1
Zeigen Sie das vollständige Protokoll Ihres Befehls an. LordNeckbeard vor 5 Jahren 0
@LordNeckbeard, ich denke, du hast nach den ffmpeg-Versionen gesucht. Ich habe es der Frage hinzugefügt. drexdelta vor 5 Jahren 0
Danke, aber ich wollte auch alle Informationen sehen und fragte deshalb nach dem vollständigen Protokoll. Einige wurden jedoch weggelassen. Versuchen Sie auf jeden Fall `ffmpeg -i inputVideo.mov -i overlay.png -filter_complex" overlay = 100: 254: format = auto "-c: v prores_ks output.mov`. Zeigen Sie das Protokoll an und überprüfen Sie, ob das Pixelformat "yuva444p10le" ausgegeben wird. LordNeckbeard vor 5 Jahren 0
Danke, es hat funktioniert. Kannst du die Antwort schreiben, damit ich sie grün machen kann :). drexdelta vor 5 Jahren 0
Sicher. Mit einigen kleinen Änderungen hinzugefügt. Ich war mir nicht sicher, ob es für Sie funktionieren würde, als ich die Antwort schrieb, da ich es selbst nicht ausprobieren konnte. LordNeckbeard vor 5 Jahren 0
Ich habe ein kleines Problem :(. Wenn ich diesen Befehl auf meinem Macbook Pro ausführte, funktionierte es ziemlich gut. Nun versuche ich, ein Docker-Image von Ubuntu zu generieren. Ich versuche, diesen Befehl auf Docker auszuführen. Es wird eine Fehlermeldung angezeigt in link :(. eine Idee, warum ich diesen Filter nicht finden kann? ... https://www.ideone.com/A8Ffgj. drexdelta vor 5 Jahren 0
Ich installiere einfach ffmpeg mit apt-get mit dem Befehl "" "apt install -y ffmpeg" "" drexdelta vor 5 Jahren 0
Der Release-Zweig von FFmpeg 3.2 ist von 2016-10-26, aber `format = auto` wurde am 24.06.2017 hinzugefügt. Entfernen Sie diese Option oder aktualisieren Sie Ihren `ffmpeg`. LordNeckbeard vor 5 Jahren 0
in Ordnung. Ich werde sehen, ob die Überlagerung ohne diese Flagge funktioniert. ansonsten werde ich mein ffmpeg aktualisieren. Danke für Ihre schnelle Antwort :) . drexdelta vor 5 Jahren 0
Oder ändern Sie "auto" in "yuv444". LordNeckbeard vor 5 Jahren 0

1 Antwort auf die Frage

0
LordNeckbeard

Das Standardformat für MOV ist H.264 (wenn ein Encoder verfügbar ist), das keinen Alphakanal unterstützt. Daher müssen Sie ProRes manuell angeben, wenn Sie dieses Format beibehalten möchten.

Es gibt zwei ProRes-Encoder: prores_awund prores_ks, prores_ksunterstützt aber nur Alpha. Siehe ffmpeg -encodersund ffmpeg -h encoder=prores_ksfür weitere Informationen.

Beispielbefehl

ffmpeg -i inputVideo.mov -i overlay.png -filter_complex "overlay=100:-1:format=auto" -c:v prores_ks -c:a copy output.mov 

Ausgabe überprüfen

Zeigen Sie das Protokoll während der Codierung an und stellen Sie sicher, dass das yuva444p10lePixelformat ausgegeben wird, z.

Stream #0:0: Video: prores (prores_ks) (ap4h / 0x68347061), yuva444p10le, 1280x720 [SAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 25 fps, 12800 tbn, 25 tbc