gpt4 book ai didi

ffmpeg 在视频上覆盖透明动画 gif 并保持 gif 背景透明度

转载 作者:行者123 更新时间:2023-12-04 22:51:26 32 4
gpt4 key购买 nike

我试图在视频上重叠动画 gif,但没有成功。

我的目标是下一个:

  • gif 动画必须循环播放,直到视频结束。
  • gif 被缩放以覆盖整个视频。
  • gif 保留透明度。

  • 我在这方面取得的最大成就是 gif 使用比例过滤器覆盖了整个视频,并且它循环播放直到视频结束(但我猜这不是最好的方式)。

    关于循环,我知道我可以在覆盖中使用 -ignore_loop 0 gif 过滤器参数和 shortest=1 但这样它不起作用所以我最终得到 -frames:v 900 (我的视频是 30fps 和 30 秒长,所以 900 是帧)。

    我最重要的问题是我无法保持 gif 透明度,而且我尝试过的一切都没有成功。

    这是我的带有参数的 ffmpeg 命令,所以我希望任何人都可以提供帮助(我使用的是 ffmpeg 4.1)。
    ffmpeg -y 
    -i videoin.mp4
    -i anim01.gif
    -filter_complex [1:v]scale=1080:1920[ovrl] [0:v][ovrl]overlay=main_w-overlay_w:main_h-overlay_h
    -frames:v 900
    -codec:a copy
    -codec:v libx264
    -preset ultrafast
    video.mp4

    最佳答案

    好的,我会回答我自己的问题。第一部分,不能实现gif透明,真是个傻问题!!我使用的 gif 不是透明的,我没有意识到!天哪,我想,所以每当您遇到透明度问题时,这是首先要检查的事情。

    第二个,循环播放 gif 直到视频结束,我无法使用 -ignore_loop 0 和 shortest=1 来做到这一点,但我所做的是 -ignore_loop 0 -帧:v 900 这就像一个魅力。

    不起作用的不是 -ignore_loop 0 而是 shortest=1 ,因此 ffmpeg 永远不会结束编码,但是如果您将其设置为在一定数量的帧处完成,则可以解决问题。

    900 来自 30fps x 30 秒视频。

    最后,我完整的ffmpeg命令行参数如下:

    ffmpeg -y -i xxx.mp4 -ignore_loop 0 -i xxx.gif -filter_complex "[1:v]scale=1080:1920[ovrl];[0:v][ovrl]overlay=0:0" -frames:v 900 -codec:a copy -codec:v libx264 -max_muxing_queue_size 2048 video.mp4

    关于ffmpeg 在视频上覆盖透明动画 gif 并保持 gif 背景透明度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55553681/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com