user21971: Encoding on CPU can be done via:
ffmpeg -i input.mp4 -vcodec h264 -crf 23 -acodec copy h264.mp4

GPU's alternative for the codec is h264_nvenc. How can I pass the same options to it?

I googled and came to following command:
ffmpeg -i input.mp4 -vcodec h264_nvenc -rc constqp -qp 23 -acodec copy h264_nvenc.mp4

But the file I get is much larger. And with other options quality is much worther.
PS: Same question in Russian.

user25163: If you don't specify bit rate yourself, FFmpeg will assume a default bit rate of 256 kbit\s, you have to unset it with -b:v 0.

user30281: from reading:
ffmpeg -h encoder=h264_nvenc

and the nvidia nvenc examples at (https://devblogs.nvidia.com/nvidia-ffmpeg-transcoding-guide/), I've arrived at:
ffmpeg -vsync 0 -hwaccel cuvid -c:v h264_cuvid -i test_input.mp4 -c:a copy -c:v h264_nvenc -b:v 0 -cq 1 test3.mp4

where:
-b:v 0 over-rides the default 2mbps bitrate as noted by Gyan
-cq 1 means target quality level 1 (highest)
 range of 0-51. 
 0 means automatic (in my case around 15mbps)
 1 gives about 15mbps, 26 results in around 5mbps, 51 results in 0.5mbps


user1871: CRF != CQP. The former may have variable QP but tries to maintain quality. CQP is a cruder form of rate-control.
For nvenc, use -rc vbr_hq -qmin 0 and add -cq X where X sets a quality level; range is 0-51. Smaller is better.

21971: <p>Encoding on CPU can be done via:</p>

<pre><code>ffmpeg -i input.mp4 -vcodec h264 -crf 23 -acodec copy h264.mp4
</code></pre>

<p>GPU's alternative for the codec is <code>h264_nvenc</code>. How can I pass the same options to it?</p>

<hr>

<p>I googled and came to following command:</p>

<pre><code>ffmpeg -i input.mp4 -vcodec h264_nvenc -rc constqp -qp 23 -acodec copy h264_nvenc.mp4
</code></pre>

<p>But the file I get is much larger. And with other options quality is much worther.</p>

<p>PS: <a href="//ru.stackoverflow.com/q/943877/178988">Same question in Russian.</a></p>
 25163: <p>If you don't specify bit rate yourself, FFmpeg will assume a default bit rate of 256 kbit\s, you have to unset it with <code>-b:v 0</code>.</p>
 30281: <p>from reading:</p>
<pre><code>ffmpeg -h encoder=h264_nvenc
</code></pre>
<p>and the nvidia nvenc examples at (<a href="https://devblogs.nvidia.com/nvidia-ffmpeg-transcoding-guide/" rel="nofollow noreferrer">https://devblogs.nvidia.com/nvidia-ffmpeg-transcoding-guide/</a>), I've arrived at:</p>
<pre><code>ffmpeg -vsync 0 -hwaccel cuvid -c:v h264_cuvid -i test_input.mp4 -c:a copy -c:v h264_nvenc -b:v 0 -cq 1 test3.mp4
</code></pre>
<p>where:</p>
<pre><code>-b:v 0 over-rides the default 2mbps bitrate as noted by Gyan
-cq 1 means target quality level 1 (highest)
 range of 0-51. 
 0 means automatic (in my case around 15mbps)
 1 gives about 15mbps, 26 results in around 5mbps, 51 results in 0.5mbps
</code></pre>
 1871: <p>CRF != CQP. The former may have variable QP but tries to maintain quality. CQP is a cruder form of rate-control.</p>

<p>For nvenc, use <code>-rc vbr_hq -qmin 0</code> and add <code>-cq X</code> where X sets a quality level; range is 0-51. Smaller is better.</p>
