使用FFMPEG在透明GIF上覆盖图像

3
我将尝试使用FFMPEG在透明的gif上叠加一张png,但问题是命令正在无误地运行,但输出文件将透明像素转换为黑色或白色。
我正在使用以下命令。
-i input.gif -i overlayImage.png -filter_complex "[0:v][1:v]overlay=0:0" -pix_fmt yuv420p -y output.gif

如果我能获得在gif文件周围添加透明padding的命令,这将非常有帮助。当我将一个png叠加到同一个gif文件上时,会把padding加到输出文件中。

我正在使用以下命令进行padding。

-i input.gif -i overlayImage.png -filter_complex "[0]scale=512:512:force_original_aspect_ratio=decrease, format=rgba,pad=512:512:(ow-iw)/2:(oh-ih)/2:color=0x00000000[a];[a][1]overlay=0:0" -pix_fmt yuv420p -y output.gif

在透明GIF上叠加图像时记录日志

 2021-10-14 09:29:31.523 12728-12728/package-name I/mobile-ffmpeg: Loading mobile-ffmpeg.
2021-10-14 09:29:31.677 12728-12728/package-name I/mobile-ffmpeg: Loaded mobile-ffmpeg-video-arm64-v8a-4.4-lts-20200803.
            2021-10-14 09:29:31.682 12728-13464/package-name D/mobile-ffmpeg: Callback thread started.
2021-10-14 09:29:31.685 12728-13464/package-name I/mobile-ffmpeg: ffmpeg version v4.4-dev-416
            2021-10-14 09:29:31.685 12728-13464/package-name I/mobile-ffmpeg:  Copyright (c) 2000-2020 the FFmpeg developers
2021-10-14 09:29:31.685 12728-13464/package-name I/mobile-ffmpeg:   built with Android (6454773 based on r365631c2) clang version 9.0.8 (https://android.googlesource.com/toolchain/llvm-project 98c855489587874b2a325e7a516b99d838599c6f) (based on LLVM 9.0.8svn)
            2021-10-14 09:29:31.685 12728-13464/package-name I/mobile-ffmpeg:   configuration: --cross-prefix=aarch64-linux-android- --sysroot=/files/android-sdk/ndk/21.3.6528147/toolchains/llvm/prebuilt/linux-x86_64/sysroot --prefix=/home/taner/Projects/mobile-ffmpeg/prebuilt/android-arm64/ffmpeg --pkg-config=/usr/bin/pkg-config --enable-version3 --arch=aarch64 --cpu=armv8-a --cc=aarch64-linux-android21-clang --cxx=aarch64-linux-android21-clang++ --extra-libs='-L/home/taner/Projects/mobile-ffmpeg/prebuilt/android-arm64/cpu-features/lib -lndk_compat' --target-os=android --enable-neon --enable-asm --enable-inline-asm --enable-cross-compile --enable-pic --enable-jni --enable-optimizations --enable-swscale --enable-shared --enable-v4l2-m2m --disable-outdev=fbdev --disable-indev=fbdev --enable-small --disable-openssl --disable-xmm-clobber-test --disable-debug --enable-lto --disable-neon-clobber-test --disable-programs --disable-postproc --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages --disable-static --disable-sndio --disable-schannel --disable-securetransport --disable-xlib --disable-cuda --disable-cuvid --disable-nvenc --disable-vaapi --disable-vdpau --disable-videotoolbox --disable-audiotoolbox --disable-appkit --disable-alsa --disable-cuda --disable-cuvid --disable-nvenc --disable-vaapi --disable-vdpau --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libass --enable-iconv --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libkvazaar --enable-libsnappy --enable-libaom --disable-sdl2 --enable-zlib --enable-mediacodec
2021-10-14 09:29:31.694 12728-13464/package-name I/mobile-ffmpeg:   libavutil      56. 55.100 / 56. 55.100
            2021-10-14 09:29:31.695 12728-13464/package-name I/mobile-ffmpeg:   libavcodec     58. 96.100 / 58. 96.100
            2021-10-14 09:29:31.695 12728-13464/package-name I/mobile-ffmpeg:   libavformat    58. 48.100 / 58. 48.100
            2021-10-14 09:29:31.695 12728-13464/package-name I/mobile-ffmpeg:   libavdevice    58. 11.101 / 58. 11.101
            2021-10-14 09:29:31.695 12728-13464/package-name I/mobile-ffmpeg:   libavfilter     7. 87.100 /  7. 87.100
            2021-10-14 09:29:31.695 12728-13464/package-name I/mobile-ffmpeg:   libswscale      5.  8.100 /  5.  8.100
            2021-10-14 09:29:31.695 12728-13464/package-name I/mobile-ffmpeg:   libswresample   3.  8.100 /  3.  8.100
            2021-10-14 09:29:31.723 12728-13464/package-name I/mobile-ffmpeg: Input #0, gif, from '/data/user/0/package-name/files/transparent_sticker.gif':
            2021-10-14 09:29:31.723 12728-13464/package-name I/mobile-ffmpeg:   Duration:
            2021-10-14 09:29:31.723 12728-13464/package-name I/mobile-ffmpeg: 00:00:00.40
            2021-10-14 09:29:31.723 12728-13464/package-name I/mobile-ffmpeg: , start:
            2021-10-14 09:29:31.723 12728-13464/package-name I/mobile-ffmpeg: 0.000000
            2021-10-14 09:29:31.723 12728-13464/package-name I/mobile-ffmpeg: , bitrate:
            2021-10-14 09:29:31.723 12728-13464/package-name I/mobile-ffmpeg: 33 kb/s
2021-10-14 09:29:31.723 12728-13464/package-name I/mobile-ffmpeg:     Stream #0:0
            2021-10-14 09:29:31.723 12728-13464/package-name I/mobile-ffmpeg: : Video: gif, bgra, 512x512
2021-10-14 09:29:31.723 12728-13464/package-name I/mobile-ffmpeg: ,
            2021-10-14 09:29:31.723 12728-13464/package-name I/mobile-ffmpeg: 100 tbr,
            2021-10-14 09:29:31.723 12728-13464/package-name I/mobile-ffmpeg: 100 tbn,
            2021-10-14 09:29:31.723 12728-13464/package-name I/mobile-ffmpeg: 100 tbc
2021-10-14 09:29:31.748 12728-13464/package-name I/mobile-ffmpeg: Input #1, webp_pipe, from '/storage/emulated/0/Android/data/package-name/files/TrimmedVideo/overlay.png':
            2021-10-14 09:29:31.748 12728-13464/package-name I/mobile-ffmpeg:   Duration:
            2021-10-14 09:29:31.748 12728-13464/package-name I/mobile-ffmpeg: N/A
2021-10-14 09:29:31.748 12728-13464/package-name I/mobile-ffmpeg: , bitrate:
            2021-10-14 09:29:31.748 12728-13464/package-name I/mobile-ffmpeg: N/A
2021-10-14 09:29:31.748 12728-13464/package-name I/mobile-ffmpeg:     Stream #1:0
            2021-10-14 09:29:31.748 12728-13464/package-name I/mobile-ffmpeg: : Video: webp, yuva420p(tv, bt470bg/unknown/unknown), 512x512
2021-10-14 09:29:31.748 12728-13464/package-name I/mobile-ffmpeg: ,
            2021-10-14 09:29:31.748 12728-13464/package-name I/mobile-ffmpeg: 25 tbr,
            2021-10-14 09:29:31.748 12728-13464/package-name I/mobile-ffmpeg: 25 tbn,
            2021-10-14 09:29:31.748 12728-13464/package-name I/mobile-ffmpeg: 25 tbc
2021-10-14 09:29:31.755 12728-13464/package-name I/mobile-ffmpeg: Stream mapping:
            2021-10-14 09:29:31.755 12728-13464/package-name I/mobile-ffmpeg:   Stream #0:0 (gif) -> scale
2021-10-14 09:29:31.755 12728-13464/package-name I/mobile-ffmpeg:   Stream #1:0 (webp) -> overlay:overlay
2021-10-14 09:29:31.755 12728-13464/package-name I/mobile-ffmpeg:   overlay
2021-10-14 09:29:31.755 12728-13464/package-name I/mobile-ffmpeg:  -> Stream #0:0 (gif)
            2021-10-14 09:29:31.755 12728-13464/package-name I/mobile-ffmpeg: Press [q] to stop, [?] for help
2021-10-14 09:29:31.773 12728-13464/package-name W/mobile-ffmpeg: [graph 0 input from stream 0:0 @ 0x7702da9840] sws_param option is deprecated and ignored
2021-10-14 09:29:31.773 12728-13464/package-name W/mobile-ffmpeg: [graph 0 input from stream 1:0 @ 0x7702da9900] sws_param option is deprecated and ignored
2021-10-14 09:29:31.773 12728-13464/package-name W/mobile-ffmpeg: Incompatible pixel format 'yuv420p' for codec 'gif', auto-selecting format 'bgr8'
            2021-10-14 09:29:31.778 12728-13464/package-name W/mobile-ffmpeg: [swscaler @ 0x76b520cc80] No accelerated colorspace conversion found from yuva420p to bgr8.
2021-10-14 09:29:31.806 12728-13464/package-name I/mobile-ffmpeg: Output #0, gif, to '/storage/emulated/0/Android/data/package-name/files/TrimmedVideo/1634185771290.gif':
            2021-10-14 09:29:31.806 12728-13464/package-name I/mobile-ffmpeg:   Metadata:
            2021-10-14 09:29:31.806 12728-13464/package-name I/mobile-ffmpeg:     encoder         :
            2021-10-14 09:29:31.806 12728-13464/package-name I/mobile-ffmpeg: Lavf58.48.100
            2021-10-14 09:29:31.806 12728-13464/package-name I/mobile-ffmpeg:     Stream #0:0
            2021-10-14 09:29:31.806 12728-13464/package-name I/mobile-ffmpeg: : Video: gif, bgr8, 512x512, q=2-31, 200 kb/s
2021-10-14 09:29:31.806 12728-13464/package-name I/mobile-ffmpeg: ,
            2021-10-14 09:29:31.806 12728-13464/package-name I/mobile-ffmpeg: 100 fps,
            2021-10-14 09:29:31.806 12728-13464/package-name I/mobile-ffmpeg: 100 tbn,
            2021-10-14 09:29:31.806 12728-13464/package-name I/mobile-ffmpeg: 100 tbc
2021-10-14 09:29:31.806 12728-13464/package-name I/mobile-ffmpeg:  (default)
            2021-10-14 09:29:31.806 12728-13464/package-name I/mobile-ffmpeg:     Metadata:
            2021-10-14 09:29:31.806 12728-13464/package-name I/mobile-ffmpeg:       encoder         :
            2021-10-14 09:29:31.806 12728-13464/package-name I/mobile-ffmpeg: Lavc58.96.100 gif
2021-10-14 09:29:31.839 12728-13464/package-name I/mobile-ffmpeg: frame=    2 fps=0.0 q=-0.0 Lsize=      28kB time=00:00:00.21 bitrate=1110.1kbits/s speed=2.49x    
2021-10-14 09:29:31.840 12728-13464/package-name I/mobile-ffmpeg: video:28kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead:
            2021-10-14 09:29:31.840 12728-13464/package-name I/mobile-ffmpeg: 0.068679%

在GIF上叠加图像并给输出文件添加填充时记录日志

2021-10-14 09:35:49.136 15236-16490/package-name I/mobile-ffmpeg: ffmpeg version v4.4-dev-416
            2021-10-14 09:35:49.136 15236-16490/package-name I/mobile-ffmpeg:  Copyright (c) 2000-2020 the FFmpeg developers
2021-10-14 09:35:49.136 15236-16490/package-name I/mobile-ffmpeg:   built with Android (6454773 based on r365631c2) clang version 9.0.8 (https://android.googlesource.com/toolchain/llvm-project 98c855489587874b2a325e7a516b99d838599c6f) (based on LLVM 9.0.8svn)
            2021-10-14 09:35:49.136 15236-16490/package-name I/mobile-ffmpeg:   configuration: --cross-prefix=aarch64-linux-android- --sysroot=/files/android-sdk/ndk/21.3.6528147/toolchains/llvm/prebuilt/linux-x86_64/sysroot --prefix=/home/taner/Projects/mobile-ffmpeg/prebuilt/android-arm64/ffmpeg --pkg-config=/usr/bin/pkg-config --enable-version3 --arch=aarch64 --cpu=armv8-a --cc=aarch64-linux-android21-clang --cxx=aarch64-linux-android21-clang++ --extra-libs='-L/home/taner/Projects/mobile-ffmpeg/prebuilt/android-arm64/cpu-features/lib -lndk_compat' --target-os=android --enable-neon --enable-asm --enable-inline-asm --enable-cross-compile --enable-pic --enable-jni --enable-optimizations --enable-swscale --enable-shared --enable-v4l2-m2m --disable-outdev=fbdev --disable-indev=fbdev --enable-small --disable-openssl --disable-xmm-clobber-test --disable-debug --enable-lto --disable-neon-clobber-test --disable-programs --disable-postproc --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages --disable-static --disable-sndio --disable-schannel --disable-securetransport --disable-xlib --disable-cuda --disable-cuvid --disable-nvenc --disable-vaapi --disable-vdpau --disable-videotoolbox --disable-audiotoolbox --disable-appkit --disable-alsa --disable-cuda --disable-cuvid --disable-nvenc --disable-vaapi --disable-vdpau --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libass --enable-iconv --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libkvazaar --enable-libsnappy --enable-libaom --disable-sdl2 --enable-zlib --enable-mediacodec
2021-10-14 09:35:49.136 15236-16490/package-name I/mobile-ffmpeg:   libavutil      56. 55.100 / 56. 55.100
            2021-10-14 09:35:49.136 15236-16490/package-name I/mobile-ffmpeg:   libavcodec     58. 96.100 / 58. 96.100
            2021-10-14 09:35:49.136 15236-16490/package-name I/mobile-ffmpeg:   libavformat    58. 48.100 / 58. 48.100
            2021-10-14 09:35:49.136 15236-16490/package-name I/mobile-ffmpeg:   libavdevice    58. 11.101 / 58. 11.101
            2021-10-14 09:35:49.136 15236-16490/package-name I/mobile-ffmpeg:   libavfilter     7. 87.100 /  7. 87.100
            2021-10-14 09:35:49.136 15236-16490/package-name I/mobile-ffmpeg:   libswscale      5.  8.100 /  5.  8.100
            2021-10-14 09:35:49.136 15236-16490/package-name I/mobile-ffmpeg:   libswresample   3.  8.100 /  3.  8.100
            2021-10-14 09:35:49.147 15236-16490/package-name I/mobile-ffmpeg: Input #0, gif, from '/storage/emulated/0/Android/data/package-name/files/TrimmedVideo/1634186134864-output.gif':
            2021-10-14 09:35:49.147 15236-16490/package-name I/mobile-ffmpeg:   Duration:
            2021-10-14 09:35:49.147 15236-16490/package-name I/mobile-ffmpeg: 00:00:02.80
            2021-10-14 09:35:49.147 15236-16490/package-name I/mobile-ffmpeg: , start:
            2021-10-14 09:35:49.147 15236-16490/package-name I/mobile-ffmpeg: 0.000000
            2021-10-14 09:35:49.148 15236-16490/package-name I/mobile-ffmpeg: , bitrate:
            2021-10-14 09:35:49.148 15236-16490/package-name I/mobile-ffmpeg: 8324 kb/s
2021-10-14 09:35:49.148 15236-16490/package-name I/mobile-ffmpeg:     Stream #0:0
            2021-10-14 09:35:49.148 15236-16490/package-name I/mobile-ffmpeg: : Video: gif, bgra, 288x512 [SAR 64:64 DAR 9:16]
            2021-10-14 09:35:49.148 15236-16490/package-name I/mobile-ffmpeg: ,
            2021-10-14 09:35:49.148 15236-16490/package-name I/mobile-ffmpeg: 10 fps,
            2021-10-14 09:35:49.148 15236-16490/package-name I/mobile-ffmpeg: 10 tbr,
            2021-10-14 09:35:49.148 15236-16490/package-name I/mobile-ffmpeg: 100 tbn,
            2021-10-14 09:35:49.148 15236-16490/package-name I/mobile-ffmpeg: 100 tbc
2021-10-14 09:35:49.151 15236-16490/package-name I/mobile-ffmpeg: Input #1, png_pipe, from '/storage/emulated/0/Android/data/package-name/files/TrimmedVideo/overlay_image.png':
            2021-10-14 09:35:49.151 15236-16490/package-name I/mobile-ffmpeg:   Duration:
            2021-10-14 09:35:49.151 15236-16490/package-name I/mobile-ffmpeg: N/A
2021-10-14 09:35:49.151 15236-16490/package-name I/mobile-ffmpeg: , bitrate:
            2021-10-14 09:35:49.151 15236-16490/package-name I/mobile-ffmpeg: N/A
2021-10-14 09:35:49.151 15236-16490/package-name I/mobile-ffmpeg:     Stream #1:0
            2021-10-14 09:35:49.151 15236-16490/package-name I/mobile-ffmpeg: : Video: png, rgba(pc), 512x512
2021-10-14 09:35:49.151 15236-16490/package-name I/mobile-ffmpeg: ,
            2021-10-14 09:35:49.151 15236-16490/package-name I/mobile-ffmpeg: 25 tbr,
            2021-10-14 09:35:49.151 15236-16490/package-name I/mobile-ffmpeg: 25 tbn,
            2021-10-14 09:35:49.151 15236-16490/package-name I/mobile-ffmpeg: 25 tbc
2021-10-14 09:35:49.153 15236-16490/package-name I/mobile-ffmpeg: Stream mapping:
            2021-10-14 09:35:49.154 15236-16490/package-name I/mobile-ffmpeg:   Stream #0:0 (gif) -> scale
2021-10-14 09:35:49.154 15236-16490/package-name I/mobile-ffmpeg:   Stream #1:0 (png) -> overlay:overlay
2021-10-14 09:35:49.154 15236-16490/package-name I/mobile-ffmpeg:   overlay
2021-10-14 09:35:49.154 15236-16490/package-name I/mobile-ffmpeg:  -> Stream #0:0 (gif)
            2021-10-14 09:35:49.154 15236-16490/package-name I/mobile-ffmpeg: Press [q] to stop, [?] for help
2021-10-14 09:35:49.159 15236-16490/package-name I/mobile-ffmpeg: frame=    0 fps=0.0 q=0.0 size=       0kB time=-577014:32:22.77 bitrate=  -0.0kbits/s speed=N/A    
2021-10-14 09:35:49.163 15236-16490/package-name W/mobile-ffmpeg: [graph 0 input from stream 0:0 @ 0x778fc3cec0] sws_param option is deprecated and ignored
2021-10-14 09:35:49.164 15236-16490/package-name W/mobile-ffmpeg: [graph 0 input from stream 1:0 @ 0x778fc3cf80] sws_param option is deprecated and ignored
2021-10-14 09:35:49.164 15236-16490/package-name W/mobile-ffmpeg: Incompatible pixel format 'yuv420p' for codec 'gif', auto-selecting format 'bgr8'
            2021-10-14 09:35:49.166 15236-16490/package-name W/mobile-ffmpeg: [swscaler @ 0x7734461980] No accelerated colorspace conversion found from yuva420p to bgr8.
2021-10-14 09:35:49.234 15236-16490/package-name I/mobile-ffmpeg: Output #0, gif, to '/storage/emulated/0/Android/data/package-name/files/TrimmedVideo/sticker.gif':
            2021-10-14 09:35:49.234 15236-16490/package-name I/mobile-ffmpeg:   Metadata:
            2021-10-14 09:35:49.234 15236-16490/package-name I/mobile-ffmpeg:     encoder         :
            2021-10-14 09:35:49.234 15236-16490/package-name I/mobile-ffmpeg: Lavf58.48.100
            2021-10-14 09:35:49.235 15236-16490/package-name I/mobile-ffmpeg:     Stream #0:0
            2021-10-14 09:35:49.235 15236-16490/package-name I/mobile-ffmpeg: : Video: gif, bgr8, 512x512 [SAR 1:1 DAR 1:1], q=2-31, 200 kb/s
2021-10-14 09:35:49.235 15236-16490/package-name I/mobile-ffmpeg: ,
            2021-10-14 09:35:49.235 15236-16490/package-name I/mobile-ffmpeg: 10 fps,
            2021-10-14 09:35:49.235 15236-16490/package-name I/mobile-ffmpeg: 100 tbn,
            2021-10-14 09:35:49.235 15236-16490/package-name I/mobile-ffmpeg: 10 tbc
2021-10-14 09:35:49.235 15236-16490/package-name I/mobile-ffmpeg:  (default)
            2021-10-14 09:35:49.235 15236-16490/package-name I/mobile-ffmpeg:     Metadata:
            2021-10-14 09:35:49.235 15236-16490/package-name I/mobile-ffmpeg:       encoder         :
            2021-10-14 09:35:49.235 15236-16490/package-name I/mobile-ffmpeg: Lavc58.96.100 gif
2021-10-14 09:35:49.704 15236-16490/package-name I/mobile-ffmpeg: frame=   14 fps=0.0 q=-0.0 size=     512kB time=00:00:01.31 bitrate=3201.8kbits/s speed=2.54x    
2021-10-14 09:35:50.201 15236-16490/package-name I/mobile-ffmpeg: frame=   28 fps= 27 q=-0.0 size=    1024kB time=00:00:02.71 bitrate=3095.4kbits/s speed=2.59x    
2021-10-14 09:35:50.201 15236-16490/package-name I/mobile-ffmpeg: frame=   28 fps= 27 q=-0.0 Lsize=    1260kB time=00:00:02.71 bitrate=3809.1kbits/s speed=2.59x    
2021-10-14 09:35:50.202 15236-16490/package-name I/mobile-ffmpeg: video:1260kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead:
            2021-10-14 09:35:50.202 15236-16490/package-name I/mobile-ffmpeg: 0.001550%

脚本隐藏了实际执行的命令。请显示完整的未经脚本处理的ffmpeg命令。复制并粘贴所有日志。 - llogan
我已经更新了问题,并添加了关于在透明动画gif上叠加图像的日志。不幸的是,我无法添加有关gif周围填充的日志,因为字符限制超过了。如果需要,我可以通过电子邮件发送日志文件给您。 - Arslan
请再次查看日志和命令。我已经更新了它们。当我将图像叠加在gif上或给输出文件添加填充时,我遇到了问题。它会将透明像素变成白色或黑色。 - Arslan
1个回答

1

1
我已经研究过了。问题是我之前已经阅读过它,但它并没有帮助我使输出周围的填充透明。我希望输出恰好为512x512,而不改变纵横比,这就是为什么我给它填充以填补剩余像素,但它们最终变成了白色。我该如何实现透明度? - Arslan
@arslanmuneer 请查看更新的答案。 - llogan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接