【FFmpeg】视频裁剪与拼接命令 ( 裁剪视频命令

您所在的位置:网站首页 mp4格式编码调成什么车载能放 【FFmpeg】视频裁剪与拼接命令 ( 裁剪视频命令

【FFmpeg】视频裁剪与拼接命令 ( 裁剪视频命令

2024-07-14 22:47| 来源: 网络整理| 查看: 265

文章目录 一、裁剪视频1、裁剪视频命令2、h264 编码的 SPS 和 PPS 数据3、将裁剪的视频转为 ts 格式4、将裁剪的视频转为 flv 格式 二、拼接视频 - 相同编码和相同容器格式的拼接测试1、拼接视频命令 - mp4 格式直接使用命令拼接 mp4 视频 - 拼接失败指定文件列表拼接 mp4 视频 - 拼接成功但是播放不正常 2、拼接视频命令 - ts 格式直接使用命令拼接 ts 视频 - 拼接成功指定文件列表拼接 ts 视频 - 拼接成功 3、拼接视频命令 - flv 格式直接使用命令拼接 flv 视频 - 拼接失败指定文件列表拼接 flv 视频 - 拼接成功 三、拼接视频 - 不同编码和容器格式的拼接测试1、拼接视频命令 - 不同音频编码格式 导致 拼接失败2、拼接视频命令 - 不同音频编码格式 导致 拼接失败

视频裁剪拼接总结 :

视频裁剪 : 保证 视频编码 和 音频编码 统一 , 这样才能在之后 将这些视频 拼接起来 ; 如果后续需要拼接 , 则裁剪 ts 格式视频 ;视频拼接 : 设置输入文件 : 使用 list 列表 , 设置输入文件 , 不要使用 concat 字符串设置要拼接的视频文件 , 否则部分封装格式会拼接失败 ;视频格式要求 : 使用 ts 格式进行视频拼接 , 不要使用 mp4 和 flv 格式进行拼接 , 否则有可能导致视频拼接失败 ;视频编码要求 : 视频画面 的 分辨率 可以是不同的 , 但是 视频的 编码格式 必须相同 , 否则会出现问题 ;音频编码要求 : 音频 拼接时 , 音频编码格式需要相同 , 并且 音频 的 采样率 / 通道数 / 采样位数 等参数也必须相同 , 才可以进行拼接 , 否则会出现问题 ; 一、裁剪视频 1、裁剪视频命令

裁剪视频 , 需要指定 输入文件 / 裁剪起始时间 / 裁剪持续时间 / 指定 视频和音频 编码 ;

指定 输入文件 : 使用 -i 参数 指定输入文件 ;指定 起始时间 : 使用 -ss 参数 指定起始时间 , 参数值 10 表示从 第 10 秒开始裁剪 , 参数 00:00:10 表示从 第 10 秒 开始裁剪 ;指定 持续时间 : 使用 -t 参数 指定 裁剪持续时间 , 参数值 10 表示裁剪 10 秒视频 , 参数 00:00:10 表示 裁剪 10 秒视频 ;指定 视频编解码器 : 使用 -vcodec 参数 指定 视频编解码器 , 参数值 libx264 表示 H264 视频编解码 ;指定 音频编解码器 : 使用 -acodec 参数 指定 音频编解码器 , 参数值 aac 表示 AAC 音频编解码器 ;

注意 : 裁剪的视频 , 需要 保证 视频编码 和 音频编码 统一 , 这样才能在之后 将这些视频 拼接起来 ;

执行如下命令 , 裁剪出 3 个 5 秒 的 视频片段 ;

ffmpeg -i input.mp4 -ss 00:00:00 -t 5 -vcodec libx264 -acodec aac 1.mp4 ffmpeg -i input.mp4 -ss 00:00:10 -t 5 -vcodec libx264 -acodec aac 2.mp4 ffmpeg -i input.mp4 -ss 00:00:20 -t 5 -vcodec libx264 -acodec aac 3.mp4

执行完毕后 , 下图是 裁剪的第一个视频的执行结果 :

在这里插入图片描述

执行

ffprobe 1.mp4

查看裁剪出的视频信息 , 时长是 5 秒 , 视频编码是 H264 编码 , 音频编码是 AAC 编码 ;

在这里插入图片描述

2、h264 编码的 SPS 和 PPS 数据

在 H.264 视频编码格式中 :

SPS : 全称 Sequence Parameter Set , 序列参数集 , 主要用于 描述整个视频序列的全局参数 , 如 : 分辨率、宽高比、帧率、比特率 等 视频编码信息 ;PPS : 全称 Picture Parameter Set , 图像参数集 , 主要 包含了 图像 或 图像集合 的具体参数 , 如 : 熵编码模式选择、片组数目、初始量化参数等数据 , 这是解码图像数据的必须参数信息 ;

这两种数据 是非常重要的 视频信息单元 , PPS 数据 通常 在 SPS 数据 之后 , 并在 H.264 码流中作为 元数据 传输 ;

裁剪分离 视频 时 , 如果视频格式是 H.264 编码格式的 , 该视频格式中需要写入 SPS 和 PPS 信息 , 如果裁剪出来的视频 没有上述 SPS 和 PPS 数据 , 这个视频就无法播放 ;

将 mp4 格式的视频转为 其它格式时 , 建议添加 -vbsf h264_mp4toannexb 参数 , 可以避免 SPS 和 PPS 数据丢失的问题 , 以增加 视频 的 兼容性 ;

3、将裁剪的视频转为 ts 格式

执行

ffmpeg -i 1.mp4 -vcodec libx264 -acodec aac -vbsf h264_mp4toannexb 1.ts ffmpeg -i 2.mp4 -vcodec libx264 -acodec aac -vbsf h264_mp4toannexb 2.ts ffmpeg -i 3.mp4 -vcodec libx264 -acodec aac -vbsf h264_mp4toannexb 3.ts

将 裁剪出的 3 个 mp4 格式的 视频 , 转为 ts 格式的视频 ;

在这里插入图片描述

执行

ffprobe 1.ts

命令 , 查看 1.ts 视频容器 中的 视频信息如下 :

在这里插入图片描述

4、将裁剪的视频转为 flv 格式

执行

ffmpeg -i 1.mp4 -vcodec libx264 -acodec aac -vbsf h264_mp4toannexb 1.flv ffmpeg -i 2.mp4 -vcodec libx264 -acodec aac -vbsf h264_mp4toannexb 2.flv ffmpeg -i 3.mp4 -vcodec libx264 -acodec aac -vbsf h264_mp4toannexb 3.flv

将 裁剪出的 3 个 mp4 格式的 视频 , 转为 flv 格式的视频 ;

在这里插入图片描述

执行

ffprobe 1.flv

命令 , 查看 转换后的 1.flv 输出文件 ;

在这里插入图片描述

二、拼接视频 - 相同编码和相同容器格式的拼接测试

视频拼接 ,

使用 list 列表 , 设置输入文件 , 不要使用 concat 字符串设置要拼接的视频文件 , 否则部分封装格式会拼接失败 ;使用 ts 格式进行视频拼接 , 不要使用 mp4 和 flv 格式进行拼接 , 否则有可能导致视频拼接失败 ; 1、拼接视频命令 - mp4 格式

下面的 2 个命令中 , 使用 mp4 格式进行视频拼接 , 要么拼接失败 , 要么拼接出的视频效果不好 ;

ffmpeg -i "concat:1.mp4|2.mp4|3.mp4" -codec copy output.mp4 ffmpeg -f concat -i list.txt -codec copy output2.mp4 list.txt : file '1.mp4' file '2.mp4' file '3.mp4'

使用 mp4 格式进行视频拼接 , 多少会出现一点问题 ;

直接使用命令拼接 mp4 视频 - 拼接失败

执行下面的命令 , 拼接 mp4 文件 ,

ffmpeg -i "concat:1.mp4|2.mp4|3.mp4" -codec copy output.mp4

拼接完成后 , 发现 拼接后的 output.mp4 输出文件 是 1.mp4 , 没有拼接效果 ;

在这里插入图片描述

指定文件列表拼接 mp4 视频 - 拼接成功但是播放不正常

编辑一个 list.txt 列表 , 内容如下 :

file '1.mp4' file '2.mp4' file '3.mp4'

执行如下命令 , 执行效果与 -i "concat:1.mp4|2.mp4|3.mp4" 效果相同 ;

ffmpeg -f concat -i list.txt -codec copy output2.mp4

执行后 , 视频拼接成功 , 但是播放时 音频 与 视频 轨道并不同步 ;

在这里插入图片描述

2、拼接视频命令 - ts 格式

下面的 2 种视频拼接命令 , 效果都很好 ;

ffmpeg -i "concat:1.ts|2.ts|3.ts" -codec copy output.ts ffmpeg -f concat -i list.txt -codec copy output2.ts list.txt : file '1.ts' file '2.ts' file '3.ts' 直接使用命令拼接 ts 视频 - 拼接成功

执行

ffmpeg -i "concat:1.ts|2.ts|3.ts" -codec copy output.ts

命令 , 拼接 3 个视频 , 拼接成功 , 播放效果也很好 ;

在这里插入图片描述

指定文件列表拼接 ts 视频 - 拼接成功

首先 , 编辑一个 list.txt 文件 , 内容如下 :

file '1.ts' file '2.ts' file '3.ts'

然后 , 执行

ffmpeg -f concat -i list.txt -codec copy output2.ts

命令 , 成功拼接视频 , 视频播放效果也很好 ;

在这里插入图片描述

3、拼接视频命令 - flv 格式

下面的 2 种视频拼接命令 , 第一个命令拼接视频失败 ,

ffmpeg -i "concat:1.flv|2.flv|3.flv" -codec copy output.flv ffmpeg -f concat -i list.txt -codec copy output2.flv list.txt : file '1.flv' file '2.flv' file '3.flv' 直接使用命令拼接 flv 视频 - 拼接失败

执行

ffmpeg -i "concat:1.flv|2.flv|3.flv" -codec copy output.flv

命令 , 拼接 3 个视频 , 拼接失败 , output.flv 的文件内容是 1.flv 的内容 ;

在这里插入图片描述

指定文件列表拼接 flv 视频 - 拼接成功

首先 , 编辑一个 list.txt 文件 , 内容如下 :

file '1.flv' file '2.flv' file '3.flv'

然后 , 执行

ffmpeg -f concat -i list.txt -codec copy output2.flv

命令 , 成功拼接视频 并且可以成功播放 ;

在这里插入图片描述

三、拼接视频 - 不同编码和容器格式的拼接测试

视频拼接 ,

视频画面 的 分辨率 可以是不同的 , 但是 视频的 编码格式 必须相同 , 否则会出现问题 ;音频 拼接时 , 音频编码格式需要相同 , 并且 音频 的 采样率 / 通道数 / 采样位数 等参数也必须相同 , 才可以进行拼接 , 否则会出现问题 ;

在上一个章节中 , 使用 ts 格式进行视频拼接 , 成功率最高 , 本章节中主要展示 使用不同视频编码格式 , 不同音频编码格式 , 不同音频编码参数 导致失败的案例 ;

错误原因 : 拼接视频时 , 一般都以第一个视频的 编码格式 和 参数为基准 , 如果 后面的视频 编码 和 参数 与 第一个不同 , 就会出现各种问题 ;

1、拼接视频命令 - 不同音频编码格式 导致 拼接失败

执行

ffmpeg -i 2.mp4 -vcodec copy -acodec ac3 -vbsf h264_mp4toannexb 2.ts

命令 , 将 2.mp4 的 视频编码不变 , 音频编码 由 aac 改为 ac3 编码 , 此时 2.ts 的音频编码 与 1.ts 和 3.ts 的 aac 格式音频编码 不同 ;

在这里插入图片描述

此时 , 执行

ffmpeg -i "concat:1.ts|2.ts|3.ts" -codec copy output.mp4

命令 , 将 1.ts , 2.ts , 3.ts 这 3 个视频文件进行拼接 , 拼接过程就直接报错了 , 最终输出文件只有 5 秒 , 也就是 1.ts 的内容 , 剩余两个视频没有拼接上去 ;

在这里插入图片描述

2、拼接视频命令 - 不同音频编码格式 导致 拼接失败

执行

ffmpeg -i 2.mp4 -vcodec copy -acodec aac -ar 96000 -vbsf h264_mp4toannexb 2.ts

命令 , 将 2.mp4 的 视频编码不变 , 音频编码不变 , 但是音频的采样率改为 96000 Hz ;

在这里插入图片描述

此时 , 执行

ffmpeg -i "concat:1.ts|2.ts|3.ts" -codec copy output.mp4

命令 , 将 1.ts , 2.ts , 3.ts 这 3 个视频文件进行拼接 , 拼接过程也出现了 DTS 警告 , 视频时长是对的 , 但是 第二个音频 的采样率是错误的 , 播放 output.mp4 文件时 , 中间一段直接跳过 , 该输出文件有问题 ;

在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3