音视频 fmpeg命令裁剪和合并视频

简介: 音视频 fmpeg命令裁剪和合并视频

一、生成测试文件

找三个不同的视频每个视频截取10秒内容

ffmpeg -i 沙海02.mp4 -ss 00:05:00 -t 10 -codec copy 1.mp4
ffmpeg -i 复仇者联盟3.mp4 -ss 00:05:00 -t 10 -codec copy 2.mp4
ffmpeg -i 红海行动.mp4 -ss 00:05:00 -t 10 -codec copy 3.mp4

如果音视频格式不统一则强制统一为 -vcodec libx264 -acodec aac

将上述1.mp4/2.mp4/3.mp4转成ts格式

ffmpeg -i 1.mp4 -codec copy -vbsf h264_mp4toannexb 1.ts
ffmpeg -i 2.mp4 -codec copy -vbsf h264_mp4toannexb 2.ts
ffmpeg -i 3.mp4 -codec copy -vbsf h264_mp4toannexb 3.ts

转成flv格式

ffmpeg -i 1.mp4 -codec copy 1.flv
ffmpeg -i 2.mp4 -codec copy 2.flv
ffmpeg -i 3.mp4 -codec copy 3.flv

分离某些封装格式(例如MP4/FLV/MKV等)中的H.264的时候,需要首先写入SPS和PPS,否则会导致分离出来的数据没有SPS、PPS而无法播放。H.264码流的SPS和PPS信息存储在AVCodecContext结构体的extradata中。需要使用ffmpeg中名称为“h264_mp4toannexb”的bitstream filter处理

二、开始拼接文件

以MP4格式进行拼接

方法1:ffmpeg -i "concat:1.mp4|2.mp4|3.mp4" -codec copy out_mp4.mp4 
方法2:ffmpeg -f concat -i mp4list.txt -codec copy out_mp42.mp4

以TS格式进行拼接

方法1:ffmpeg -i "concat:1.ts|2.ts|3.ts" -codec copy out_ts.mp4 
方法2:ffmpeg -f concat -i tslist.txt -codec copy out_ts2.mp4

以FLV格式进行拼接

方法1:ffmpeg -i "concat:1.flv|2.flv|3.flv" -codec copy out_flv.mp4 
方法2:ffmpeg -f concat -i flvlist.txt -codec copy out_flv2.mp4

方法1只适用部分封装格式,比如TS

建议:

(1)使用方法2进行拼接

(2)转成TS格式再进行拼接

三、测试不同编码拼接

修改音频编码

ffmpeg -i 2.mp4 -vcodec copy -acodec ac3 -vbsf h264_mp4toannexb 2.ts
ffmpeg -i "concat:1.ts|2.ts|3.ts" -codec copy out1.mp4 结果第二段没有声音

修改音频采样率

ffmpeg -i 2.mp4 -vcodec copy -acodec aac -ar 96000 -vbsf h264_mp4toannexb 2.ts
ffmpeg -i "concat:1.ts|2.ts|3.ts" -codec copy out2.mp4 第二段播放异常

修改视频编码格式

ffmpeg -i 1.mp4 -acodec copy -vcodec libx265 1.ts
ffmpeg -i "concat:1.ts|2.ts|3.ts" -codec copy out3.mp4

修改视频分辨率

ffmpeg -i 1.mp4 -acodec copy -vcodec libx264 -s 800x472 -vbsf h264_mp4toannexb 1.ts
ffmpeg -i "concat:1.ts|2.ts|3.ts" -codec copy out4.mp4

注意:

(1)把每个视频封装格式也统一为ts,拼接输出的时候再输出你需要的封装格式,比如MP4

(2)视频分辨率可以不同,但是编码格式需要统一

(3)音频编码格式需要统一,音频参数(采样率/声道等)也需要统一


推荐一个零声学院项目课,个人觉得老师讲得不错,分享给大家:

零声白金学习卡(含基础架构/高性能存储/golang云原生/音视频/Linux内核)

https://xxetb.xet.tech/s/VsFMs


相关文章
|
开发工具 对象存储 Python
使用Python的SDK从OSS中下载指定日期的所有文件
使用Python的SDK从OSS中下载指定日期的所有文件
599 1
|
Windows
必杀技 -- 使用 FFmpeg 命令快速精准剪切视频
很多时候我们需要把大的视频剪切成多段短视频方便我们上传到网站/上传到朋友圈,或者我们需要把长视频中的一个精彩片段剪切出来.这时候FFmpeg的剪辑功能就派上用场了,但是FFmpeg这个功能更适合用于视频网站平台对用户上传视频的实时处理 前提:你的电脑安装了FFmpeg
1137 1
|
前端开发 应用服务中间件 PHP
解决php因为输出内容太短无法流式(Stream)输出问题
本文探讨了PHP流式输出的问题,指出当每次`echo`的内容过短时,前端可能无法实时接收。通过测试发现,需达到一定长度(如1024字节)时流式输出才会生效。为解决此问题,建议在PHP代码中检查输出内容长度,不足时拼接特殊标记,前端接收到后通过正则表达式移除。示例代码提供了解决方案,文章鼓励读者留言讨论和点赞分享。关注作者微信公众号【xdub】获取更多相关内容。
177 2
|
人工智能 自然语言处理
如何使用 Co-STAR 模型来设计提示词
如何使用 Co-STAR 模型来设计提示词
1471 0
|
机器学习/深度学习 人工智能 数据中心
NVIDIA大模型平台软件全家桶开启云智能第二曲线
NVIDIA大模型平台软件全家桶开启云智能第二曲线
|
关系型数据库 MySQL PHP
【thinkphp知识】thinkphp 使用union链式操作合并两个或多个 SELECT 语句的结果集,新增不存在的字段,并赋予默认值
【thinkphp知识】thinkphp 使用union链式操作合并两个或多个 SELECT 语句的结果集,新增不存在的字段,并赋予默认值
233 0
|
Ubuntu Linux C语言
详细解读11、串口编程
详细解读11、串口编程
209 0
|
Java API 调度
Java 中如何实现协程?
Java 中如何实现协程?
|
存储 Linux API
解析音频输出调节音量的原理以及调节的方法
解析音频输出调节音量的原理以及调节的方法
1376 0
【python】使用python将多个视频合并、延长视频的时间
今天做知识分享的时候,最后保存的视频时长是58分钟,那么如何改变视频的时长,将视频时长改为一个小时呢?请阅读下面的文章。
【python】使用python将多个视频合并、延长视频的时间