首页 > 解决方案 > ffprobe中'display_aspect_ratio'和'sample_aspect_ratio'之间的区别

问题描述

我有一个问题,当通过 VLC 或 quicktime 播放器播放视频时,视频以正确的 16:9 纵横比播放,但是当我尝试使用 ffmpeg 提取单个帧时,帧以 4:3 纵横比出现。

有问题的视频上的ffprobe输出如下

$ ffprobe -v error -select_streams v:0 -show_entries stream -of default=noprint_wrappers=1 -print_format json movie.mp4

{
"programs": [

],
"streams": [
    {
        "index": 0,
        "codec_name": "h264",
        "codec_long_name": "H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10",
        "profile": "Main",
        "codec_type": "video",
        "codec_time_base": "126669/6400000",
        "codec_tag_string": "avc1",
        "codec_tag": "0x31637661",
        "width": 2592,
        "height": 1944,
        "coded_width": 2592,
        "coded_height": 1944,
        "has_b_frames": 0,
        "sample_aspect_ratio": "4:3",
        "display_aspect_ratio": "16:9",
        "pix_fmt": "yuvj420p",
        "level": 50,
        "color_range": "pc",
        "color_space": "bt709",
        "color_transfer": "bt709",
        "color_primaries": "bt709",
        "chroma_location": "left",
        "refs": 1,
        "is_avc": "true",
        "nal_length_size": "4",
        "r_frame_rate": "25/1",
        "avg_frame_rate": "3200000/126669",
        "time_base": "1/12800",
        "start_pts": 0,
        "start_time": "0.000000",
        "duration_ts": 126682,
        "duration": "9.897031",
        "bit_rate": "4638928",
        "bits_per_raw_sample": "8",
        "nb_frames": "250",
        "disposition": {
            "default": 1,
            "dub": 0,
            "original": 0,
            "comment": 0,
            "lyrics": 0,
            "karaoke": 0,
            "forced": 0,
            "hearing_impaired": 0,
            "visual_impaired": 0,
            "clean_effects": 0,
            "attached_pic": 0,
            "timed_thumbnails": 0
        },
        "tags": {
            "language": "und",
            "handler_name": "VideoHandler"
        }
    }
]
}

所以它说

    "width": 2592,
    "height": 1944,
    "coded_width": 2592,
    "coded_height": 1944,
    "has_b_frames": 0,
    "sample_aspect_ratio": "4:3",
    "display_aspect_ratio": "16:9",

这对我来说似乎很奇怪。宽度/高度为 4:3,样本纵横比为 4:3,显示为 16:9?

现在,当我通过 VLC/Quicktime 播放此视频时,视频看起来不错(截图如下)

在此处输入图像描述

但是现在,如果我运行 ffmpeg 命令从该视频中提取单个帧,它们会以 4:3 出现

ffmpeg -y -hide_banner -nostats -loglevel error -i movie.mp4 -vf select='eq(n\,10)+eq(n\,20)+eq(n\,30)+eq(n\,40)',scale=-1:640 -vsync 0 /tmp/ffmpeg_image_%04d.jpg

在此处输入图像描述

所以我想我的问题如下:

  1. 显示纵横比、样本纵横比和宽/高比之间的关系是什么?
  2. 如何让 ffmpeg 以正确的纵横比输出?

标签: encodingffmpegh.264aspect-ratioffprobe

解决方案


推荐阅读