Opened 3 years ago

Closed 3 years ago

Last modified 3 years ago

#8371 closed defect (invalid)

ffmpeg’s output section and ffprobe’s input section: Display the same pixel format

Reported by: Kdmeizk Owned by:
Priority: normal Component: undetermined
Version: git-master Keywords:
Cc: Blocked By:
Blocking: Reproduced by developer: no
Analyzed by developer: no

Description

ffmpeg-20191101-53c21c2-win64-static\bin\ffmpeg.exe -i 00006.m2ts -to 00:00:05 -c:v libx264 -pix_fmt nv12 -an output.mkv
ffmpeg version git-2019-11-01-53c21c2 Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 9.2.1 (GCC) 20191010
  configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf
  libavutil      56. 35.101 / 56. 35.101
  libavcodec     58. 60.100 / 58. 60.100
  libavformat    58. 33.100 / 58. 33.100
  libavdevice    58.  9.100 / 58.  9.100
  libavfilter     7. 66.100 /  7. 66.100
  libswscale      5.  6.100 /  5.  6.100
  libswresample   3.  6.100 /  3.  6.100
  libpostproc    55.  6.100 / 55.  6.100
Input #0, mpegts, from '00006.m2ts':
  Duration: 00:00:44.05, start: 1.992667, bitrate: 36799 kb/s
  Program 1 
    Stream #0:0[0x1011]: Video: h264 (High) (HDMV / 0x564D4448), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 90k tbn, 47.95 tbc
    Stream #0:1[0x1100]: Audio: dts (DTS-HD MA) ([134][0][0][0] / 0x0086), 48000 Hz, 5.1(side), s32p (24 bit)
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
Press [q] to stop, [?] for help
Output #0, matroska, to 'output.mkv':
  Metadata:
    encoder         : Lavf58.33.100
    Stream #0:0: Video: h264 (libx264) (H264 / 0x34363248), nv12, 1920x1080 [SAR 1:1 DAR 16:9], q=-1--1, 23.98 fps, 1k tbn, 23.98 tbc
    Metadata:
      encoder         : Lavc58.60.100 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
video:1408kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.115162%

ffmpeg-20191101-53c21c2-win64-static\bin\ffprobe.exe output.mkv
ffprobe version git-2019-11-01-53c21c2 Copyright (c) 2007-2019 the FFmpeg developers
  built with gcc 9.2.1 (GCC) 20191010
  configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf
  libavutil      56. 35.101 / 56. 35.101
  libavcodec     58. 60.100 / 58. 60.100
  libavformat    58. 33.100 / 58. 33.100
  libavdevice    58.  9.100 / 58.  9.100
  libavfilter     7. 66.100 /  7. 66.100
  libswscale      5.  6.100 /  5.  6.100
  libswresample   3.  6.100 /  3.  6.100
  libpostproc    55.  6.100 / 55.  6.100
Input #0, matroska,webm, from 'output.mkv':
  Metadata:
    ENCODER         : Lavf58.33.100
  Duration: 00:00:05.01, start: 0.000000, bitrate: 2306 kb/s
    Stream #0:0: Video: h264 (High), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)
    Metadata:
      ENCODER         : Lavc58.60.100 libx264
      DURATION        : 00:00:05.005000000

User may think the pixel format set to “-pix_fmt” displayed in ffmpeg’s output section is also displayed in ffprobe’s input section.
I suggest to display the same pixel format in ffmpeg’s output section and ffprobe’s input section.

Change History (7)

comment:1 by Nicolas George, 3 years ago

Resolution: invalid
Status: newclosed

ffmpeg and ffprobe will not lie to you. They tell you what they are doing. You are misunderstanding the whole concept of pixel formats. Please stop opening issues until you understand it better.

in reply to:  1 comment:2 by Kdmeizk, 3 years ago

Replying to Cigaes:

ffmpeg and ffprobe will not lie to you. They tell you what they are doing. You are misunderstanding the whole concept of pixel formats. Please stop opening issues until you understand it better.

I can try to better explain what you misunderstood, because I did not write explicitly or implicitly something like “ffmpeg and ffprobe lie”.
For the pixel formats, ffmpeg’s output section displays the value set to “-pix_fmt” which is the pixel format “nv12”. In ffprobe, I believe the function “avcodec_string” is called and contains:

            snprintf(buf + strlen(buf), buf_size - strlen(buf),
                 "%s", enc->pix_fmt == AV_PIX_FMT_NONE ? "none" :
                     av_get_pix_fmt_name(enc->pix_fmt));

So the pixel format “yuv420p” is displayed.

comment:3 by gdgsdg123, 3 years ago

Similar Case

Is it possible for -pix_fmt nv12 and -pix_fmt yuv420p to have bit-identical output in your case?..

in reply to:  3 comment:4 by Kdmeizk, 3 years ago

Replying to gdgsdg123:

Similar Case

Is it possible for -pix_fmt nv12 and -pix_fmt yuv420p to have bit-identical output in your case?..

Yes, but there is no problem. If I am right, here is why:

x264-r2969-d4099dd.exe --fullhelp
[…]
      --input-csp <string>    Specify input colorspace format for raw input
                              - valid csps for `raw' demuxer:
                                i400, i420, yv12, nv12, nv21, i422, yv16, nv16, 
                                yuyv, uyvy, i444, yv24, bgr, bgra, rgb
                              - valid csps for `lavf' demuxer:
                                yuv420p, yuyv422, rgb24, bgr24, yuv422p, 
                                yuv444p, yuv410p, yuv411p, gray, monow, monob, 
                                pal8, yuvj420p, yuvj422p, yuvj444p, uyvy422, 
                                uyyvyy411, bgr8, bgr4, bgr4_byte, rgb8, rgb4, 
                                rgb4_byte, nv12, nv21, argb, rgba, abgr, bgra, 
                                gray16be, gray16le, yuv440p, yuvj440p, 
                                yuva420p, rgb48be, rgb48le, rgb565be, rgb565le, 
                                rgb555be, rgb555le, bgr565be, bgr565le, 
                                bgr555be, bgr555le, vaapi_moco, vaapi_idct, 
                                vaapi_vld, yuv420p16le, yuv420p16be, 
                                yuv422p16le, yuv422p16be, yuv444p16le, 
                                yuv444p16be, dxva2_vld, rgb444le, rgb444be, 
                                bgr444le, bgr444be, ya8, bgr48be, bgr48le, 
                                yuv420p9be, yuv420p9le, yuv420p10be, 
                                yuv420p10le, yuv422p10be, yuv422p10le, 
                                yuv444p9be, yuv444p9le, yuv444p10be, 
                                yuv444p10le, yuv422p9be, yuv422p9le, gbrp, 
                                gbrp9be, gbrp9le, gbrp10be, gbrp10le, gbrp16be, 
                                gbrp16le, yuva422p, yuva444p, yuva420p9be, 
                                yuva420p9le, yuva422p9be, yuva422p9le, 
                                yuva444p9be, yuva444p9le, yuva420p10be, 
                                yuva420p10le, yuva422p10be, yuva422p10le, 
                                yuva444p10be, yuva444p10le, yuva420p16be, 
                                yuva420p16le, yuva422p16be, yuva422p16le, 
                                yuva444p16be, yuva444p16le, vdpau, xyz12le, 
                                xyz12be, nv16, nv20le, nv20be, rgba64be, 
                                rgba64le, bgra64be, bgra64le, yvyu422, ya16be, 
                                ya16le, gbrap, gbrap16be, gbrap16le, qsv, mmal, 
                                d3d11va_vld, cuda, 0rgb, rgb0, 0bgr, bgr0, 
                                yuv420p12be, yuv420p12le, yuv420p14be, 
                                yuv420p14le, yuv422p12be, yuv422p12le, 
                                yuv422p14be, yuv422p14le, yuv444p12be, 
                                yuv444p12le, yuv444p14be, yuv444p14le, 
                                gbrp12be, gbrp12le, gbrp14be, gbrp14le, 
                                yuvj411p, bayer_bggr8, bayer_rggb8, 
                                bayer_gbrg8, bayer_grbg8, bayer_bggr16le, 
                                bayer_bggr16be, bayer_rggb16le, bayer_rggb16be, 
                                bayer_gbrg16le, bayer_gbrg16be, bayer_grbg16le, 
                                bayer_grbg16be, xvmc, yuv440p10le, yuv440p10be, 
                                yuv440p12le, yuv440p12be, ayuv64le, ayuv64be, 
                                videotoolbox_vld, p010le, p010be, gbrap12be, 
                                gbrap12le, gbrap10be, gbrap10le, mediacodec, 
                                gray12be, gray12le, gray10be, gray10le, p016le, 
                                p016be, d3d11, gray9be, gray9le, gbrpf32be, 
                                gbrpf32le, gbrapf32be, gbrapf32le, drm_prime, 
                                opencl, gray14be, gray14le, grayf32be, 
                                grayf32le, yuva422p12be, yuva422p12le, 
                                yuva444p12be, yuva444p12le
      --output-csp <string>   Specify output colorspace ["i420"]
                                  - i400, i420, i422, i444, rgb

ffmpeg uses the library, so to simplify set “-pix_fmt” to “nv12” means set “--input-csp” to “nv12”. Then “--output-csp” does not have the choice “nv12”, so “i420” is set because the main difference is the “planar organization” where “nv12” = “semi-planar” and “i420” = “planar”–there is no loss between “i420” and “nv12”.
In the case of “yuv420p”, “-pix_fmt yuv420p” means “--input-csp yuv420p” and “--output-csp i420”. So the output files are identical.

For your ticket:

  • “gbrp” is “planar” and “bgr24”/“rgb24” is “packed”;
  • the main difference between “bgr24” and “rgb24” is the order of RGB;
  • there is no loss between “gbrp” and “bgr24” and “rgb24”.
Last edited 3 years ago by Kdmeizk (previous) (diff)

comment:5 by Kdmeizk, 3 years ago

I believe having understood just now that a pixel format uses a colorspace (“yuv420p” uses “i420”), so “valid csps for `raw' demuxer” should correspond to colorspaces and “valid csps for `lavf' demuxer” to pixel formats (so “valid csps for `lavf' demuxer” may be confusing).

Last edited 3 years ago by Kdmeizk (previous) (diff)

comment:6 by gdgsdg123, 3 years ago

Below a certain level of detail, 0 or 1 no longer makes a difference...

Neither 0 nor 1, both 0 and 1. Bit of Transcendence.

in reply to:  description comment:7 by Kdmeizk, 3 years ago

Replying to Kdmeizk:

User may think the pixel format set to “-pix_fmt” displayed in ffmpeg’s output section is also displayed in ffprobe’s input section.
I suggest to display the same pixel format in ffmpeg’s output section and ffprobe’s input section.

I am sorry, my suggestion is not sufficiently useful mainly because display the same pixel format can move the possible questioning “the same pixel format is not displayed in ffmpeg’s output section and ffprobe’s input section” to “the pixel format set to “-pix_fmt” is not displayed in ffmpeg’s output section and ffprobe’s input section”.

Note: See TracTickets for help on using tickets.