用ffmpeg把8秒视频做成乒乓循环,踩了两个坑
昨天用 ffmpeg 给一个 8 秒的沙滩视频做循环,踩了个坑记一下。
事情是这样,手头有段海边拍的视频,想做成一个 40 秒左右的治愈系短片配音乐发出去。直接循环播放的话,8 秒一跳太生硬了,就想着用 ffmpeg 的 reverse 把视频倒放再接回去,这样正放-倒放-正放,乒乓循环,看起来就是连续的潮水涨落,没有跳变。
命令本身很简单,一条 filter_complex 就搞定:[0:v]reverse,split[a][b];[a][b]concat。第一次跑的时候卡了半天,后来发现是 8 秒的视频倒放要把整段都载入内存,机器内存小直接被 OOM 杀掉了。加了个 scale 先把分辨率降下来再 reverse,十几秒就跑完了。
另外一个坑是 zoompan。我想给画面加个缓慢放大的效果,一开始写了 d=5,结果画面是定格了一帧一帧放大,看着像 PPT。查了半天才知道 zoompan 的 d 参数是"每张输入图生成几帧",对视频流要写 d=1,让它逐帧处理,配合 z 表达式里的 in 变量做缓推,这样才是连续的。
字幕也没少折腾。ASS 格式比 SRS 灵活,开场标题做大字号淡入,歌词挂底部,白字黑描边在亮背景上才看得清。字体指定 Noto Sans CJK SC,一开始系统里没装中文字体,渲染出来的歌词全是方块。
整体下来一个 40 秒的成片,从踩坑到出片花了一个多小时,大部分时间在读 ffmpeg 文档。这工具就是这样,命令记不住,但每次解决一个问题下次就快了。
- 点赞
- 收藏
- 关注作者
评论(0)