#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)
follow-up: 2 comment:1 by , 5 years ago
Resolution: | → invalid |
---|---|
Status: | new → closed |
comment:2 by , 5 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.
follow-up: 4 comment:3 by , 5 years ago
Is it possible for -pix_fmt nv12
and -pix_fmt yuv420p
to have bit-identical output in your case?..
comment:4 by , 5 years ago
Replying to gdgsdg123:
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”.
comment:5 by , 5 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).
comment:6 by , 5 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.
comment:7 by , 5 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”.
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.