You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用ffmpeg-for-android将PNG序列循环动画叠加至MP4视频

解决方案:用FFmpeg-for-Android实现图片序列循环动画叠加到视频

嘿,欢迎来Stack Overflow提问!既然你是FFmpeg新手,我一步步帮你搞定这个需求,分两个核心步骤来做:

第一步:生成循环的透明PNG序列动画

首先,你需要把30张PNG转换成和原视频时长一致(20秒)、30fps的循环动画。假设你的PNG命名是frame_001.pngframe_030.png(如果命名不是这样,要改成统一的序号格式,比如frame_%03d.png匹配3位数字序号),用下面的命令生成循环动画文件(比如叫loop_animation.mp4):

ffmpeg -framerate 30 -stream_loop -1 -i /path/to/your/pngs/frame_%03d.png -t 20 -c:v libx264 -pix_fmt rgba loop_animation.mp4

参数解释:

  • -framerate 30:设置图片序列的帧率为30fps,和原视频一致
  • -stream_loop -1:让图片序列无限循环(后面用-t 20限制总时长为20秒,刚好匹配原视频)
  • -i /path/to/your/pngs/frame_%03d.png:指定PNG文件的路径和命名格式,%03d代表3位数字的序号(比如001、002...)
  • -t 20:设置输出动画的总时长为20秒
  • -c:v libx264:用H.264编码,兼容性好
  • -pix_fmt rgba:保留PNG的透明通道,这很重要!

第二步:将循环动画叠加到原MP4视频上

接下来用overlay滤镜把刚才生成的透明动画叠加到原视频上,命令如下:

ffmpeg -i /path/to/original_video.mp4 -i loop_animation.mp4 -filter_complex "[0:v][1:v]overlay" -c:a copy output_video.mp4

参数解释:

  • -i /path/to/original_video.mp4:输入原MP4视频
  • -i loop_animation.mp4:输入刚才生成的循环透明动画
  • -filter_complex "[0:v][1:v]overlay":把第二个输入(动画)叠加到第一个输入(原视频)的画面上,默认是左上角位置。如果需要居中叠加,可以改成overlay=x=(W-w)/2:y=(H-h)/2,其中W是原视频宽度,w是动画宽度,H和h同理
  • -c:a copy:直接复制原视频的音频,不用重新编码,节省时间
  • output_video.mp4:最终输出的视频文件

注意事项

  • 确保你的FFmpeg-for-Android版本支持libx264编码和overlay滤镜,大部分预编译的版本都支持,但如果遇到问题可以检查编译配置
  • 安卓上的文件路径要使用绝对路径,比如/storage/emulated/0/DCIM/your_video.mp4这种,避免权限问题,记得给APP申请存储读写权限
  • 如果PNG的命名不是连续序号,比如是img1.pngimg30.png,把命令里的frame_%03d.png改成img%d.png即可(如果是1位数字)

内容的提问来源于stack exchange,提问作者alex okochutin

火山引擎 最新活动