当前位置:   article > 正文

【FFmpeg】视频裁剪与拼接命令 ( 裁剪视频命令 | h264 编码的 SPS 和 PPS 数据 | 拼接视频 - 相同编码和相同容器格式的拼接 | 拼接视频 - 不同编码和容器格式的拼接测试 )_h264 sps

h264 sps


视频裁剪拼接总结 :

  • 视频裁剪 : 保证 视频编码 和 音频编码 统一 , 这样才能在之后 将这些视频 拼接起来 ; 如果后续需要拼接 , 则裁剪 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
  • 1
  • 2
  • 3

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

在这里插入图片描述

执行

ffprobe 1.mp4
  • 1

查看裁剪出的视频信息 , 时长是 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
  • 1
  • 2
  • 3

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

在这里插入图片描述

执行

ffprobe 1.ts
  • 1

命令 , 查看 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
  • 1
  • 2
  • 3

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

在这里插入图片描述

执行

ffprobe 1.flv
  • 1

命令 , 查看 转换后的 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'  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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


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


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

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

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

在这里插入图片描述


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


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

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

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

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

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

在这里插入图片描述


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'  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

直接使用命令拼接 ts 视频 - 拼接成功


执行

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

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

在这里插入图片描述


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


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

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

然后 , 执行

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

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

在这里插入图片描述


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'  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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


执行

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

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

在这里插入图片描述


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


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

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

然后 , 执行

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

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

在这里插入图片描述





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



视频拼接 ,

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

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

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


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


执行

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

命令 , 将 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

命令 , 将 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
  • 1

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

在这里插入图片描述

此时 , 执行

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

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

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/833955
推荐阅读
相关标签
  

闽ICP备14008679号