惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

罗磊的独立博客
The GitHub Blog
The GitHub Blog
Hugging Face - Blog
Hugging Face - Blog
博客园 - 聂微东
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
IT之家
IT之家
小众软件
小众软件
博客园_首页
G
Google Developers Blog
Apple Machine Learning Research
Apple Machine Learning Research
MyScale Blog
MyScale Blog
Engineering at Meta
Engineering at Meta
Jina AI
Jina AI
酷 壳 – CoolShell
酷 壳 – CoolShell
人人都是产品经理
人人都是产品经理
B
Blog RSS Feed
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
D
Docker
B
Blog
雷峰网
雷峰网
WordPress大学
WordPress大学
Stack Overflow Blog
Stack Overflow Blog
宝玉的分享
宝玉的分享

博客园 - CarlZeng

NetSuite接口开发之JSON源数据发送实现gzip压缩 NetSuite的gzip解压缩在接口开发中的应用 硬件PCB设计及编程实现学习项目pixl-js-模拟Amiibo wordpress转支付宝小程序 奥克掌机更换霍尔摇杆及校准 DSE-Shoulder-R1-L1-and-Bumper-R2-L2-Omoron-Switch-Buttons ESXI之N5105倍控小主机体验及现实应用 如何远程编译生成Switch最新版大气层整合包 自建远程协助软件rustdesk实现远程桌面远程控制软件 浅谈路由器Openwrt防火墙的-端口转发-与-NAT穿透-区别与优缺点 Joycon2手柄如何连接电脑测试按键摇杆等功能 Switch大气层游戏下载服务及实测列表 塞尔达传说王国之泪公主之花模组MOD XBOX精英二代霍尔板机故障修复及校准 Switch大气层20-整合包1-9-0测试版 - CarlZeng How-to-extract-text-from-PDF-Image-files-OCR-CarlZeng How-to-setup-oAuth-2-0-in-NetSuite-RESTlet-API-如何在NetSuite中设置RESTlet-API的oAuth2-0认证 吉比特光猫HG6145D1改桥接获超级密码开Telnet Nintendo-Switch安装塞尔达传说Mod大师模式 光猫设置端口映射IP端口转发 Switch安装安卓系统用于调试硬件 Switch联网证书浅谈 Switch下安装全能模拟器switch全能模拟器RetroArch Docker搭建pigallery2目录优先的图片库网站 Switch大气层20-整合包1-9-0测试版 索尼PlayStation全部记录
ffmpeg拼接摄像头录制的MP4文件
CarlZeng · 2025-05-08 · via 博客园 - CarlZeng

学会如何拼接摄像头中的多个录像MP4文件, 成为一整段完整的录像MP4文件

Your browser does not support the audio element.

有什么用

在苹果电脑中

学会如何拼接摄像头中的多个录像MP4文件, 成为一整段完整的录像MP4文件

学会如何拼接多张照片成视频

怎么用

安装ffmpeg

brew install ffmpeg

编辑和运行bash a.sh

相关内容

实现方法

批量重命名文件

排序后, MAC中选中多个文件, 然后选重命名,

会弹出一个对话框 如下图所示(这时修改完了的, 重新再重命名的界面)

image-20241126124837983

image-20241126112257942

拼接出mp4文件

#! /bin/bash
# 将 mp4 文件封装为 ts 格式
ffmpeg -i a1.mp4 -vcodec copy -acodec copy -vbsf hevc_mp4toannexb 1.ts
ffmpeg -i a2.mp4 -vcodec copy -acodec copy -vbsf hevc_mp4toannexb 2.ts
ffmpeg -i a3.mp4 -vcodec copy -acodec copy -vbsf hevc_mp4toannexb 3.ts
ffmpeg -i a4.mp4 -vcodec copy -acodec copy -vbsf hevc_mp4toannexb 4.ts
ffmpeg -i a5.mp4 -vcodec copy -acodec copy -vbsf hevc_mp4toannexb 5.ts
ffmpeg -i a6.mp4 -vcodec copy -acodec copy -vbsf hevc_mp4toannexb 6.ts
ffmpeg -i a7.mp4 -vcodec copy -acodec copy -vbsf hevc_mp4toannexb 7.ts
ffmpeg -i a8.mp4 -vcodec copy -acodec copy -vbsf hevc_mp4toannexb 8.ts
ffmpeg -i a9.mp4 -vcodec copy -acodec copy -vbsf hevc_mp4toannexb 9.ts
ffmpeg -i a10.mp4 -vcodec copy -acodec copy -vbsf hevc_mp4toannexb 10.ts
ffmpeg -i a11.mp4 -vcodec copy -acodec copy -vbsf hevc_mp4toannexb 11.ts
ffmpeg -i a12.mp4 -vcodec copy -acodec copy -vbsf hevc_mp4toannexb 12.ts
ffmpeg -i a13.mp4 -vcodec copy -acodec copy -vbsf hevc_mp4toannexb 13.ts
ffmpeg -i a14.mp4 -vcodec copy -acodec copy -vbsf hevc_mp4toannexb 14.ts
ffmpeg -i a15.mp4 -vcodec copy -acodec copy -vbsf hevc_mp4toannexb 15.ts
ffmpeg -i a16.mp4 -vcodec copy -acodec copy -vbsf hevc_mp4toannexb 16.ts
ffmpeg -i a17.mp4 -vcodec copy -acodec copy -vbsf hevc_mp4toannexb 17.ts
ffmpeg -i a18.mp4 -vcodec copy -acodec copy -vbsf hevc_mp4toannexb 18.ts
ffmpeg -i a19.mp4 -vcodec copy -acodec copy -vbsf hevc_mp4toannexb 19.ts
# 拼接 ts 并导出最终 mp4 文件
ffmpeg -i "concat:1.ts|2.ts|3.ts|4.ts|5.ts|6.ts|7.ts|8.ts|9.ts|10.ts|11.ts|12.ts|13.ts|14.ts|15.ts|16.ts|17.ts|18.ts|19.ts" -acodec copy -vcodec copy -absf aac_adtstoasc output.mp4
# 删除过程中生成的 ts 文件
rm *.ts

终端中,cd 到 mp4 的目录,执行 bash a.sh,等待即可;

错误及解决办法

ffmpeg -i a1.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 1.ts

[h264_mp4toannexb @ 0x127f2e760] Codec 'hevc' (173) is not supported by the bitstream filter 'h264_mp4toannexb'. Supported codecs are: h264 (27)

[vost#0:0/copy @ 0x145f07ec0] Error initializing bitstream filter: h264_mp4toannexb
Error opening output file 1.ts.
Error opening output files: Invalid argument


更换编码

从 h264_mp4toannexb 改成: hevc_mp4toannexb

成功拼接19个摄像头中的mp4文件: output.mp4, 一共19个文件, 合并后大小460MB, 约1小时时长.

成功拼接38个摄像头中的mp4文件: output.mp4. 一共38个文件, 合并后900MB, 2.5小时

灵感来源

使用 ffmpeg,完成多个 mp4 文件合并

拼接多张照片成视频

实践

ffmpeg -r 1 -f image2 -i 202411231%03d.jpg output202411231.mp4 

image-20241126132503158

下一步: 插入视频背景音乐

理论过程

使用ffmpeg将图片拼接成视频前,需要将图片文件名做下预处理,文件名中必须有数字将其次序标记出来,这里我直接使用数字将图片重命名了,如下:

直接使用命令ffmpeg -f image2 -i %d.jpeg output.mp4 就可以将其转为mp4视频,命令中的%d是数字编号占位符,ffmpeg会按次序加载1-250.jpeg做为输入。这里我们没有指定如何其他参数,所以ffmpeg使用了默认的参数,比如帧率是25fps,视频使用了h264编码,分辨率直接使用了图片原始分辨率……

-r 调整帧率

不指定帧率的话,ffmpeg会使用默认的25帧,也就是1秒钟拼接25张图片,我们可以通过调整帧率的大小来控制最终生成视频的时长。

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)。

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。

ffmpeg -r 10 -f image2 -i %d.jpeg output3.mp4

-c:v 调整视频的编码格式

-c:v codec of video。目前ffmpeg针对于mp4默认使用的是h264,你可以使用-c:v libx265生成同等质量,但文件更小的h265视频。

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文件。

ffmpeg -f image2 -i %d.jpeg -c:v libvpx output-v8.webm #注意webm默认生成的是低质量的视频,可使用-crf或者-b:v参数调整视频质量。

-vf scale 调整视频分辨率

-vf scale: Video Filter Scale

ffmpeg -f image2 -i %d.jpeg -s 640x480 output5.mp4

上面的命令会将视频直接调整为640x480的分辨率,如果原始图片不是4:3 肯定是会对原始图像做拉伸的。可以使用下面的命令等比例缩放

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秒

实例:

ffmpeg -an -i output.mp4 -stream_loop -1 -i bgm.mp3 -c:v copy -t 2400 -y output_bgm.mp4

#合并, 去除原声, 一共剪裁输出40分钟的视频
#-t 60 代表剪裁输出60秒视频
#-stream_loop -1  参数-1代表循环输入源
#-c:v copy 对视频流进行复制,不需要重新编解码(前提是输入流和输出流一致),速度极快

其他

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/ 生成视频:

cd /Volumes/homes/13261977480/Photos/
ffmpeg -r 1 -f image2 -i 202411231%03d.jpg output202411231.mp4 

一条命令将特定一组的监控截图拼接/合成成为视频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

实例

cd /Users/carlzeng/.ssh
./sshNas.sh
cd /Volumes/homes/13261977480/Photos/

ffmpeg -r 1 -f image2 -i 202503073%03d.jpg Quest3更换摇杆202503073.mp4

ffmpeg -an -i Quest3更换摇杆202503073.mp4 -stream_loop -1 -i bgm.mp3 -c:v copy -t 23 -y Quest3更换摇杆20250307_bgm.mp4

2. 添加背景音乐

预览一下上面那个组合起来的视频, 看看总时长时多少(比如: 44秒)

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中生成的视频文件(完成上传)

填写基础及说明信息, 提交投稿

image-20241130215646973

3.2 打开抖音网页版 抖音创作者中心 - 发布视频

image-20241203233954551

3.3 打开小红书网页版 创作服务平台 - 发布笔记

关键字:

Switch PS5 Xbox手柄快修 Steamdeck Quest

博主 www.carlzeng.com

海鲜市场账号: 手柄一修哥

小电玩专修 专业现场手柄快修 游戏手柄/主机修复 实时监控查看 switch ps5 xbox

坐标: 北京通州