视频的宽高应该怎么看?

我们使用MediaExtractor提取视频文件基本信息的时候,发现有display-width display-height与width height
例如我们使用MediaExtractor 提取 视频各轨道基本信息的时候:

        MediaExtractor mediaExtractor = new MediaExtractor();
        mediaExtractor.setDataSource(inputPath);
        for (int index = 0; index < mediaExtractor.getTrackCount(); index++) {
            MediaFormat format = mediaExtractor.getTrackFormat(index);
            LogUtils.w("format = " + format);
        }

打印出来的视频轨道 格式信息:
{track-id=1, level=512, mime=video/avc, profile=8, language=und, display-width=720, csd-1=java.nio.HeapByteBuffer[pos=0 lim=10 cap=10], durationUs=47100000, display-height=1280, width=720, max-input-size=103124, frame-rate=30, height=1280, csd-0=java.nio.HeapByteBuffer[pos=0 lim=30 cap=30]}

display-width=720    
display-height=1280

width=720
height=1280

这似乎是没有争议的,display-width 与width一样,display-height与height一样;
但实际上这两者是不一样的;

下面看一个视频打印出来的轨道格式信息:
{track-id=1, level=128, mime=video/avc, profile=8, language=und, display-width=225, csd-1=java.nio.HeapByteBuffer[pos=0 lim=9 cap=9], durationUs=322333333, display-height=400, width=700, max-input-size=21340, frame-rate=15, height=400, csd-0=java.nio.HeapByteBuffer[pos=0 lim=34 cap=34]}

display-width=225
display-height=400

width=700
height=400

这两者不仅大小不一样,而且比例还不一样,那这是怎么回事了?
可以用ffmpeg 取探测一下:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test4.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf56.40.101
    comment         : 91flv.com,做你想要的视频网站!
  Duration: 00:05:22.33, start: 0.000000, bitrate: 362 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 700x400 [SAR 9:28 DAR 9:16], 296 kb/s, 15 fps, 15 tbr, 15360 tbn, 30 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 62 kb/s (default)
    Metadata:
      handler_name    : SoundHandler

视频流的信息打印出来了:
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 700x400 [SAR 9:28 DAR 9:16], 296 kb/s, 15 fps, 15 tbr, 15360 tbn, 30 tbc (default)

700x400 这个就是视频的宽高;
后面的SAR 和DAR 是什么意思?

  • SAR —— Sample Aspect Ratio 采样横纵比。表示横向的像素点数和纵向的像素点数的比值。
  • DAR —— Display Aspect Ratio 显示横纵比。最终显示的图像在长度单位上的横纵比。
  • PAR —— Pixel Aspect Ratio 像素横纵比。表示每个像素的宽度与长度的比值。可以认为每个像素不是正方形的。

标准播放流程是先识别视频的DAR,如果没有DAR,就按照SAR播放;

对于MediaExtractor 解析出来的视频轨道的格式信息:
display-width / display-height 对应的就是DAR; MediaFormat 中没有SAR的信息;

如果我们播放视频,优先按照display-width display-height来确定视频大小;

你可能感兴趣的:(视频的宽高应该怎么看?)