使用 ffmpeg,将多张图片转换成类似幻灯片的视频,支持多种转场效果

查看 50|回复 3
作者:jifengg   
hello ,兄弟们,我又来分享我的 ffmpeg 脚本啦。
这次分享的是一个图片转视频的功能。这个功能之前有 v 友问过,这不来了嘛。
这个脚本其实可以算是我编写的最早的一个 ffmpeg 脚本,只是一直没有再好好整理,这次正好趁着往脚本集添加的机会,重新梳理了一些逻辑、修复了一些 bug 、增加了一些配置项。
先看效果
gif 效果不好,请直接看视频( 394k ):
https://github.com/jifengg/ffmpeg-script/assets/17020523/fb0c9182-9161-4692-8884-a5faa98a3abd
为了不造成困扰,示例里没有添加音频和字幕,实际是支持的。
开源地址
GitHub 地址:https://github.com/jifengg/ffmpeg-script
运行脚本后,会扫描输入目录下的图片、音频、字幕文件(其中图片必须有,音频字幕可以没有,如果有则取第一个)。
根据命令行传入的不同参数配置,生成一个类似幻灯片的视频文件,加入各种转场效果。
这里列出脚本支持的参数,更多的使用方法可以到 github 中查看。
node ffmpeg.img2video.js -i  [-o  ...]
-preset         本脚本除了-preset 之外的所有参数,均可以通过传递 preset 文件来设置。
                        如果使用./preset/abc.preset 来设置,则-preset abc 即可。
                        preset 文件的编写请参考 github ( https://github.com/jifengg/ffmpeg-script )。                           
-i              [必须]要处理的图片/音频/字幕文件所在的目录,扫描时不包含子目录。
                        支持的图片:jpg jpeg png bmp webp
                        支持的音频:mp3 aac wav flac wma ape
                        支持的字幕:lrc srt ass
-o              视频文件的保存路径,默认为输入目录/output.mp4
-display       图片的显示方式,默认为 contain 。可选值为:
                        original:原图;
                        contain:等比例缩放至显示全图,可能有黑边;
                        cover:等比例缩放至能覆盖整个画面,可能有裁剪。
                        fill:拉伸变形至填充整个画面
-fps           输出视频的帧率,默认:25
-crf           ffmpeg 控制输出视频质量的参数,越小画面质量越好,视频文件也会越大,建议 18~30 之间。默认:23
-c:v           输出视频的编码器,默认:h264
-c:a           输出视频的音频编码器,默认:aac
-width         输出视频的宽度,默认:1920
-height        输出视频的高度,默认:1080
-td            图片切换动画时长,默认为 4 秒
-sd            图片独立显示时长,默认为 7 秒
-repeat                图片数量太少导致视频时长比音频时长短的时候,循环图片以达到音频的时长。默认:不循环
-y                      覆盖已经存在的输出文件,默认:false
-h                      显示这个帮助信息
-debug                  开启 debug 模式,打印更详细的日志
主要是应用了 ffmpeg 的过滤器xfade
使用 nodejs 是为了支持批量处理,以及将复杂化的命令行用简单的命令来代替。最终是生成一个 ffmpeg 命令行来进行所有处理。
如果你对 ffmpeg 开发也感兴趣,关于这个脚本的技术文章可以查看这里ffmpeg.img2video.md
另外,xfade 提供有 56 种内置效果,能满足大部分需求。不过,更复杂的过渡效果(例如翻页)还没有。
这个过滤器还有一个参数expr,它允许我们自定义过渡效果。不过这个在网上资料很少,正在研究,有点成果但不多。等我研究透了再更新。
脚本目前的参数配置还比较粗糙,转场效果用的是随机的,时长控制是统一的。后续考虑增加一些项目文件之类的文件,可以自主的控制每个图片的转场效果、持续时长、显示类型等等。如果你有类似的需求可以关注我。
flyn   
很实用,感谢分享
ToDayMkCode   
ffmpeg 处理是不是很耗性能呀!
jifengg
OP
  
@ToDayMkCode 确实耗性能,但是应该没有比 ffmpeg 更高效的方法了。另外如果有显卡,-c:v 可以传入 ffmpeg 支持的硬件编码,比如 N 卡的 h264_nvenc ,intel 集显或独显的 h264_qsv 等。
可以下载了脚本自己试试,win\linux\mac 都支持的
您需要登录后才可以回帖 登录 | 立即注册

返回顶部