前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何将y4m文件转换成yuv文件

如何将y4m文件转换成yuv文件

作者头像
liuzhen007
发布2022-11-08 13:07:55
1.9K0
发布2022-11-08 13:07:55
举报
文章被收录于专栏:流媒体音视频

目录

  • 前言
  • 正文

前言

有没有遇到过下载的视频原始数据文件是y4m格式的情况,没有办法播放和查看,是不是很苦恼,本文教你处理方法。

正文

一、y4m是什么文件

在理解y4m格式之前,我们首先需要清楚y4m格式的文件中存储的到底是什么信息。

这里有一个示例文件,有需要的话可以直接点击下载:

http://samples.mplayerhq.hu/yuv4mpeg2/example.y4m.bz2

其实,YUV4MPEG2是一种简单的文件格式,用于保存YCbCr颜色空间未压缩的视频帧,其格式为YCbCr 4:2:0、YCbCr 4:2:2或YCbCr 4:4:4数据。名称中的“YUV”部分源于这样一个事实:颜色空间YCbCr(用于数字媒体中的颜色编码)经常与颜色空间YUV(用于模拟PAL应用程序,包括模拟电视和视频磁带)错误地混淆。由于最初的MPEG-2规范支持多种颜色空间(BT.601、BT.709等),如果没有这种格式的扩展,就无法知道用于从RGB转换为YCbCr的颜色空间。

二、文件参数

文件头:文件头是以明文形式存储的,前10个字节为固定的"YUV4MPEG2 "第十个字节为空格(ASCII 0x20)。紧接着是各个参数,以空格分割(ASCII 0x20)。然后文件头尾部是一个换行(ASCII 0x0A)。

文件头的参数如下:

  • 帧宽:'W'后跟明文整数,如'W720'表示帧宽为720
  • 帧高:'H'后跟明文整数,如'H480'表示帧高为480
  • 帧率:'F'后跟以':'分隔的两个明文整数

'F30:1' = 30fps

'F25:1' = 25 FPS (PAL/SECAM standard)

'F24:1' = 24 FPS (Film)

'F30000:1001' = 29.97 FPS (NTSC standard)

'F24000:1001' = 23.976 FPS (Film transferred to NTSC)

  • 交错方式:'I'后跟一个单字符

'Ip' = Progressive

'It' = Top field first

'Ib' = Bottom field first

'Im' = Mixed modes (detailed in FRAME headers)

  • 参数'A':表示像素宽高比(注意不是图像宽高比)

'A0:0' = unknown

'A1:1' = square pixels

'A4:3' = NTSC-SVCD (480x480 stretched to 4:3 screen)

'A4:5' = NTSC-DVD narrow-screen (720x480 compressed to a 4:3 display)

'A32:27' = NTSC-DVD wide-screen (720x480 stretched to a 16:9 display)

  • 参数'C':颜色空间

'C420jpeg' = 4:2:0 with biaxially-displaced chroma planes

'C420paldv' = 4:2:0 with vertically-displaced chroma planes

'C420' = 4:2:0 with coincident chroma planes

'C422' = 4:2:2

'C444' = 4:4:4

  • 参数'X':被忽略,不处理

每个帧以5个字节的“frame”开头,后跟0个或多个参数,每个参数前面都有0x20,最后是0x0A。然后是每个平面的原始字节。

每一个视频帧的原始数据大小计算公式如下:

帧大小 = width * height * 3 / 2 (4:2:0)

帧大小 = width * height * 2 (4:2:2)

帧大小 = width * height * 3 (4:4:4)

三、文件结构

文件结构图如下:

四、示例文件

我们可以使用UltraEdit工具打开对应的y4m文件,同时查看文件内容和16进制编码信息,文件开头信息如下图所示:

五、如何将y4m转成yuv

现在我们回归主题:如何将y4m文件转换成yuv文件?介绍了那么多,为的就是引出第一种方法。

5.1 方法一

既然我们已经知道y4m文件结构,那么我们完全可以自己写一个工具,按照上文的规范将视频原始信息数据从y4m文件中提取出来,组成一个全新的yuv文件。

但是,这个方法实现起来比较有难度。以后等我有时间了,我会自己搞一个,到时候回来更新本文。

5.2 方法二

考虑到实用性,我现在介绍一个拿来即用的方法,那就是利用ffmpeg来搞。

比如,我们需要yuv420p的yuv文件,具体的ffmpeg命令如下:

ffmpeg -i .\yuv\touchdown_pass_1080p.mp4 -f rawvideo -pix_fmt yuv420p .\yuv\touchdown_pass_1080p.out.yuv

说真的,这个命令搞了好久才搞出来,网上实在找不到好用的命令,走了好多冤枉路。

作者简介:😄大家好,我是 Data-Mining(liuzhen007),是一位典型的音视频技术爱好者,前后就职于传统广电巨头和音视频互联网公司,具有丰富的音视频直播和点播相关经验,对 WebRTC、FFmpeg 和 Electron 有非常深入的了解,😄公众号:玩转音视频。同时也是 CSDN 博客专家、华为云享专家(共创编辑、十佳博主)、51CTO社区编辑、InfoQ 签约作者,欢迎关注我分享更多干货!😄

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 玩转音视频 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 正文
    • 一、y4m是什么文件
      • 二、文件参数
        • 三、文件结构
          • 四、示例文件
            • 五、如何将y4m转成yuv
              • 5.1 方法一
              • 5.2 方法二
          相关产品与服务
          云直播
          云直播(Cloud Streaming Services,CSS)为您提供极速、稳定、专业的云端直播处理服务,根据业务的不同直播场景需求,云直播提供了标准直播、快直播、云导播台三种服务,分别针对大规模实时观看、超低延时直播、便捷云端导播的场景,配合腾讯云视立方·直播 SDK,为您提供一站式的音视频直播解决方案。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档