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 <folder> [-o <file> ...]
-preset <string> 本脚本除了-preset 之外的所有参数,均可以通过传递 preset 文件来设置。
如果使用./preset/abc.preset 来设置,则-preset abc 即可。
preset 文件的编写请参考 github ( https://github.com/jifengg/ffmpeg-script )。
-i <string> [必须]要处理的图片/音频/字幕文件所在的目录,扫描时不包含子目录。
支持的图片:jpg jpeg png bmp webp
支持的音频:mp3 aac wav flac wma ape
支持的字幕:lrc srt ass
-o <string> 视频文件的保存路径,默认为输入目录/output.mp4
-display <string> 图片的显示方式,默认为 contain 。可选值为:
original:原图;
contain:等比例缩放至显示全图,可能有黑边;
cover:等比例缩放至能覆盖整个画面,可能有裁剪。
fill:拉伸变形至填充整个画面
-fps <number> 输出视频的帧率,默认:25
-crf <number> ffmpeg 控制输出视频质量的参数,越小画面质量越好,视频文件也会越大,建议 18~30 之间。默认:23
-c:v <string> 输出视频的编码器,默认:h264
-c:a <string> 输出视频的音频编码器,默认:aac
-width <number> 输出视频的宽度,默认:1920
-height <number> 输出视频的高度,默认:1080
-td <number> 图片切换动画时长,默认为 4 秒
-sd <number> 图片独立显示时长,默认为 7 秒
-repeat 图片数量太少导致视频时长比音频时长短的时候,循环图片以达到音频的时长。默认:不循环
-y 覆盖已经存在的输出文件,默认:false
-h 显示这个帮助信息
-debug 开启 debug 模式,打印更详细的日志
主要是应用了 ffmpeg 的过滤器xfade
使用 nodejs 是为了支持批量处理,以及将复杂化的命令行用简单的命令来代替。最终是生成一个 ffmpeg 命令行来进行所有处理。
如果你对 ffmpeg 开发也感兴趣,关于这个脚本的技术文章可以查看这里ffmpeg.img2video.md
另外,xfade 提供有 56 种内置效果,能满足大部分需求。不过,更复杂的过渡效果(例如翻页)还没有。
这个过滤器还有一个参数expr
,它允许我们自定义过渡效果。不过这个在网上资料很少,正在研究,有点成果但不多。等我研究透了再更新。
脚本目前的参数配置还比较粗糙,转场效果用的是随机的,时长控制是统一的。后续考虑增加一些项目文件
之类的文件,可以自主的控制每个图片的转场效果、持续时长、显示类型等等。如果你有类似的需求可以关注我。
![]() |
1
flyn 74 天前 via Android
很实用,感谢分享
|
2
ToDayMkCode 74 天前
ffmpeg 处理是不是很耗性能呀!
|
3
jifengg OP @ToDayMkCode 确实耗性能,但是应该没有比 ffmpeg 更高效的方法了。另外如果有显卡,-c:v 可以传入 ffmpeg 支持的硬件编码,比如 N 卡的 h264_nvenc ,intel 集显或独显的 h264_qsv 等。
可以下载了脚本自己试试,win\linux\mac 都支持的 |
![]() |
4
ashin 74 天前 via iPhone
不错,已 star
|
![]() |
5
rekulas 74 天前
我们以前也做过,嫌 xfade 的太普通了,直接扒剪映的 shader 过来修改后喂给 ffmpeg ,就可以实现很炫的转场 😂
|
![]() |
7
rekulas 74 天前
|
![]() |
10
Smilencer 73 天前 via iPhone
感谢分享,有空试下效果呢
|