ffmpeg中的SAR、PAR、DAR

223 阅读1分钟

在读ffplay源代码的时候看到了这么一段来设置SDL窗口的宽高,有一点疑惑不解,查阅后简单记录下。

    is->show_mode = show_mode;
    if (st_index[AVMEDIA_TYPE_VIDEO] >= 0) {
        AVStream *st = ic->streams[st_index[AVMEDIA_TYPE_VIDEO]];
        AVCodecParameters *codecpar = st->codecpar;
        AVRational sar = av_guess_sample_aspect_ratio(ic, st, NULL);
        if (codecpar->width)
            set_default_window_size(codecpar->width, codecpar->height, sar);
    }

DAR、SAR、PAR参考资料:segmentfault.com/a/119000004…
SAR这里可以理解成“像素的形状”,是采样像素点的宽高比,比如SAR = 2:1,说明采样的像素点是一个水平方向2:1的长方体。
PAR即文件中保存的水平方向/垂直方向的采样点数量比,也就是AVCodecParameters中的width,height的比例。
DAR(实际画面的显示比例) = SAR(像素形状比)* PAR(像素数量比)
多数时候sample_aspect_ratio的num与den均为1,表示宽高两个方向的采样点比例为1:1,此时像素宽高比等于显示宽高比。