<html><head><style type="text/css"><!-- DIV {margin:0px;} --></style></head><body><div style="font-family:times new roman,new york,times,serif;font-size:12pt"><div>Hi all, <br><br> I am trying to encode a video from raw YUV to MPEG-2 using the ffmpeg API. 

<p>My problem is that the <em>API</em>-generated file is approx. 1.7 times bigger than the equivalent files generated by <em>ffmpeg</em> itself.</p>

<p>I use the quantization parameter (via <code>qmin</code> and <code>qmax</code>) instead of the bitrate. </p>

<p>The <em>API</em>-version is basically:</p>



<pre class="lang-cpp prettyprint"><code><span class="com">  //...</span><span class="pln"><br>  pCodecCtx</span><span class="pun">-></span><span class="pln">pix_fmt </span><span class="pun">=</span><span class="pln"> PIX_FMT_YUV420P</span><span class="pun">;</span><span class="pln"><br>  pCodecCtx</span><span class="pun">-></span><span class="pln">qmin </span><span class="pun">=</span><span class="pln"> </span><span class="lit">3</span><span class="pun">;</span><span class="pln"><br>  pCodecCtx</span><span class="pun">-></span><span class="pln">qmax </span><span class="pun">=</span><span class="pln"> </span><span class="lit">3</span><span class="pun">;</span><span class="pln"><br>  pCodecCtx</span><span class="pun">-></span><span class="pln">time_base</span><span class="pun">.</span><span class="pln">num </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln"><br> 
 pCodecCtx</span><span class="pun">-></span><span class="pln">time_base</span><span class="pun">.</span><span class="pln">den </span><span class="pun">=</span><span class="pln"> </span><span class="lit">30</span><span class="pun">;</span><span class="pln"><br>  avcodec_open</span><span class="pun">(</span><span class="pln">pCodecCtx</span><span class="pun">,</span><span class="pln"> avcodec_find_encoder</span><span class="pun">(</span><span class="pln">CODEC_ID_MPEG2VIDEO</span><span class="pun">));</span><span class="pln"><br></span><span class="com">  //...</span><span class="pln"><br></span><span class="kwd">  while</span><span class="pun">(</span><span class="com">/*...*/</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"><br>    avcodec_encode_video</span><span class="pun">(</span><span class="pln">pCodecCtx</span><span class="pun">,</span><span class="pln"> pOutbuf</span><span
 class="pun">,</span><span class="pln"> outbufSize</span><span class="pun">,</span><span class="pln"> pPicture</span><span class="pun">);</span><span class="pln"><br>    </span><span class="com">//..</span><span class="pln"><br></span><span class="pun">  }</span><span class="pln"><br></span><span class="com">  //...</span><span class="pln"><br></span></code></pre>

<p>For <em>ffmpeg</em>.exe itself, I use the command: </p>

<pre><code>  ffmpeg -s 352x288 -r 30 -i foreman_352x288.yuv -f mpeg2video -vcodec mpeg2video -r 30 -pix_fmt yuv420p -qmin 3 -qmax 3 foreman.m2v
</code></pre>

<p>Why does the <em>API</em>-generate file achieve a bitrate of 5212 kb/s and the file generated by  <em>ffmpeg</em> for the same <code>qp</code> a bitrate of 3047 kb/s?? </p>

<p>(Even more puzzling is that the smaller <em>ffmpeg</em> version has a slightly higher PSNR, 40.49 dB vs. 40.02 dB). </p>

<p>Are there any other relevant parameters that I missed? Does the <em>ffmpeg</em> actually respect the quantization parameter?</p><br>Thanks for any advice, <br>MyKey_<br></div>



</div></body></html>