【问题标题】:How do I make a video with a static image background in FFMPEG?如何在 FFMPEG 中制作具有静态图像背景的视频?
【发布时间】:2011-09-07 20:29:34
【问题描述】:

我有一张图片。我有一个透明的 FLV。我想将图像用作透明 FLV 的背景并将其作为 FLV 输出。

此命令有效,但视频是一帧长:

ffmpeg -i background.png -f flv -vcodec flv -b 1500k -vf "movie=test_videos/alpha.flv [logo]; [in][logo] overlay=0:0 [out]" -s 800x464 -y output.flv

我尝试使用 -t 和 -vframes 参数无济于事。

有人有什么建议吗?

【问题讨论】:

  • 您可以使用一些技巧在视频顶部添加图像(水印),但不幸的是我不相信 FFMpeg 中有任何东西可以让您执行相反的操作(色度键/绿屏/蓝屏)。
  • 好吧,我已经有一个处理图像的透明视频,所以我希望证明你错了,@Chris Haas。感谢您的意见。

标签: ffmpeg


【解决方案1】:

我为我最初的评论道歉,我的搜索最初产生的结果很少。

现在查看documentation,我发现事实上您应该能够做到这一点。我没有时间对此进行测试,但我会尝试通过两次。第一遍应该将您的 PNG 转换为具有透明背景的电影,其持续时间与您的其他电影相同。比如:

ffmpeg -loop_input -f image2 -i background.png -r 25 -vframes 250 -an -vcodec png test.mov

我选择 PNG 作为视频编解码器,因为根据 this post 它支持 MOV 容器中的透明度。

那么您应该希望能够将该电影通过管道传输到您拥有图像的原始命令中。

【讨论】:

  • 太棒了,克里斯。让我得到我想要的完整解决方案是这个命令: ffmpeg -loop_input -f image2 -i background.png -r 25 -vframes 2500 -an -vcodec libx264 -b 1500k -vf "movie=test_videos/alpha.flv [logo ]; [in][logo] overlay=0:0 [out]" -s 800x464 -y output.mov
  • 很高兴听到!所以基本上它只是您需要添加到原始命令中的 -loop_input 部分,您不需要进行两次传递?
  • 我从 flv 开始(flv 支持透明度 OOTB)并将其添加为静态图像上的叠加层(使用 loop_input 和 -vframes 使其长于一帧),这似乎有点反直觉的。但是,使用这种方法,不需要进行两次传递。非常感谢您的帮助!
  • 重要提示 使过程更快:指定 4 或更多线程 (经验法则是每个 CPU 1 个) 你把它放在第一位 ffmpeg.exe -threads 4 -i back...第二个提示:如果你使用MP3作为音轨,并且你的目标文件扩展名是.MP4指定-acodec copy这样你会保存一个大量处理,您可以在 10 秒内完成不客气。
  • -loop_input 已弃用。这是今天有效的答案:video.stackexchange.com/questions/14519/…
【解决方案2】:

得到我想要的完整解决方案是这个命令:

ffmpeg -loop_input -f image2 -i background.png -r 25 -vframes 2500 -an -vcodec libx264 -b 1500k -vf "movie=test_videos/alpha.flv [logo]; [in][logo] overlay=0:0 [out]" -s 800x464 -y output.mov

【讨论】:

  • 那行得通。只需要进行一项更改 -loop_input 已被弃用,因此必须使用 -loop 1
猜你喜欢
  • 2021-07-08
  • 2019-09-15
  • 1970-01-01
  • 2018-02-08
  • 1970-01-01
  • 1970-01-01
  • 2012-05-13
  • 2019-03-11
  • 1970-01-01
相关资源
最近更新 更多