ffmpeg拼接摄像头录制的MP4文件
学会如何拼接摄像头中的多个录像MP4文件, 成为一整段完整的录像MP4文件
有什么用
在苹果电脑中
学会如何拼接摄像头中的多个录像MP4文件, 成为一整段完整的录像MP4文件
学会如何拼接多张照片成视频
怎么用
安装ffmpeg
1 | brew install ffmpeg |
编辑和运行bash a.sh
相关内容
实现方法
批量重命名文件
排序后, MAC中选中多个文件, 然后选重命名,
会弹出一个对话框 如下图所示(这时修改完了的, 重新再重命名的界面)
拼接出mp4文件
1 |
|
终端中,cd 到 mp4 的目录,执行 bash a.sh,等待即可;
错误及解决办法
1 | ffmpeg -i a1.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 1.ts |
更换编码
从 h264_mp4toannexb 改成: hevc_mp4toannexb
成功拼接19个摄像头中的mp4文件: output.mp4, 一共19个文件, 合并后大小460MB, 约1小时时长.
成功拼接38个摄像头中的mp4文件: output.mp4. 一共38个文件, 合并后900MB, 2.5小时
灵感来源
拼接多张照片成视频
实践
1 | ffmpeg -r 1 -f image2 -i 202411231%03d.jpg output202411231.mp4 |
下一步: 插入视频背景音乐
理论过程
使用ffmpeg将图片拼接成视频前,需要将图片文件名做下预处理,文件名中必须有数字将其次序标记出来,这里我直接使用数字将图片重命名了,如下:
直接使用命令ffmpeg -f image2 -i %d.jpeg output.mp4
就可以将其转为mp4视频,命令中的%d是数字编号占位符,ffmpeg会按次序加载1-250.jpeg做为输入。这里我们没有指定如何其他参数,所以ffmpeg使用了默认的参数,比如帧率是25fps,视频使用了h264编码,分辨率直接使用了图片原始分辨率……
-r 调整帧率
不指定帧率的话,ffmpeg会使用默认的25帧,也就是1秒钟拼接25张图片,我们可以通过调整帧率的大小来控制最终生成视频的时长。
1 | ffmpeg -r 10 -f image2 -i %d.jpeg output1.mp4 |
如上命令每秒会拼接10张图片,250张图片最终会生成25秒的视频。
这里需要注意-r 10
参数的位置,在-i %d.jpeg
前面和在后面的效果是不一样的。放在-i后面只会改变输出的视频帧率,而输入的还是默认值25 ,比如ffmpeg -f image2 -i %d.jpeg -r 10 output1.mp4
,250张图片依旧只会生成10s的视频,但视频的播放征率会减小到10。
-b:v 调整视频码率
-b:v bitrate of video。如果原始图片比较大,默认参数生成的视频大小会比较大。比如上文中我使用的图片都是2k的高清图,最终生成的10s视频就有35MB,码率有近30Mb/s(码率是只1s播过的数据量,注意这里单位是小b)。
1 | ffmpeg -r 10 -f image2 -i %d.jpeg -b:v 4M output2.mp4 |
这里额外提醒下,改变码率会影响到视频清晰度,但并不意味着高码率的视频一定比低码率的视频清晰度更高,这还取决于视频编码格式,比如h265编码可以用更小的码率生成h264同等的视频质量,像av1、v8、v9等编码也优于h264。
-crf 调整视频质量
-crf Constant Rate Factor,用以平衡视频质量和文件大小的参数,FFMPEG里取值范围为0-51,取值越高内容损失越多,视频质量更差。 ffmpeg的默认值是23,建议的取值范围是17-28。
1 | ffmpeg -r 10 -f image2 -i %d.jpeg output3.mp4 |
-c:v 调整视频的编码格式
-c:v codec of video。目前ffmpeg针对于mp4默认使用的是h264,你可以使用-c:v libx265
生成同等质量,但文件更小的h265视频。
1 | ffmpeg -f image2 -i %d.jpeg -c:v libx265 output4.mp4 |
output4.mp4相比于上文中生成的output.mp4,视频文件大小减少了60%,但视频质量不变。你也可以使用-c:v libvpx
-c:v libvpx-vp9
分别生成v8和v9编码的webm文件。
1 | ffmpeg -f image2 -i %d.jpeg -c:v libvpx output-v8.webm #注意webm默认生成的是低质量的视频,可使用-crf或者-b:v参数调整视频质量。 |
-vf scale 调整视频分辨率
-vf scale: Video Filter Scale
1 | ffmpeg -f image2 -i %d.jpeg -s 640x480 output5.mp4 |
上面的命令会将视频直接调整为640x480的分辨率,如果原始图片不是4:3 肯定是会对原始图像做拉伸的。可以使用下面的命令等比例缩放
1 | ffmpeg -f image2 -i %d.jpeg -vf scale=-1:480 output5.mp4 #-1表示比例缩放,也可-vf scale=640:-1固定宽度缩放高度 |
以上就是几个常用的参数,这几个参数不仅限于图片转视频,视频转视频时也可以使用。
插入视频背景音乐
ffmpeg -an -i video.mp4 -stream_loop -1 -i bgm.mp3 -c:v copy -t 60 -y output_bgm.mp4
-an -i 代表消除源视频中的音频
-t 60 剪裁60秒
实例:
1 | ffmpeg -an -i output.mp4 -stream_loop -1 -i bgm.mp3 -c:v copy -t 2400 -y output_bgm.mp4 |
其他
2、视频编辑
比如从第5秒的地方开始,往后截取10秒钟
ffmpeg -ss 5 -t 10 -i output1.mp4 output2.mp4
4、视频加速
ffmpeg -i result.mp4 -vf setpts=PTS/2 -af atempo=2 result01.mp4
6、调整视频宽高
ffmpeg -i result.mp4 -vf scale=320*240 result02.mp4
实际用例模版
1. 组合监控截图
打开Terminal, cd 拉到NAS的目录中 cd /Volumes/homes/13261977480/Photos/ 生成视频:
1 | cd /Volumes/homes/13261977480/Photos/ |
一条命令将特定一组的监控截图拼接/合成成为视频mp4文件
背景说明: 由于这一组的监控截图时通过以下的命令, 定时从监控摄像头中截取/抽帧而来.
nohup ffmpeg -i “rtsp://:@192.168.6.21:554” -y -f image2 -r 1/180 /volume2/homes/13261977480/Photos/202411231%03d.jpg > /dev/null 2>&1
2. 添加背景音乐
预览一下上面那个组合起来的视频, 看看总时长时多少(比如: 44秒)
1 | ffmpeg -an -i output202412031.mp4 -stream_loop -1 -i bgm.mp3 -c:v copy -t 44 -y output_bgm.mp4 |
一条命令将mp4文件合成了背景音乐, 这第二条命令合并背景音乐, 并制定视频的总时长(如: 44秒)
3. 发布到B站/抖音等等
3.1 打开Bilibili创作中心 - 投稿, 直接拉入在NAS中生成的视频文件(完成上传)
填写基础及说明信息, 提交投稿
关键字:
Switch PS5 Xbox手柄快修
博主 carlzeng.com
海鲜市场账号: 手柄一修哥
小电玩专修 专业现场手柄快修 游戏手柄/主机修复 实时监控查看 switch ps5 xbox
坐标: 北京通州