fraunhoferhhi / vvenc

VVenC, the Fraunhofer Versatile Video Encoder
https://www.hhi.fraunhofer.de/en/departments/vca/technologies-and-solutions/h266-vvc.html
BSD 3-Clause Clear License
937 stars 167 forks source link

Heavy blurring even when using FGA #406

Open lvl1337 opened 1 month ago

lvl1337 commented 1 month ago

What the title says. I've tried with QPA on and off but both have the same issues. FGA does improve it a good bit but things like subtle banding or background art seem to be getting blurred immensely. This is known to be related to a trick regarding improvements in PSNR scores but it's psychovisually displeasing, even more so since the temporal filter is not doing a good job at cleaning up source artifacts.

Assigning a strength factor to this would allow for weakening the effect of the temporal filter as the user sees fit, leading to this problem not being as serious as it is now.

adamjw24 commented 1 month ago

The automatic formula for assigning temporal filter strenghts is as follows:

    const int log2GopSize = std::min<int>( 6, vvenc::floorLog2( c->m_GOPSize ) );

    c->m_vvencMCTF.numFrames = c->m_vvencMCTF.numStrength = std::max( 1, log2GopSize - ( ( c->m_QP - ( c->m_RCTargetBitrate > 0 ? 1 : 0 ) ) >> 4 ) );

    for ( int i = 0; i < c->m_vvencMCTF.numFrames; i++ )
    {
      c->m_vvencMCTF.MCTFFrames[i] = c->m_GOPSize >> ( c->m_vvencMCTF.numFrames - i - 1 );
      c->m_vvencMCTF.MCTFStrengths[i] = vvenc::Clip3( 0.0, 2.0, ( c->m_QP - 4.0 ) / 8.0 ) / double ( c->m_vvencMCTF.numFrames - i );
    }
    c->m_vvencMCTF.MCTFStrengths[c->m_vvencMCTF.numFrames - 1] = vvenc::Clip3( 0.0, 1.5, ( c->m_QP - 4.0 ) * 3.0 / 32.0 );

You can override the defaults using the parameters MCTFFrame and MCTFStrength (eg. --MCTFFrame=32,16,8 --MCTFStrength=1,1,1). m_GOPSize is always 32, all the other parameters are your input.

Let me know if you find better parameters.

It would also be helpful to have your video to be able to inspect what is happening.

Best, Adam