一、使用 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 像素大小播放正确 , 说明输出文件就是使用了 输入文件 的 参数 ;

在这里插入图片描述

Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐