Answers.Body: <p>Hellow. You need 4:4:4 pixel format and High444 profile in libx264 or h264_nvenc or other h264 encoder. And I guess that <code>qp 0</code> is better then <code>crf 0</code>. For example:</p>
  <pre><code>-c:v h264_nvenc -qp 0 -pix_fmt yuv444p -profile:v high444p
  </code></pre>
  <p>For screenrecording <a href="https://trac.ffmpeg.org/wiki/Capture/Desktop" rel="nofollow noreferrer">gdigrab</a> is the best way.
  P.S.: I use Nvidia HWacel of my GeForce1660 Ti Max-Q. It's very fast!</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-04-21T23:13:31.853Z
Answers.LastActivityDate: 2021-04-21T23:13:31.853Z
Answers.UserDisplayName: Andrew
Answers.Body: <p>It's an artifact of the player, not the encoder.</p>
  
  <p>I used the command below to generate a RGB format capture in HuffYUV</p>
  
  <pre><code>ffmpeg -f dshow -video_size 1920x1080 -framerate 30 -i video="screen-capture-recorder" -c:v huffyuv -t 5 cap.mkv
  </code></pre>
  
  <p>Then transcoded the file to</p>
  
  <p>x264 lossless RGB</p>
  
  <pre><code>ffmpeg -i cap.mkv -c:v libx264rgb -crf 0 -preset ultrafast h264rgb.mkv
  </code></pre>
  
  <p>HuffYUV YUV 4:2:2</p>
  
  <pre><code>ffmpeg -i cap.mkv -c:v huffyuv -pix_fmt yuv422p huffyuv.mkv
  </code></pre>
  
  <p>x264 lossless YUV 4:2:2</p>
  
  <pre><code>ffmpeg -i cap.mkv -c:v libx264 -crf 0 -preset ultrafast -pix_fmt yuv422p h264yuv.mkv
  </code></pre>
  
  <hr>
  
  <p>Then, using the SSIM metric, compared the HuffYUV and x264 RGB files</p>
  
  <pre><code>ffmpeg -i h264rgb.mkv -i cap.mkv -filter_complex ssim -f null -
  </code></pre>
  
  <p>which resulted in</p>
  
  <pre><code>SSIM R:1.000000 (inf) G:1.000000 (inf) B:1.000000 (inf) All:1.000000 (inf)
  </code></pre>
  
  <p>And the HuffYUV and x264 YUV files</p>
  
  <pre><code>ffmpeg -i h264yuv.mkv -i huffyuv.mkv -filter_complex ssim -f null -
  </code></pre>
  
  <p>Result</p>
  
  <pre><code>SSIM Y:1.000000 (inf) U:1.000000 (inf) V:1.000000 (inf) All:1.000000 (inf)
  </code></pre>
  
  <p>So, x264 does produce lossless output.</p>
  
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2016-05-09T18:51:45.093Z
Answers.LastActivityDate: 2016-05-09T18:51:45.093Z
Answers.UserDisplayName: Gyan
Body: <p>I got curious on ffmpeg screen capture capabilities and started messing around with a simple realtime capture test in h264.</p>
  
  <pre><code>ffmpeg -f dshow -i video="screen-capture-recorder" -video_size 1920x1080 -framerate 30 -c:v libx264 -crf 0 -preset ultrafast capture.mkv
  </code></pre>
  
  <p>Based on what is said on ffmpeg h264 documentation with the <code>-qp 0</code> or <code>-crf 0</code> options libx264 should work in lossless mode.</p>
  
  <blockquote>
    <p><em>You can use -qp 0 or -crf 0 to encode a lossless output. Use of -qp is recommended over -crf for lossless because 8-bit and 10-bit x264 use different -crf values for lossless.</em></p>
  </blockquote>
  
  <p>This is also repeated in the realtime capture section help when talking about an optional re-encoding with a slower preset to try saving some size:</p>
  
  <blockquote>
    <p><em>Note that since the initial recording was lossless, and the re-encode is lossless too, no quality loss is introduced in this process in any way.</em></p>
  </blockquote>
  
  <p>Based on this I trusted the guide and assumed using -qp 0 I would achieve a fully lossless workflow ;)</p>
  
  <p>However I found it introduce some loss in particular situations.</p>
  
  <p>So I made another test with the huffyuv codec with this code:</p>
  
  <pre><code>ffmpeg -f dshow -i video="screen-capture-recorder" -video_size 1920x1080 -framerate 30 -c:v huffyuv capture.mkv
  </code></pre>
  
  <p>the results:</p>
  
  <p><a href="https://i.sstatic.net/CqIw5.png" rel="noreferrer"><img src="https://i.sstatic.net/CqIw5.png" alt="Screen Capture encoded in h264"></a> <a href="https://i.sstatic.net/6Bn3e.png" rel="noreferrer"><img src="https://i.sstatic.net/6Bn3e.png" alt="Screen Capture encoded in huffyuv"></a></p>
  
  <p>Screen 1: <strong>h264 in lossless mode</strong><br>
  Screen 2: <strong>huffyuv</strong></p>
  
  <p>Based on screens <code>huffyuv</code> is perfect, a true lossless codec while <code>h264</code> instead compress something here and I'm unable to understand why if it should be setup in a lossless mode.</p>
  
  <p>(huffyuv is identical to a bitmap screenshot of the desktop, I would achieve the same with h264)</p>
  
  <p>Can someone help me figuring it out?</p>
  
  <hr>
  
  <p>Edit: Adding some ffmpeg dumps as required in comments ;)</p>
  
  <p>h264 run:</p>
  
  <pre><code>ffmpeg -f dshow -i video="screen-capture-recorder" -video_size 1920x1080 -framerate 30 -c:v libx264 -qp 0 -preset ultrafast capture.mkv  
  ffmpeg version N-73411-g5233f25 Copyright (c) 2000-2015 the FFmpeg developers  
    built with gcc 4.9.2 (GCC)  
    configuration: --arch=x86_64 --target-os=mingw32 --cross-prefix=/home/user/san  
  dbox/mingw-w64-x86_64/bin/x86_64-w64-mingw32- --pkg-config=pkg-config --enable-g  
  pl --enable-libsoxr --enable-fontconfig --enable-libass --enable-libutvideo --en  
  able-libbluray --enable-iconv --enable-libtwolame --extra-cflags=-DLIBTWOLAME_ST  
  ATIC --enable-libzvbi --enable-libcaca --enable-libmodplug --extra-libs=-lstdc++  
   --extra-libs=-lpng --enable-libvidstab --enable-libx265 --enable-decklink --ext  
  ra-libs=-loleaut32 --enable-libx264 --enable-libxvid --enable-libmp3lame --enabl  
  e-version3 --enable-zlib --enable-librtmp --enable-libvorbis --enable-libtheora  
  --enable-libspeex --enable-libopenjpeg --enable-gnutls --enable-libgsm --enable-  
  libfreetype --enable-libopus --disable-w32threads --enable-frei0r --enable-filte  
  r=frei0r --enable-libvo-aacenc --enable-bzlib --enable-libxavs --enable-libopenc  
  ore-amrnb --enable-libopencore-amrwb --enable-libvo-amrwbenc --enable-libschroed  
  inger --enable-libvpx --enable-libilbc --enable-libwavpack --enable-libwebp --en  
  able-libgme --enable-dxva2 --enable-libdcadec --enable-avisynth --enable-static  
  --disable-shared --extra-cflags= --prefix=/home/user/sandbox/mingw-w64-x86_64/x8  
  6_64-w64-mingw32 --extra-libs=-lpsapi --enable-nonfree --enable-libfdk-aac --dis  
  able-libfaac --enable-nvenc --enable-runtime-cpudetect  
    libavutil      54. 28.100 / 54. 28.100  
    libavcodec     56. 46.101 / 56. 46.101  
    libavformat    56. 40.100 / 56. 40.100  
    libavdevice    56.  4.100 / 56.  4.100  
    libavfilter     5. 20.100 /  5. 20.100  
    libswscale      3.  1.101 /  3.  1.101  
    libswresample   1.  2.100 /  1.  2.100  
    libpostproc    53.  3.100 / 53.  3.100  
  leaving aero onInput #0, dshow, from 'video=screen-capture-recorder':  
    Duration: N/A, start: 362931.503000, bitrate: N/A  
      Stream #0:0: Video: rawvideo, bgr0, 1920x1080, 30 tbr, 10000k tbn, 30 tbc  
  No pixel format specified, yuv444p for H.264 encoding chosen.  
  Use -pix_fmt yuv420p for compatibility with outdated media players.  
  [libx264 @ 00000000004c7e00] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2  
  AVX FMA3 AVX2 LZCNT BMI2  
  [libx264 @ 00000000004c7e00] profile High 4:4:4 Predictive, level 4.0, 4:4:4 8-b  
  it  
  [libx264 @ 00000000004c7e00] 264 - core 144 r2533 c8a773e - H.264/MPEG-4 AVC cod  
  ec - Copyleft 2003-2015 - http://www.videolan.org/x264.html - options: cabac=0 r  
  ef=1 deblock=0:0:0 analyse=0:0 me=dia subme=0 psy=0 mixed_ref=0 me_range=16 chro  
  ma_me=1 trellis=0 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=0 chroma_qp_offset=0  
  threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 blur  
  ay_compat=0 constrained_intra=0 bframes=0 weightp=0 keyint=250 keyint_min=25 sce  
  necut=0 intra_refresh=0 rc=cqp mbtree=0 qp=0  
  Output #0, matroska, to 'capture.mkv':  
    Metadata:  
      encoder         : Lavf56.40.100  
      Stream #0:0: Video: h264 (libx264) (H264 / 0x34363248), yuv444p, 1920x1080,  
  q=-1--1, 30 fps, 1k tbn, 30 tbc  
      Metadata:  
        encoder         : Lavc56.46.101 libx264  
  Stream mapping:  
    Stream #0:0 -&gt; #0:0 (rawvideo (native) -&gt; h264 (libx264))  
  Press [q] to stop, [?] for help  
  frame=   11 fps=0.0 q=0.0 size=    2421kB time=00:00:00.20 bitrate=99163.6kbits/  
  frame=   22 fps= 22 q=0.0 size=    2538kB time=00:00:00.73 bitrate=28368.6kbits/  
  frame=   33 fps= 22 q=0.0 size=    2647kB time=00:00:01.26 bitrate=17116.4kbits/  
  frame=   46 fps= 23 q=0.0 size=    2770kB time=00:00:01.80 bitrate=12608.4kbits/  
  frame=   58 fps= 23 q=0.0 size=    2842kB time=00:00:02.23 bitrate=10427.1kbits/  
  frame=   71 fps= 23 q=0.0 size=    2908kB time=00:00:02.80 bitrate=8508.6kbits/s  
  frame=   83 fps= 23 q=0.0 size=    2977kB time=00:00:03.26 bitrate=7467.0kbits/s  
  frame=   96 fps= 24 q=0.0 size=    3085kB time=00:00:03.80 bitrate=6649.8kbits/s  
  frame=  108 fps= 24 q=0.0 size=    3195kB time=00:00:04.30 bitrate=6084.5kbits/s  
  frame=  120 fps= 24 q=0.0 size=    3309kB time=00:00:04.80 bitrate=5645.8kbits/s  
  frame=  133 fps= 24 q=0.0 size=    3398kB time=00:00:05.33 bitrate=5219.0kbits/s  
  frame=  147 fps= 24 q=0.0 size=    3492kB time=00:00:05.86 bitrate=4876.1kbits/s  
  frame=  160 fps= 24 q=0.0 size=    3568kB time=00:00:06.36 bitrate=4591.4kbits/s  
  frame=  173 fps= 24 q=0.0 size=    3660kB time=00:00:06.86 bitrate=4366.2kbits/s  
  frame=  186 fps= 25 q=0.0 size=    3720kB time=00:00:07.36 bitrate=4136.5kbits/s  
  frame=  187 fps= 24 q=-1.0 Lsize=    3737kB time=00:00:07.63 bitrate=4010.9kbits  
  /s  
  video:3735kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing  
  overhead: 0.052628%  
  [libx264 @ 00000000004c7e00] frame I:1     Avg QP: 0.00  size:1345491  
  [libx264 @ 00000000004c7e00] frame P:186   Avg QP: 0.00  size: 13327  
  [libx264 @ 00000000004c7e00] mb I  I16..4: 100.0%  0.0%  0.0%  
  [libx264 @ 00000000004c7e00] mb P  I16..4: 16.5%  0.0%  0.0%  P16..4:  0.3%  0.0  
  %  0.0%  0.0%  0.0%    skip:83.3%  
  [libx264 @ 00000000004c7e00] coded y,u,v intra: 6.1% 3.8% 3.9% inter: 0.2% 0.1%  
  0.1%  
  [libx264 @ 00000000004c7e00] i16 v,h,dc,p: 96%  4%  0%  0%  
  [libx264 @ 00000000004c7e00] kb/s:4008.11  
  [dshow @ 00000000004bf760] real-time buffer [screen-capture-recorder] [video inp  
  ut] too full or near too full (545% of size: 3041280 [rtbufsize parameter])! fra  
  me dropped!  
  Exiting normally, received signal 2.  
  Terminate batch job (Y/N)?
  </code></pre>
  
  <p>huffyuv run:</p>
  
  <pre><code>ffmpeg -f dshow -i video="screen-capture-recorder" -video_size 1920x1080 -framerate 30 -c:v huffyuv capture.mkv  
  ffmpeg version N-73411-g5233f25 Copyright (c) 2000-2015 the FFmpeg developers  
    built with gcc 4.9.2 (GCC)  
    configuration: --arch=x86_64 --target-os=mingw32 --cross-prefix=/home/user/san  
  dbox/mingw-w64-x86_64/bin/x86_64-w64-mingw32- --pkg-config=pkg-config --enable-g  
  pl --enable-libsoxr --enable-fontconfig --enable-libass --enable-libutvideo --en  
  able-libbluray --enable-iconv --enable-libtwolame --extra-cflags=-DLIBTWOLAME_ST  
  ATIC --enable-libzvbi --enable-libcaca --enable-libmodplug --extra-libs=-lstdc++  
   --extra-libs=-lpng --enable-libvidstab --enable-libx265 --enable-decklink --ext  
  ra-libs=-loleaut32 --enable-libx264 --enable-libxvid --enable-libmp3lame --enabl  
  e-version3 --enable-zlib --enable-librtmp --enable-libvorbis --enable-libtheora  
  --enable-libspeex --enable-libopenjpeg --enable-gnutls --enable-libgsm --enable-  
  libfreetype --enable-libopus --disable-w32threads --enable-frei0r --enable-filte  
  r=frei0r --enable-libvo-aacenc --enable-bzlib --enable-libxavs --enable-libopenc  
  ore-amrnb --enable-libopencore-amrwb --enable-libvo-amrwbenc --enable-libschroed  
  inger --enable-libvpx --enable-libilbc --enable-libwavpack --enable-libwebp --en  
  able-libgme --enable-dxva2 --enable-libdcadec --enable-avisynth --enable-static  
  --disable-shared --extra-cflags= --prefix=/home/user/sandbox/mingw-w64-x86_64/x8  
  6_64-w64-mingw32 --extra-libs=-lpsapi --enable-nonfree --enable-libfdk-aac --dis  
  able-libfaac --enable-nvenc --enable-runtime-cpudetect  
    libavutil      54. 28.100 / 54. 28.100  
    libavcodec     56. 46.101 / 56. 46.101  
    libavformat    56. 40.100 / 56. 40.100  
    libavdevice    56.  4.100 / 56.  4.100  
    libavfilter     5. 20.100 /  5. 20.100  
    libswscale      3.  1.101 /  3.  1.101  
    libswresample   1.  2.100 /  1.  2.100  
    libpostproc    53.  3.100 / 53.  3.100  
  leaving aero onInput #0, dshow, from 'video=screen-capture-recorder':  
    Duration: N/A, start: 362514.497000, bitrate: N/A  
      Stream #0:0: Video: rawvideo, bgr0, 1920x1080, 30 tbr, 10000k tbn, 30 tbc  
  [huffyuv @ 0000000000380ae0] using huffyuv 2.2.0 or newer interlacing flag  
  [huffyuv @ 0000000000377280] using huffyuv 2.2.0 or newer interlacing flag  
  [huffyuv @ 00000000003b0fc0] using huffyuv 2.2.0 or newer interlacing flag  
  [huffyuv @ 00000000003b1700] using huffyuv 2.2.0 or newer interlacing flag  
  [huffyuv @ 0000000000357a00] using huffyuv 2.2.0 or newer interlacing flag  
  Output #0, matroska, to 'capture.mkv':  
    Metadata:  
      encoder         : Lavf56.40.100  
      Stream #0:0: Video: huffyuv (HFYU / 0x55594648), rgb24, 1920x1080, q=2-31, 2  
  00 kb/s, 30 fps, 1k tbn, 30 tbc  
      Metadata:  
        encoder         : Lavc56.46.101 huffyuv  
  Stream mapping:  
    Stream #0:0 -&gt; #0:0 (rawvideo (native) -&gt; huffyuv (native))  
  Press [q] to stop, [?] for help  
  frame=   12 fps=0.0 q=0.0 size=   23668kB time=00:00:00.50 bitrate=386999.4kbits  
  frame=   22 fps= 22 q=0.0 size=   44696kB time=00:00:00.96 bitrate=379033.1kbits  
  frame=   35 fps= 23 q=0.0 size=   72074kB time=00:00:01.46 bitrate=402750.2kbits  
  frame=   49 fps= 24 q=0.0 size=  101620kB time=00:00:02.00 bitrate=416236.4kbits  
  frame=   63 fps= 25 q=0.0 size=  131190kB time=00:00:02.50 bitrate=429712.0kbits  
  frame=   78 fps= 26 q=0.0 size=  162896kB time=00:00:03.03 bitrate=439829.0kbits  
  frame=   83 fps= 26 q=0.0 Lsize=  175587kB time=00:00:03.23 bitrate=444776.1kbit  
  s/s  
  video:175582kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxin  
  g overhead: 0.002479%  
  [dshow @ 000000000034f420] real-time buffer [screen-capture-recorder] [video inp  
  ut] too full or near too full (545% of size: 3041280 [rtbufsize parameter])! fra  
  me dropped!  
  Exiting normally, received signal 2.  
  Terminate batch job (Y/N)?  
  </code></pre>
  
  <p>note: even if I have accepted the answer for general purposes I tend to use the soluction provided by @paul-b-mahol with the <strong>libx264rgb</strong> encoder.</p>
  
  <hr>
  
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2015-10-21T22:38:24.123Z
Comments.Text: You should show the complete console outputs from each `ffmpeg` command.
Comments.UserDisplayName: llogan
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2015-10-21T22:53:23.727Z
Comments.Text: @LordNeckbeard done!
Comments.UserDisplayName: user3450548
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2015-10-21T22:54:21.107Z
Comments.Text: Thanks. What are you using to play back the H.264 video?
Comments.UserDisplayName: llogan
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2015-10-21T22:55:29.193Z
Comments.Text: @LordNeckbeard just VLC :(
Comments.UserDisplayName: user3450548
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2015-10-21T23:10:22.087Z
Comments.Text: The result is probably due to an auto-inserted scaler performing chroma subsampling conversion from yuv444p to yuv420p for playback. I don't know why that needs to occur so you can watch it (I never found the playback side of things very interesting, so therefore I remain ignorant on in this particular case).
Comments.UserDisplayName: llogan
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2015-10-21T23:13:15.680Z
Comments.Text: So for example if i would bring both files into Adobe Premiere or After Effects for editing the files should do the same? Was a problem of vlc? tl;dr: What I'm interested to understand is if xh264 with -qp0 or -crf 0 is to be considered really lossless and a possible full alternative to huffyuv or ProRes 444
Comments.UserDisplayName: user3450548
Tags: <ffmpeg><video-quality><h.264><video-capture>
Title: Using h264 in loseless mode brings small unexpected results
UserDisplayName: user3450548
ThreadText: # Using h264 in loseless mode brings small unexpected results
  
  (Asked by: username_0 on 2015-10-21)
  
  I got curious on ffmpeg screen capture capabilities and started messing around with a simple realtime capture test in h264.
  
  ```
  ffmpeg -f dshow -i video="screen-capture-recorder" -video_size 1920x1080 -framerate 30 -c:v libx264 -crf 0 -preset ultrafast capture.mkv
  
  ```
  
  Based on what is said on ffmpeg h264 documentation with the `-qp 0` or `-crf 0` options libx264 should work in lossless mode.
  
  > *You can use -qp 0 or -crf 0 to encode a lossless output. Use of -qp is recommended over -crf for lossless because 8-bit and 10-bit x264 use different -crf values for lossless.*
  
  This is also repeated in the realtime capture section help when talking about an optional re-encoding with a slower preset to try saving some size:
  
  > *Note that since the initial recording was lossless, and the re-encode is lossless too, no quality loss is introduced in this process in any way.*
  
  Based on this I trusted the guide and assumed using -qp 0 I would achieve a fully lossless workflow ;)
  
  However I found it introduce some loss in particular situations.
  
  So I made another test with the huffyuv codec with this code:
  
  ```
  ffmpeg -f dshow -i video="screen-capture-recorder" -video_size 1920x1080 -framerate 30 -c:v huffyuv capture.mkv
  
  ```
  
  the results:
  
  [![Screen Capture encoded in h264](https://i.sstatic.net/CqIw5.png)](https://i.sstatic.net/CqIw5.png) [![Screen Capture encoded in huffyuv](https://i.sstatic.net/6Bn3e.png)](https://i.sstatic.net/6Bn3e.png)
  
  Screen 1: **h264 in lossless mode**  
  Screen 2: **huffyuv**
  
  Based on screens `huffyuv` is perfect, a true lossless codec while `h264` instead compress something here and I'm unable to understand why if it should be setup in a lossless mode.
  
  (huffyuv is identical to a bitmap screenshot of the desktop, I would achieve the same with h264)
  
  Can someone help me figuring it out?
  
  ---
  
  Edit: Adding some ffmpeg dumps as required in comments ;)
  
  h264 run:
  
  ```
  ffmpeg -f dshow -i video="screen-capture-recorder" -video_size 1920x1080 -framerate 30 -c:v libx264 -qp 0 -preset ultrafast capture.mkv  
  ffmpeg version N-73411-g5233f25 Copyright (c) 2000-2015 the FFmpeg developers  
    built with gcc 4.9.2 (GCC)  
    configuration: --arch=x86_64 --target-os=mingw32 --cross-prefix=/home/user/san  
  dbox/mingw-w64-x86_64/bin/x86_64-w64-mingw32- --pkg-config=pkg-config --enable-g  
  pl --enable-libsoxr --enable-fontconfig --enable-libass --enable-libutvideo --en  
  able-libbluray --enable-iconv --enable-libtwolame --extra-cflags=-DLIBTWOLAME_ST  
  ATIC --enable-libzvbi --enable-libcaca --enable-libmodplug --extra-libs=-lstdc++  
   --extra-libs=-lpng --enable-libvidstab --enable-libx265 --enable-decklink --ext  
  ra-libs=-loleaut32 --enable-libx264 --enable-libxvid --enable-libmp3lame --enabl  
  e-version3 --enable-zlib --enable-librtmp --enable-libvorbis --enable-libtheora  
  --enable-libspeex --enable-libopenjpeg --enable-gnutls --enable-libgsm --enable-  
  libfreetype --enable-libopus --disable-w32threads --enable-frei0r --enable-filte  
  r=frei0r --enable-libvo-aacenc --enable-bzlib --enable-libxavs --enable-libopenc  
  ore-amrnb --enable-libopencore-amrwb --enable-libvo-amrwbenc --enable-libschroed  
  inger --enable-libvpx --enable-libilbc --enable-libwavpack --enable-libwebp --en  
  able-libgme --enable-dxva2 --enable-libdcadec --enable-avisynth --enable-static  
  --disable-shared --extra-cflags= --prefix=/home/user/sandbox/mingw-w64-x86_64/x8  
  6_64-w64-mingw32 --extra-libs=-lpsapi --enable-nonfree --enable-libfdk-aac --dis  
  able-libfaac --enable-nvenc --enable-runtime-cpudetect  
    libavutil      54. 28.100 / 54. 28.100  
    libavcodec     56. 46.101 / 56. 46.101  
    libavformat    56. 40.100 / 56. 40.100  
    libavdevice    56.  4.100 / 56.  4.100  
    libavfilter     5. 20.100 /  5. 20.100  
    libswscale      3.  1.101 /  3.  1.101  
    libswresample   1.  2.100 /  1.  2.100  
    libpostproc    53.  3.100 / 53.  3.100  
  leaving aero onInput #0, dshow, from 'video=screen-capture-recorder':  
    Duration: N/A, start: 362931.503000, bitrate: N/A  
      Stream #0:0: Video: rawvideo, bgr0, 1920x1080, 30 tbr, 10000k tbn, 30 tbc  
  No pixel format specified, yuv444p for H.264 encoding chosen.  
  Use -pix_fmt yuv420p for compatibility with outdated media players.  
  [libx264 @ 00000000004c7e00] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2  
  AVX FMA3 AVX2 LZCNT BMI2  
  [libx264 @ 00000000004c7e00] profile High 4:4:4 Predictive, level 4.0, 4:4:4 8-b  
  it  
  [libx264 @ 00000000004c7e00] 264 - core 144 r2533 c8a773e - H.264/MPEG-4 AVC cod  
  ec - Copyleft 2003-2015 - http://www.videolan.org/x264.html - options: cabac=0 r  
  ef=1 deblock=0:0:0 analyse=0:0 me=dia subme=0 psy=0 mixed_ref=0 me_range=16 chro  
  ma_me=1 trellis=0 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=0 chroma_qp_offset=0  
  threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 blur  
  ay_compat=0 constrained_intra=0 bframes=0 weightp=0 keyint=250 keyint_min=25 sce  
  necut=0 intra_refresh=0 rc=cqp mbtree=0 qp=0  
  Output #0, matroska, to 'capture.mkv':  
    Metadata:  
      encoder         : Lavf56.40.100  
      Stream #0:0: Video: h264 (libx264) (H264 / 0x34363248), yuv444p, 1920x1080,  
  q=-1--1, 30 fps, 1k tbn, 30 tbc  
      Metadata:  
        encoder         : Lavc56.46.101 libx264  
  Stream mapping:  
    Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (libx264))  
  Press [q] to stop, [?] for help  
  frame=   11 fps=0.0 q=0.0 size=    2421kB time=00:00:00.20 bitrate=99163.6kbits/  
  frame=   22 fps= 22 q=0.0 size=    2538kB time=00:00:00.73 bitrate=28368.6kbits/  
  frame=   33 fps= 22 q=0.0 size=    2647kB time=00:00:01.26 bitrate=17116.4kbits/  
  frame=   46 fps= 23 q=0.0 size=    2770kB time=00:00:01.80 bitrate=12608.4kbits/  
  frame=   58 fps= 23 q=0.0 size=    2842kB time=00:00:02.23 bitrate=10427.1kbits/  
  frame=   71 fps= 23 q=0.0 size=    2908kB time=00:00:02.80 bitrate=8508.6kbits/s  
  frame=   83 fps= 23 q=0.0 size=    2977kB time=00:00:03.26 bitrate=7467.0kbits/s  
  frame=   96 fps= 24 q=0.0 size=    3085kB time=00:00:03.80 bitrate=6649.8kbits/s  
  frame=  108 fps= 24 q=0.0 size=    3195kB time=00:00:04.30 bitrate=6084.5kbits/s  
  frame=  120 fps= 24 q=0.0 size=    3309kB time=00:00:04.80 bitrate=5645.8kbits/s  
  frame=  133 fps= 24 q=0.0 size=    3398kB time=00:00:05.33 bitrate=5219.0kbits/s  
  frame=  147 fps= 24 q=0.0 size=    3492kB time=00:00:05.86 bitrate=4876.1kbits/s  
  frame=  160 fps= 24 q=0.0 size=    3568kB time=00:00:06.36 bitrate=4591.4kbits/s  
  frame=  173 fps= 24 q=0.0 size=    3660kB time=00:00:06.86 bitrate=4366.2kbits/s  
  frame=  186 fps= 25 q=0.0 size=    3720kB time=00:00:07.36 bitrate=4136.5kbits/s  
  frame=  187 fps= 24 q=-1.0 Lsize=    3737kB time=00:00:07.63 bitrate=4010.9kbits  
  /s  
  video:3735kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing  
  overhead: 0.052628%  
  [libx264 @ 00000000004c7e00] frame I:1     Avg QP: 0.00  size:1345491  
  [libx264 @ 00000000004c7e00] frame P:186   Avg QP: 0.00  size: 13327  
  [libx264 @ 00000000004c7e00] mb I  I16..4: 100.0%  0.0%  0.0%  
  [libx264 @ 00000000004c7e00] mb P  I16..4: 16.5%  0.0%  0.0%  P16..4:  0.3%  0.0  
  %  0.0%  0.0%  0.0%    skip:83.3%  
  [libx264 @ 00000000004c7e00] coded y,u,v intra: 6.1% 3.8% 3.9% inter: 0.2% 0.1%  
  0.1%  
  [libx264 @ 00000000004c7e00] i16 v,h,dc,p: 96%  4%  0%  0%  
  [libx264 @ 00000000004c7e00] kb/s:4008.11  
  [dshow @ 00000000004bf760] real-time buffer [screen-capture-recorder] [video inp  
  ut] too full or near too full (545% of size: 3041280 [rtbufsize parameter])! fra  
  me dropped!  
  Exiting normally, received signal 2.  
  Terminate batch job (Y/N)?
  
  ```
  
  huffyuv run:
  
  ```
  ffmpeg -f dshow -i video="screen-capture-recorder" -video_size 1920x1080 -framerate 30 -c:v huffyuv capture.mkv  
  ffmpeg version N-73411-g5233f25 Copyright (c) 2000-2015 the FFmpeg developers  
    built with gcc 4.9.2 (GCC)  
    configuration: --arch=x86_64 --target-os=mingw32 --cross-prefix=/home/user/san  
  dbox/mingw-w64-x86_64/bin/x86_64-w64-mingw32- --pkg-config=pkg-config --enable-g  
  pl --enable-libsoxr --enable-fontconfig --enable-libass --enable-libutvideo --en  
  able-libbluray --enable-iconv --enable-libtwolame --extra-cflags=-DLIBTWOLAME_ST  
  ATIC --enable-libzvbi --enable-libcaca --enable-libmodplug --extra-libs=-lstdc++  
   --extra-libs=-lpng --enable-libvidstab --enable-libx265 --enable-decklink --ext  
  ra-libs=-loleaut32 --enable-libx264 --enable-libxvid --enable-libmp3lame --enabl  
  e-version3 --enable-zlib --enable-librtmp --enable-libvorbis --enable-libtheora  
  --enable-libspeex --enable-libopenjpeg --enable-gnutls --enable-libgsm --enable-  
  libfreetype --enable-libopus --disable-w32threads --enable-frei0r --enable-filte  
  r=frei0r --enable-libvo-aacenc --enable-bzlib --enable-libxavs --enable-libopenc  
  ore-amrnb --enable-libopencore-amrwb --enable-libvo-amrwbenc --enable-libschroed  
  inger --enable-libvpx --enable-libilbc --enable-libwavpack --enable-libwebp --en  
  able-libgme --enable-dxva2 --enable-libdcadec --enable-avisynth --enable-static  
  --disable-shared --extra-cflags= --prefix=/home/user/sandbox/mingw-w64-x86_64/x8  
  6_64-w64-mingw32 --extra-libs=-lpsapi --enable-nonfree --enable-libfdk-aac --dis  
  able-libfaac --enable-nvenc --enable-runtime-cpudetect  
    libavutil      54. 28.100 / 54. 28.100  
    libavcodec     56. 46.101 / 56. 46.101  
    libavformat    56. 40.100 / 56. 40.100  
    libavdevice    56.  4.100 / 56.  4.100  
    libavfilter     5. 20.100 /  5. 20.100  
    libswscale      3.  1.101 /  3.  1.101  
    libswresample   1.  2.100 /  1.  2.100  
    libpostproc    53.  3.100 / 53.  3.100  
  leaving aero onInput #0, dshow, from 'video=screen-capture-recorder':  
    Duration: N/A, start: 362514.497000, bitrate: N/A  
      Stream #0:0: Video: rawvideo, bgr0, 1920x1080, 30 tbr, 10000k tbn, 30 tbc  
  [huffyuv @ 0000000000380ae0] using huffyuv 2.2.0 or newer interlacing flag  
  [huffyuv @ 0000000000377280] using huffyuv 2.2.0 or newer interlacing flag  
  [huffyuv @ 00000000003b0fc0] using huffyuv 2.2.0 or newer interlacing flag  
  [huffyuv @ 00000000003b1700] using huffyuv 2.2.0 or newer interlacing flag  
  [huffyuv @ 0000000000357a00] using huffyuv 2.2.0 or newer interlacing flag  
  Output #0, matroska, to 'capture.mkv':  
    Metadata:  
      encoder         : Lavf56.40.100  
      Stream #0:0: Video: huffyuv (HFYU / 0x55594648), rgb24, 1920x1080, q=2-31, 2  
  00 kb/s, 30 fps, 1k tbn, 30 tbc  
      Metadata:  
        encoder         : Lavc56.46.101 huffyuv  
  Stream mapping:  
    Stream #0:0 -> #0:0 (rawvideo (native) -> huffyuv (native))  
  Press [q] to stop, [?] for help  
  frame=   12 fps=0.0 q=0.0 size=   23668kB time=00:00:00.50 bitrate=386999.4kbits  
  frame=   22 fps= 22 q=0.0 size=   44696kB time=00:00:00.96 bitrate=379033.1kbits  
  frame=   35 fps= 23 q=0.0 size=   72074kB time=00:00:01.46 bitrate=402750.2kbits  
  frame=   49 fps= 24 q=0.0 size=  101620kB time=00:00:02.00 bitrate=416236.4kbits  
  frame=   63 fps= 25 q=0.0 size=  131190kB time=00:00:02.50 bitrate=429712.0kbits  
  frame=   78 fps= 26 q=0.0 size=  162896kB time=00:00:03.03 bitrate=439829.0kbits  
  frame=   83 fps= 26 q=0.0 Lsize=  175587kB time=00:00:03.23 bitrate=444776.1kbit  
  s/s  
  video:175582kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxin  
  g overhead: 0.002479%  
  [dshow @ 000000000034f420] real-time buffer [screen-capture-recorder] [video inp  
  ut] too full or near too full (545% of size: 3041280 [rtbufsize parameter])! fra  
  me dropped!  
  Exiting normally, received signal 2.  
  Terminate batch job (Y/N)?  
  
  ```
  
  note: even if I have accepted the answer for general purposes I tend to use the soluction provided by @paul-b-mahol with the **libx264rgb** encoder.
  
  ---
  
  **Tags:** ffmpeg, video-quality, h.264, video-capture
  
  > **Comments:**
  > **username_1**: You should show the complete console outputs from each `ffmpeg` command.  
  > **username_0**: @LordNeckbeard done!  
  > **username_1**: Thanks. What are you using to play back the H.264 video?  
  > **username_0**: @LordNeckbeard just VLC :(  
  > **username_1**: The result is probably due to an auto-inserted scaler performing chroma subsampling conversion from yuv444p to yuv420p for playback. I don't know why that needs to occur so you can watch it (I never found the playback side of things very interesting, so therefore I remain ignorant on in this particular case).  
  > **username_0**: So for example if i would bring both files into Adobe Premiere or After Effects for editing the files should do the same? Was a problem of vlc? tl;dr: What I'm interested to understand is if xh264 with -qp0 or -crf 0 is to be considered really lossless and a possible full alternative to huffyuv or ProRes 444  
  
  ---
  
  ## 2 answers
  
  ### Answer by username_3 on 2016-05-09. Score: 13 | Accepted answer
  
  It's an artifact of the player, not the encoder.
  
  I used the command below to generate a RGB format capture in HuffYUV
  
  ```
  ffmpeg -f dshow -video_size 1920x1080 -framerate 30 -i video="screen-capture-recorder" -c:v huffyuv -t 5 cap.mkv
  
  ```
  
  Then transcoded the file to
  
  x264 lossless RGB
  
  ```
  ffmpeg -i cap.mkv -c:v libx264rgb -crf 0 -preset ultrafast h264rgb.mkv
  
  ```
  
  HuffYUV YUV 4:2:2
  
  ```
  ffmpeg -i cap.mkv -c:v huffyuv -pix_fmt yuv422p huffyuv.mkv
  
  ```
  
  x264 lossless YUV 4:2:2
  
  ```
  ffmpeg -i cap.mkv -c:v libx264 -crf 0 -preset ultrafast -pix_fmt yuv422p h264yuv.mkv
  
  ```
  
  ---
  
  Then, using the SSIM metric, compared the HuffYUV and x264 RGB files
  
  ```
  ffmpeg -i h264rgb.mkv -i cap.mkv -filter_complex ssim -f null -
  
  ```
  
  which resulted in
  
  ```
  SSIM R:1.000000 (inf) G:1.000000 (inf) B:1.000000 (inf) All:1.000000 (inf)
  
  ```
  
  And the HuffYUV and x264 YUV files
  
  ```
  ffmpeg -i h264yuv.mkv -i huffyuv.mkv -filter_complex ssim -f null -
  
  ```
  
  Result
  
  ```
  SSIM Y:1.000000 (inf) U:1.000000 (inf) V:1.000000 (inf) All:1.000000 (inf)
  
  ```
  
  So, x264 does produce lossless output.
  
  
  ---
  
  ### Answer by username_2 on 2021-04-21. Score: 2
  
  Hellow. You need 4:4:4 pixel format and High444 profile in libx264 or h264\_nvenc or other h264 encoder. And I guess that `qp 0` is better then `crf 0`. For example:
  
  ```
  -c:v h264_nvenc -qp 0 -pix_fmt yuv444p -profile:v high444p
  
  ```
  
  For screenrecording [gdigrab](https://trac.ffmpeg.org/wiki/Capture/Desktop) is the best way.
  P.S.: I use Nvidia HWacel of my GeForce1660 Ti Max-Q. It's very fast!
  
  
  ---
  
  