文章目录
- 一、使用 ffmpeg 命令提取 音视频 数据
- 1、提取音频数据 - 保留封装格式
- 2、提取视频数据 - 保留封装格式
- 3、提取视频数据 - 保留编码格式
- 4、提取视频数据 - 重新编码
- 5、提取音频数据 - 保留编码格式
- 6、提取音频数据 - 重新编码
一、使用 ffmpeg 命令提取 音视频 数据
1、提取音频数据 - 保留封装格式
使用 ffmpeg 命令 从 视频数据 中 提取 音频数据 / 视频数据 保留封装格式 , 封装格式 指的就是 封装 视频数据 的 容器 ;
一个 mp4 格式的视频 , 其 封装容器 就是 mp4 容器 , 其中 封装了 h.264 格式的视频数据 和 aac 格式的 音频数据 ;
执行
ffmpeg -i input.mp4 -vn -acodec copy output.mp4
命令 , 从 input.mp4 输入文件中 , 提取 音频数据 到 output.mp4 输出文件 , 封装容器 仍然是 mp4 格式的容器 ;
提取出来 的数据 是 音频数据 , 完全可以存储在 aac / mp3 / wav 等音频封装容器中 , 但是此处保留了 封装容器格式 , 仍然将 音频数据 存储在 mp4 格式的容器 中 ;
上述命令解析 :
-i input.mp4
参数 : 指定了 输入文件为 input.mp4 视频文件 ;-vn
参数 : 设置 ffmpeg 程序 提取 数据时 忽略视频流 , 只保留 音频流数据 ;-acodec copy
参数 : 设置 ffmpeg 程序 提取 音频流 时 不进行重新编码 , 只进行简单拷贝复制即可 ;output.mp4
参数 : 指定 提取后的音频数据 存放 的 输出文件 为 output.mp4 ;
注意 : 输出 音频文件 , 需要 使用 -acodec
参数 , 设置 音频编解码器 ;
命令执行过程 : 执行
ffmpeg -i input.mp4 -vn -acodec copy output.mp4
执行前 , input.mp4 的 封装容器 中的 音频流 和 视频流 格式如下 :
- 视频流 : 格式是 H.264 / AVC ( Advanced Video Coding ) 编码的 视频流 ;
- 音频流 : 格式 AAC LC 指的是 AAC ( Advanced Audio Coding ) 编码的音频流 , LC 指的是 特定为 Low Complexity 低复杂性 配置文件 ;
执行上述命令后的 输出文件 中 , 只有 AAC LC 格式的 音频流 数据 , 视频流 数据 被忽略掉了 ;
2、提取视频数据 - 保留封装格式
执行
ffmpeg -i input.mp4 -an -vcodec copy output.mp4
命令 , 从 input.mp4 输入文件中 , 提取 视频数据 到 output.mp4 输出文件 , 封装容器 仍然是 mp4 格式的容器 ;
提取出来 的数据 是 视频数据 , 完全可以存储在 h.264 视频封装容器中 , 但是此处保留了 封装容器格式 , 仍然将 视频数据 存储在 mp4 格式的容器 中 ;
注意 : 输出 视频文件 , 需要 使用 -vcodec
参数 , 设置 视频编解码器 ;
上述命令解析 :
-i input.mp4
参数 : 指定了 输入文件为 input.mp4 视频文件 ;-an
参数 : 设置 ffmpeg 程序 提取 数据时 忽略 音频流 数据 , 只保留 视频流 数据 ;-vcodec copy
参数 : 设置 ffmpeg 程序 提取 视频流 时 不进行重新编码 , 只进行简单拷贝复制即可 ;output.mp4
参数 : 指定 提取后的音频数据 存放 的 输出文件 为 output.mp4 ;
命令执行过程 : 执行
ffmpeg -i input.mp4 -an -vcodec copy output.mp4
命令 ;
输出文件 output.mp4 中 , 只有 AVC 格式的视频流数据 , 音频流数据被忽略掉了 ;
3、提取视频数据 - 保留编码格式
执行
ffmpeg -i input.mp4 -an -vcodec copy output.h264
命令 , 从 input.mp4 输入文件中 , 提取 视频数据 到 output.h264 输出文件中 , 不再使用原来的封装格式 ;
上述命令解析 :
-i input.mp4
参数 : 指定了 输入文件为 input.mp4 视频文件 ;-an
参数 : 设置 ffmpeg 程序 提取 数据时 忽略 音频流 数据 , 只保留 视频流 数据 ;-vcodec copy
参数 : 设置 ffmpeg 程序 提取 视频流 时 不进行重新编码 , 只进行简单拷贝复制即可 ;output.h264
参数 : 指定 提取后的视频数据 存放 的 输出文件 为 output.h264 ;
执行过程 : 执行
ffmpeg -i input.mp4 -an -vcodec copy output.h264
命令过程 ;
转换后的 H.264 格式的 输出文件 中 , 只有一个 AVC 视频流 数据 ;
4、提取视频数据 - 重新编码
执行
ffmpeg -i input.mp4 -an -vcodec libx264 output.h264
命令 , 从 input.mp4 输入文件中 , 提取 视频数据 到 output.h264 输出文件中 , 并使用 libx264 编解码器重新进行编码 ;
- 如果不重新编码 , 很快就能输出完毕 ;
- 重新进行视频编码 , 执行过程很耗时 ;
上述命令解析 :
-i input.mp4
参数 : 指定了 输入文件为 input.mp4 视频文件 ;-an
参数 : 设置 ffmpeg 程序 提取 数据时 忽略 音频流 数据 , 只保留 视频流 数据 ;-vcodec libx264
参数 : 设置 ffmpeg 程序 提取 视频流 时 使用 libx264 视频编解码器进行重新编码操作 ;output.h264
参数 : 指定 提取后的视频数据 存放 的 输出文件 为 output.h264 ;
命令执行过程 :
由于设置了 视频编解码器 , 涉及到 视频重新编码 , 该过程很耗时 , 下面是视频重新编码过程 ;
使用 libx264 视频编解码器 重新 编码输出的 H.264 文件 的 视频信息 如下图所示 :
5、提取音频数据 - 保留编码格式
执行
ffmpeg -i input.mp4 -vn -acodec copy output.aac
命令 , 从 input.mp4 输入文件中 , 提取 音频数据 到 output.aac 输出文件中 , 不再使用原来的封装格式 ;
上述命令解析 :
-i input.mp4
参数 : 指定了 输入文件为 input.mp4 视频文件 ;-vn
参数 : 设置 ffmpeg 程序 提取 数据时 忽略视频流 , 只保留 音频流数据 ;-acodec copy
参数 : 设置 ffmpeg 程序 提取 音频流 时 不进行重新编码 , 只进行简单拷贝复制即可 ;output.aac
参数 : 指定 提取后的音频数据 存放 的 输出文件 为 output.aac;
执行过程 : 执行
ffmpeg -i input.mp4 -vn -acodec copy output.aac
命令过程 ;
执行完毕后 , output.aac 输出文件中 有一个 AAC LC 音频流 数据 , 这就是从 input.mp4 视频文件中提取的音频流数据 ;
6、提取音频数据 - 重新编码
执行
ffmpeg -i input.mp4 -vn -acodec libmp3lame output.mp3
命令 , 从 input.mp4 输入文件中 , 提取 音频数据 并且进行重新编码 输出 到 output.mp3 文件中 , 不再使用原来的封装格式 ;
上述命令解析 :
-i input.mp4
参数 : 指定了 输入文件为 input.mp4 视频文件 ;-vn
参数 : 设置 ffmpeg 程序 提取 数据时 忽略视频流 , 只保留 音频流数据 ;-acodec libmp3lame
参数 : 设置 ffmpeg 程序 提取 音频流 时 使用 libmp3lame 音频编解码器对音频流数据重新进行编码 ;output.mp3
参数 : 指定 提取后的音频数据 存放 的 输出文件 为 output.mp3;
执行过程 : 执行
ffmpeg -i input.mp4 -vn -acodec libmp3lame output.mp3
命令过程 ;
提取 音频流 数据 并 使用 libmp3lame 编解码器 进行重新编码后的 输出文件信息如下 :