module inscription newsletter haut de page forum mobile

Rejeter la notice

Formation Lumière - Pratique Intensive du 26 au 28 mai à Paris
Formez-vous avec cet atelier de pratique intensive dans des conditions exceptionnelles ! Formation finançable.
Toutes les infos

Ateliers et Formations

Max-bitrate et Bufsize en h264

Discussion dans 'Compression, conversion vidéo' créé par TomB, 27 Octobre 2018.

Tags:
  1. TomB

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    121
    Appréciations:
    +1 / 0 / -0
    Bonjour à tous,

    Je viens vers vous car je touche à mes limites concernant mes connaissances en compression vidéo, et que je galère pas mal...

    Je suis entrain d'exporter une série d'extraits pour les mettre en ligne.
    Je les travaille dans virtualdub, et je les exporte en .avi via l'outil de compression "x264vfw - H.264/MPEG-4 AVC codec" de virtualdub. Ensuite je les encapsule en mp4 avec Yamb.

    Habituellement, pour la compression h264, j'utilise l'option "Single pass - bitrate-based (ABR)" et je choisis 2400 kbits/s. Il m'arrive d'en passer par le Multipass quand le rendu est problématique, mais cette méthode crée aussi d'autres problèmes qui font que je lui préfère l'ABR.

    [​IMG]


    Le problème est que j'ai cette fois-ci une vidéo un peu compliquée (beaucoup de mouvements, d'informations) qui lage un peu en lecture sur mon site. J'ai pensé que c'était un problème de bandwith, dont on atteignait les limites...

    En regardant les infos du fichier mp4 dans MediaPlayerClassic, je vois en effet que le bitrate peut monter assez haut :

    [​IMG]

    J'ai donc essayé de poser des limites de max-bitrate, par exemple à 2700 kb/s. Voici ce que dit l'aide du fichier de compression (j'ai pris le bout concernant ce qui m'intéresse) :
    Code:
    Ratecontrol:
    
      -q, --qp <integer>          Force constant QP (0-51, 0=lossless)
      -B, --bitrate <integer>     Set bitrate (kbit/s)
          --crf <float>           Quality-based VBR (0-51) [23.0]
          --rc-lookahead <integer> Number of frames for frametype lookahead [40]
          --vbv-maxrate <integer> Max local bitrate (kbit/s) [0]
          --vbv-bufsize <integer> Set size of the VBV buffer (kbit) [0]
          --vbv-init <float>      Initial VBV buffer occupancy [0.9]
          --crf-max <float>       With CRF+VBV, limit RF to this value
                                      May cause VBV underflows!
          --qpmin <integer>       Set min QP [0]
          --qpmax <integer>       Set max QP [69]
          --qpstep <integer>      Set max QP step [4]

    Il semble qu'il soit obligatoire de renseigner un "bufsize" si on renseigne un "maxrate".

    Le problème est que, même en essayant de lire ce que je vois partout sur le web, je ne comprends pas à quoi correspond ce "bufsize" : au bitrate moyen souhaité ? Ou à l'étendue maximum de bitrate (par exemple, si je met "1000", ça voudrait dire que ça ne pas aller plus de 500 kb/s en-dessous ni 500 kb/s au-dessus du bitrate moyen) ?

    Certains sites disent aussi de mettre en "bufsize" le double du "maxrate" (et là je comprends plus rien)...

    Bref, voilà un exemple de ce que j'ai essayé :

    [​IMG]

    Je ne sais pas si j'ai bien écrit la ligne de commande (possible problème de syntaxe ?), mais en tout cas le résultat, une fois encapsulé en MP4, donne rien de très probant :

    [​IMG]

    J'ai essayé avec cette ligne de commande sans les "--", j'ai essayé de mettre un bufsize au double de la valeur du maxrate, j'ai essayé en multipass... La valeur de "Maximum bit rate" qui en résulte varie un peu à chaque fois, mais n'est jamais égale au maxrate que j'ai demandé.

    Quelqu'un sait ce que j'ai raté ou fait mal ?

    Merci d'avance !
     
  2. giroudf

    So

    Points Repaire:
    15 400
    Recos reçues:
    524
    Messages:
    19 520
    Appréciations:
    +832 / 3 687 / -36
    deja le ABR n'est pas un bitrate constant mais une moyenne (Average Bit Rate) donc si c'est une moyenne il y a un max et un min.
    Ensuite , on considere que l'ABR 1 pass est mauvais dans le sens ou comme on fait qu'une passe , l'encoder n'a pas les moyens de savoir a l'avance quelle bande passante utiliser pour les images a venir. Donc resultat forcement tres moyen.
    Malheureusement dans ffmpeg, si il y a un parametre ( "nal-hrd=cbr:force-cfr=1" ) pour forcer un bitrate constant (CBR) , il ne fonctionne pas pour le mpeg4 seulement en mpeg2-TS.
    l'inconvenient du CBR est que si on ne tombe pas juste sur ce qu'il faut, soit on gaspille de la bande passante (CBR trop grand) soit on bousille inutilement la video (CBR trop petit).

    L'option -vbv que l'on voit sur ton ecran est le Constrained Encoding (VBV).
    Pour l'utiliser il faut aussi specifier les parametres -maxrate and -bufsize.
    maxrate est la limite a ne pas depasser (pratique si on fait du streaming) et le bufsize est la taille
    de buffer attendue par le lecteur (c'est une estimation qu'on fait).
    bufsize a un impact sur la variabilite du bitrate. Plus grand est bufsize , plus le bitrate va varier (et donc potentiellement depasser le maxrate).
    si on veut encoder a la valeur de maxrate, il faut mette un bufsize petit (par exemple la moitie de maxrate ou moins).
    si on fait ca, il est tres recommande de faire un ABR d'au moins 2 passes, ou de mettre un maxrate confortable qui assure une qualite pour toute la sequence.
     
    #2 giroudf, 27 Octobre 2018
    Dernière édition: 27 Octobre 2018
  3. TomB

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    121
    Appréciations:
    +1 / 0 / -0
    Bonjour, merci de me venir en aide !

    J'étais parti sur l'idée de faire tout mes extraits en deux passes, mais j'ai été surpris de voir que ça donnait des choses pas forcément idéales. Le grain film, sans doute parce que considéré comme information moins importante, se fait par exemple invisible par moments. Le banding se fait moins fort mais plus mouvant sur certains plans fixes, et donc d'autant plus visible... Bref, du coup j'utilise à présent seulement le 2pass quand l'abr donne un résultat pas assez satisfaisant.

    Le CBR j'aurais été intéressé d'essayer, mais il n'est pas proposé dans le menu...

    [​IMG]



    Mmm je crois que je pige pas bien ce qu'est le buffer, mais pour le reste c'est plus clair !

    Mais du coup le buffer varie quelque soit le maxrate, à partir du bitrate qu'on a choisi (c'est-à-dire 2400 kb/s ici) ? A quoi sert de renseigner un maxrate, du coup, s'il n'est pas pris en compte ? Je comprends pas leur logique.


    Ok, j'essaie ça tout à l'heure (compression avec petit bufsize) et je reviens ici avez les résultats !

    Pour le maxrate "confortable", le truc c'est que j'ai aucune idée de ce à quoi ça peut correspondre... Là, sur cet extrait, au dessus de 3000 kb/s (avec petite définition d'image : 680x358), ça a l'air de poser problème ; mais j'ai des vidéos, de même taille, avec un bitrate maximum plus haut, et qui lagent pas sur le site, donc j'y comprends rien...

    Merci en tout cas déjà pour ces infos, j'y vois plus clair !
     
  4. giroudf

    So

    Points Repaire:
    15 400
    Recos reçues:
    524
    Messages:
    19 520
    Appréciations:
    +832 / 3 687 / -36
    franchement 4Mpbs (ou 4000kbps), c'est pas la mer a boire de nos jours.
    si tu as des problemes, c'est que le buffer est trop petit (un gros buffer permet au lecteur de continuer la lecture meme si les donnees peinent a suivre)
    mais si ton maxrate est trop petit, le fait d'avoir un gros buffer va faire monte rla moyenne (il y a pas de miracles).
    donc ca indique que ton maxrate est trop petit. Il vaut donc mieux augmenter le maxrate et diminuer le buffer, ou fire 2 passes pour optimiser le bitrate.
     
  5. Alcoriza

    So

    Points Repaire:
    8 200
    Recos reçues:
    97
    Messages:
    5 211
    Appréciations:
    +294 / 698 / -5
    Pour du 680x358, tu mets un débit à plus de 2 Mbits/s ? :weird:
     
  6. giroudf

    So

    Points Repaire:
    15 400
    Recos reçues:
    524
    Messages:
    19 520
    Appréciations:
    +832 / 3 687 / -36
    il veut encoder le grain de la video .....
     
  7. TomB

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    121
    Appréciations:
    +1 / 0 / -0
    Oui. Je préfère de loin, en plein écran, une vidéo à faible définition au bitrate haut que l'inverse. Je t'avoue que quand je vois des films d'1h30 en 1080p sur le net qui pèsent 1Go, je me demande parfois ce que les gens ont dans les yeux... À ce stade, autant repeindre la vidéo au burin.

    Je lance les tests !
     
  8. Alcoriza

    So

    Points Repaire:
    8 200
    Recos reçues:
    97
    Messages:
    5 211
    Appréciations:
    +294 / 698 / -5
    Oui, enfin entre faire du 1 Mbits/s pour de la HD et du 2 Mbits/s pour du 360p, y'a quand même une marge.
     
  9. TomB

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    121
    Appréciations:
    +1 / 0 / -0
    Bien sûr. Je cherche juste un équilibre déf-bitrate où la compression s'oublie, et où la texture des films ne part pas aux égouts. Tant que ça lage pas (c'est mon premier extrait sur 40 à le faire), ça me va.
     
  10. Alcoriza

    So

    Points Repaire:
    8 200
    Recos reçues:
    97
    Messages:
    5 211
    Appréciations:
    +294 / 698 / -5
    Tu as essayé de descendre le bitrate moyen pour voir si ça impactait vraiment ton résultat ? Ou carrément d'essayer un autre encodeur ?
     
  11. TomB

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    121
    Appréciations:
    +1 / 0 / -0
    Oui, j'ai un peu essayé toutes les combinaisons. Tout dépend des vidéos bien sûr, parfois je pourrais être beaucoup plus bas. Mais sur celle qui me pose problème (je peux la mettre temporairement en lien, je supprimerai après), vu la somme malade de trucs à gérer (caméra épaule + plan rempli de personnes qui bougent + pluie en avant-plan + grain du 16mm), je vois des dégâts visibles (notamment sur les visages) dès que je descend à 2000 kb/s (là c'est la version abr 2400 kb/s). Après j'exclue pas d'y être plus sensible et réticent que beaucoup de monde...

    Après, monter la def pourrait peut-être compenser ça, mais j'ai jamais trouvé ça très flagrant. La seule chose où la faible définition se sent vraiment, ce sont sur les sous-titres, qui pixelisent un brin. C'est pas le plus embêtant.

    Pas vraiment d'autre encodeur sous la main, mais si tu en connais un mieux, ça m'intéresse !
    Je suis également un peu perdu sur tout les preset (partie haute de la capture d'écran que j'avais mis ci-dessus), je laisse tout en auto mais y a peut-être des choses qui aideraient.
     
  12. Alcoriza

    So

    Points Repaire:
    8 200
    Recos reçues:
    97
    Messages:
    5 211
    Appréciations:
    +294 / 698 / -5
    Ta vidéo ne laggue pas du tout chez moi. Est-ce que c'est un truc que t'as observé chez différentes personnes ? Ou juste sur ton ordi ?
     
  13. TomB

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    121
    Appréciations:
    +1 / 0 / -0
    Juste sur mon ordi (seulement en ligne, la vidéo en lecture sur mon DD y a pas de souci). Elle lage à des moments précis (genre le début de la pluie, quand les gens se retirent). Comme j'ai la fibre, je pensais que ce serait pire chez d'autres, mais peut-être ça n'a rien à voir ?

    C'est pas grave, de toute façon, ça m'intéresse de savoir comment tout cela fonctionne pour de futurs exports.



    EDIT : Donc les résultats, si quelqu'un est un jour confronté au même problème.

    > Gros maxrate et petit bufsize (compression Multipass 2400 kb/s avec --vbv-maxrate 3000 --vbv-bufsize 500) :

    [​IMG]

    > Petit maxrate et gros bufzise au double du bitrate (compression Multipass 2400 kb/s avec --vbv-maxrate 2400 --vbv-bufsize 4800) :

    [​IMG]

    La deuxième méthode semble donc mieux indiquée pour limiter les pics, mais, à vu de nez (et de captures d'écran) la qualité est meilleure sur le premier (ce qui est plutôt logique).
     
    #13 TomB, 27 Octobre 2018
    Dernière édition: 28 Octobre 2018
Chargement...

Partager cette page