【FFmpeg】ffmpeg 命令行参数 ⑥ ( 使用 FFmpeg 提取 YUV 像素格式数据 | 使用 FFmpeg 提取 RGB 像素格式数据 | RGB 与 YUV 之间的格式转换 )
文章目录
一、使用 FFmpeg 提取 YUV 像素格式数据
1、YUV 像素格式
FFmpeg 是一个非常强大的多媒体处理工具 , 可以用来 处理 / 转换 / 播放 各种音视频格式的数据 , 因此 使用 FFmpeg 自然也可以提取 YUV 像素格式的数据 ;
在学习 FFmpeg 时 , 经常需要使用 YUV 像素格式 的 视频数据 来测试 编解码器 , 网上一般很少有 像素格式 的视频 , 因为占据的空间巨大 , 此时就需要 使用 FFmpeg 工具自己提取像素格式的视频数据 ;
2、提取 YUV 数据
执行下面的命令 , 可以 使用 ffmpeg 工具 从 input.mp4 视频文件 中提取 YUV420P 格式的数据 到 output_yuv420p.yuv 输出文件 中 ;
ffmpeg -i input.mp4 -pix_fmt yuv420p -f rawvideo output_yuv420p.yuv
-i input.mp4
设置 要提取数据的 输入视频文件 ;-pix_fmt yuv420p
设置 提取后的输出文件 的 数据格式为 YUV420P 像素格式 ;-f rawvideo
设置 输出的数据格式 为 原始视频数据 ;output_yuv420p.yuv
设置 输出文件的 文件名称 ;
执行过程如下 :
输入 MP4 格式 视频文件 是 H.264 编码格式 , 1 分钟的视频大概有 13MB ;
输出 YUV 格式 视频文件 是 YUV 像素格式 , 1 分钟视频大概有 837MB , 像素格式的视频数据占据的空间是 H264 压缩格式的 80 倍 ;
3、提取 YUV 数据 - 设定提取长度和画面大小
可以通过 -t
参数 , 设置提取前 3 秒的视频数据 ,
通过 -s
参数 , 设置 提取 320x240 大小的视频画面 数据 ,
执行
ffmpeg -i input.mp4 -t 3 -s 320x240 -pix_fmt yuv420p -f rawvideo output_yuv420p.yuv
可以看到 , 提取的 3 秒钟 的 YUV 格式 320x240 格式 的视频数据 有 10MB 左右 ;
4、使用 ffplay 播放 YUV 视频
播放一个 YUV 像素格式的视频 , 必须知道该视频的
- 尺寸 : 通过
-video_size
参数设置 ; - 帧率 : 通过
-framerate
参数设置 ; - 具体像素格式 : 通过
-pixel_format
参数设置 ;
执行
ffplay -pixel_format yuv420p -video_size 320x240 -framerate 5 -i output_yuv420p.yuv
命令 , 可以播放 上述导出的 320x240 大小的 yuv420p 格式的 视频文件 ;
参考 【FFmpeg】ffplay 命令行参数 ① ( 设置播放分辨率 | 禁用 音频 / 视频 / 字幕 选项 ) 博客 , 播放进行 ffplay 播放设置 ;
二、使用 FFmpeg 提取 RGB 像素格式数据
1、提取 RGB 像素格式
执行
ffmpeg -i input.mp4 -pix_fmt rgb24 output_rgb24.rgb
命令 , 可以从 输入文件 input.mp4 中 提取出 rgb24 格式的 像素文件 , 提取出来的文件有 1.63GB , 这是未经压缩的视频画面文件 ;
上述命令的核心是 -pix_fmt rgb24
设置 提取后的输出文件 的 数据格式为 rgb24 像素格式 ;
2、提取 RGB 像素格式 - 设定提取长度和画面大小
提取 RGB 像素格式 文件 ,
也可以通过 -t
参数 , 设置提数据的时间长度 , 通过 -s
参数 , 设置 数据的 视频画面 大小 ,
执行
ffmpeg -i input.mp4 -t 3 -s 320x240 -pix_fmt rgb24 output_rgb24.rgb
可以看到 , 提取的 3 秒钟 的 rgb24 格式 320x240 格式 的视频数据 有 20MB 左右 ;
3、使用 ffplay 播放 RGB 视频
播放一个 RGB 像素格式的视频 , 必须知道该视频的
- 尺寸 : 通过
-video_size
参数设置 ; - 帧率 : 通过
-framerate
参数设置 ; - 具体像素格式 : 通过
-pixel_format
参数设置 ;
执行
ffplay -pixel_format rgb24 -video_size 320x240 -framerate 5 -i output_rgb24.rgb
命令 , 可以播放 上述导出的 320x240 大小的 rgb24 格式的 视频文件 ;
参考 【FFmpeg】ffplay 命令行参数 ① ( 设置播放分辨率 | 禁用 音频 / 视频 / 字幕 选项 ) 博客 , 播放进行 ffplay 播放设置 ;
三、RGB 与 YUV 之间的格式转换
1、设置分辨率与像素格式
将 RGB 格式的视频 转为 YUV 格式的视频 时 , 可以分别为 输入视频 和 输出视频 都设置
- 画面分辨率
- 具体的像素格式
输出视频 的 分辨率 和 像素格式 可以 不进行设置 , 默认与 输入视频 的 参数相同 ;
输入视频 必须设置 分辨率 和 像素格式 , 否则无法进行 像素格式的转换 ;
2、设置分辨率与像素格式 - 同时设置输入 / 输出文件的参数
执行
ffmpeg -pix_fmt rgb24 -s 320x240 -i output_rgb24.rgb -pix_fmt yuv420p -s 640x480 output_yuv420p.yuv
命令 , 将 320x240 画面大小的 rgb24 格式的视频文件 , 转为 640x480 画面大小的 yuv 格式的视频文件 ,
-pix_fmt rgb24 -s 320x240
是 输入文件 的 像素格式 和 画面大小 ,
-pix_fmt yuv420p -s 640x480
是 输出文件 的 像素格式 和 画面大小 ;
执行
ffplay -pixel_format yuv420p -video_size 640x480 -framerate 5 -i output_yuv420p.yuv
命令 , 可以播放 上述导出的 640x480 大小的 yuv420p 格式的 视频文件 ;
3、设置分辨率与像素格式 - 只设置输入文件的参数
执行
ffmpeg -pix_fmt rgb24 -s 320x240 -i output_rgb24.rgb -pix_fmt yuv420p output_yuv420p.yuv
命令 , 将 320x240 画面大小的 rgb24 格式的视频文件 , 转为 yuv 格式的视频文件 , 没有设置 输出文件的 视频画面大小 ;
此时 输出文件 默认情况 下 , 使用 输入文件 的 画面大小 320x240 像素 ;
执行完 , 可查看转换后的文件 ;
执行
ffplay -pixel_format yuv420p -video_size 320x240 -framerate 5 -i output_yuv420p.yuv
命令 , 可以播放 上述 yuv420p 格式的 视频文件 , 使用 320x240 像素大小播放正确 , 说明输出文件就是使用了 输入文件 的 参数 ;