文章目录

一、使用 命令提取 音视频 数据

1、提取音频数据 - 保留封装格式

使用 命令 从 视频数据 中 提取 音频数据 / 视频数据 保留封装格式 , 封装格式 指的就是 封装 视频数据 的 容器 ;

一个 mp4 格式的视频 , 其 封装容器 就是 mp4 容器 , 其中 封装了 h.264 格式的视频数据 和 aac 格式的 音频数据 ;

执行

ffmpeg -i input.mp4 -vn -acodec copy output.mp4

命令 , 从 .mp4 输入文件中 , 提取 音频数据 到 .mp4 输出文件 , 封装容器 仍然是 mp4 格式的容器 ;

提取出来 的数据 是 音频数据 , 完全可以存储在 aac / mp3 / wav 等音频封装容器中 , 但是此处保留了 封装容器格式 , 仍然将 音频数据 存储在 mp4 格式的容器 中 ;

上述命令解析 :

注意 : 输出 音频文件 , 需要 使用 - 参数 , 设置 音频编解码器 ;

命令执行过程 : 执行

ffmpeg -i input.mp4 -vn -acodec copy output.mp4

执行前 , .mp4 的 封装容器 中的 音频流 和 视频流 格式如下 :

执行上述命令后的 输出文件 中 , 只有 AAC LC 格式的 音频流 数据 , 视频流 数据 被忽略掉了 ;

2、提取视频数据 - 保留封装格式

执行

ffmpeg -i input.mp4 -an -vcodec copy output.mp4

命令 , 从 .mp4 输入文件中 , 提取 视频数据 到 .mp4 输出文件 , 封装容器 仍然是 mp4 格式的容器 ;

提取出来 的数据 是 视频数据 , 完全可以存储在 h.264 视频封装容器中 , 但是此处保留了 封装容器格式 , 仍然将 视频数据 存储在 mp4 格式的容器 中 ;

注意 : 输出 视频文件 , 需要 使用 - 参数 , 设置 视频编解码器 ;

上述命令解析 :

命令执行过程 : 执行

ffmpeg -i input.mp4 -an -vcodec copy output.mp4

命令 ;

输出文件 .mp4 中 , 只有 AVC 格式的视频流数据 , 音频流数据被忽略掉了 ;

3、提取视频数据 - 保留编码格式

执行

ffmpeg -i input.mp4 -an -vcodec copy output.h264

命令 , 从 .mp4 输入文件中 , 提取 视频数据 到 .h264 输出文件中 , 不再使用原来的封装格式 ;

上述命令解析 :

执行过程 : 执行

ffmpeg -i input.mp4 -an -vcodec copy output.h264

命令过程 ;

转换后的 H.264 格式的 输出文件 中 , 只有一个 AVC 视频流 数据 ;

4、提取视频数据 - 重新编码

执行

ffmpeg -i input.mp4 -an -vcodec libx264 output.h264

命令 , 从 .mp4 输入文件中 , 提取 视频数据 到 .h264 输出文件中 , 并使用 编解码器重新进行编码 ;

上述命令解析 :

命令执行过程 :

由于设置了 视频编解码器 , 涉及到 视频重新编码 , 该过程很耗时 , 下面是视频重新编码过程 ;

使用 视频编解码器 重新 编码输出的 H.264 文件 的 视频信息 如下图所示 :

5、提取音频数据 - 保留编码格式

执行

ffmpeg -i input.mp4 -vn -acodec copy output.aac

命令 , 从 .mp4 输入文件中 , 提取 音频数据 到 .aac 输出文件中 , 不再使用原来的封装格式 ;

上述命令解析 :

执行过程 : 执行

ffmpeg -i input.mp4 -vn -acodec copy output.aac

命令过程 ;

执行完毕后 , .aac 输出文件中 有一个 AAC LC 音频流 数据 , 这就是从 .mp4 视频文件中提取的音频流数据 ;

6、提取音频数据 - 重新编码

执行

ffmpeg -i input.mp4 -vn -acodec libmp3lame output.mp3

命令 , 从 .mp4 输入文件中 , 提取 音频数据 并且进行重新编码 输出 到 .mp3 文件中 , 不再使用原来的封装格式 ;

上述命令解析 :

执行过程 : 执行

ffmpeg -i input.mp4 -vn -acodec libmp3lame output.mp3

命令过程 ;

提取 音频流 数据 并 使用 编解码器 进行重新编码后的 输出文件信息如下 :