Le profile "medium" correspond aux paramètres par défaut, soit :
$ x264 --fullhelp | grep '[[\]'
--preset <string> Use a preset to select encoding settings [medium]
-I, --keyint <integer or "infinite"> Maximum GOP size [250]
-i, --min-keyint <integer> Minimum GOP size [auto] (jamais ou rarement modifié)
--scenecut <integer> How aggressively to insert extra I-frames [40] (jamais ou rarement modifié)
-b, --bframes <integer> Number of B-frames between I and P [3]
--b-adapt <integer> Adaptive B-frame decision method [1]
--b-bias <integer> Influences how often B-frames are used [0] (jamais ou rarement modifié)
--b-pyramid <string> Keep some B-frames as references [normal]
-r, --ref <integer> Number of reference frames [3]
-f, --deblock <alpha:beta> Loop filter parameters [0:0] (modifié parfois mais assez rarement)
--rc-lookahead <integer> Number of frames for frametype lookahead [40] (jamais ou rarement modifié)
--vbv-maxrate <integer> Max local bitrate (kbit/s) [0] (jamais ou rarement modifié)
--vbv-bufsize <integer> Set size of the VBV buffer (kbit) [0] (jamais ou rarement modifié)
--vbv-init <float> Initial VBV buffer occupancy [0.9] (jamais ou rarement modifié)
--qpmin <integer> Set min QP [0] (jamais ou rarement modifié)
--qpmax <integer> Set max QP [69] (jamais ou rarement modifié)
--qpstep <integer> Set max QP step [4] (jamais ou rarement modifié)
--ratetol <float> Tolerance of ABR ratecontrol and VBV [1.0] (jamais ou rarement modifié)
--ipratio <float> QP factor between I and P [1.40] (jamais ou rarement modifié)
--pbratio <float> QP factor between P and B [1.30] (jamais ou rarement modifié)
--chroma-qp-offset <integer> QP difference between chroma and luma [0] (jamais ou rarement modifié)
--aq-mode <integer> AQ method [1] (jamais ou rarement modifié)
- 0: Disabled
- 1: Variance AQ (complexity mask)
- 2: Auto-variance AQ (experimental)
--aq-strength <float> Reduces blocking and blurring in flat and
textured areas. [1.0] (valeur à virgule, modifié à 2 maximum lorsque le mode par défaut ne retient pas assez de détails, ce qui est rare)
--qcomp <float> QP curve compression [0.60] (jamais ou rarement modifié)
--cplxblur <float> Reduce fluctuations in QP (before curve compression) [20.0] (jamais ou rarement modifié)
--qblur <float> Reduce fluctuations in QP (after curve compression) [0.5] (jamais ou rarement modifié)
-A, --partitions <string> Partitions to consider ["p8x8,b8x8,i8x8,i4x4"]
--direct <string> Direct MV prediction mode ["spatial"]
--weightp <integer> Weighted prediction for P-frames [2]
--me <string> Integer pixel motion estimation method ["hex"]
--merange <integer> Maximum motion vector search range [16] (jamais ou rarement modifié)
--mvrange <integer> Maximum motion vector length [-1 (auto)] (jamais ou rarement modifié)
--mvrange-thread <int> Minimum buffer between threads [-1 (auto)] (jamais ou rarement modifié)
-m, --subme <integer> Subpixel motion estimation and mode decision [7]
--psy-rd <float:float> Strength of psychovisual optimization ["1.0:0.0"]
#1: RD (requires subme>=6)
#2: Trellis (requires trellis, experimental)
-t, --trellis <integer> Trellis RD quantization. [1]
--nr <integer> Noise reduction [0] (jamais ou rarement modifié)
--deadzone-inter <int> Set the size of the inter luma quantization deadzone [21] (jamais ou rarement modifié)
--deadzone-intra <int> Set the size of the intra luma quantization deadzone [11] (jamais ou rarement modifié)
--cqm <string> Preset quant matrices ["flat"] (jamais ou très rarement modifié, mais il y a des matrices de quantization selon la source sur Doom9 par exemple. A essayer si on est curieux)
Jamais ou rarement modifié :
--overscan <string> Specify crop overscan setting ["undef"]
--videoformat <string> Specify video format ["undef"]
--range <string> Specify color range ["auto"]
--colorprim <string> Specify color primaries ["undef"]
--transfer <string> Specify transfer characteristics ["undef"]
--colormatrix <string> Specify color matrix setting ["???"]
--chromaloc <integer> Specify chroma sample location (0 to 5) [0]
--muxer <string> Specify output container format ["auto"]
--demuxer <string> Specify input container format ["auto"]
--output-csp <string> Specify output colorspace ["i420"]
--input-range <string> Specify input color range ["auto"]
--log-level <string> Specify the maximum level of logging ["info"]
--sps-id <integer> Set SPS and PPS id numbers [0]
Mode d'encodage à qualité constante :
--crf [23.0]
Ce qui correspond plus ou moins à ceci dans Handbrake :
Reference frames: 3 (--ref)
Maximum B-frames: 3 (--bframes)
Pyramidal B-frames: Normal (--b-pyramid)
Weighted P-frames: Smart (--weightp)
8x8 Transform: active (--no-8x8-dct pour le désactiver)
CABAC Entropy Coding: active (--no-cabac pour le désactiver, auquel cas le CAVLC sera utilisé. CABAC est une des options qui implique l'usage du H.264 High Profile)
Motion Est. Method: Hexagon (--me)
Subpel ME & Mode: 7: RD in all frames (--subme). Bon c'est un peu overkill, on peut mettre à 6 si on a CPU un peu vieux.
Motion Est. Range: 16 (--merange)
Adaptive Direct Mode: Spatial (--direct)
Adaptive B-Frames: Fast (--b-adapt)
Partitions: Most (--partitions)
Trellis: Encode Only (--trellis)
Adaptive Quantization Strength : 1 (--aq-strength)
Psychovisual Rate Distorsion : 1 (--psy-rd, première valeur)
Psychovisual Trellis: 0.0 (--psy-rd, seconde valeur après le ":")
Deblocking : 0:0 (--deblock)
No DCT Decimate : décoché (--no-dct-decimate)
Quant au preset slow, ça correspond à :
- slow:
--b-adapt 2 --direct auto --me umh
--rc-lookahead 50 --ref 5 --subme 8
Dans HandBrake, modifier ces valeurs (en partant des paramètres au-dessus) :
Adaptive B-Frames: Optimal
Adaptive Direct Mode: Automatic
Motion Est. Method : Uneven Multi-Hexagon
(rc-lookahead=50 sera à mettre dans le champ texte)
Reference Frames: 5
Subpel ME & Mode : 8: RD refine in I/P frames
A partir du preset "slower" on commence à atteindre des heures et des heures d'encodage pour un gain plus que fumeux pour 99% des cas (le % restant, c'est l'effet placebo qui fait son effet :p ).
Si HandBrake ne permet pas de spécifier l'option "tune" (à voir si on peut la rajouter dans le champ texte "Current x264 Advanced Option String" de l'onglet "Advanced". En fait faudrait tester l'option preset seule, éventuellement accompagnée de l'option tune, en fait), on peut savoir à quoi ils correspondent :
$ x264 --fullhelp
[...]
--tune <string> Tune the settings for a particular type of source
or situation
Overridden by user settings.
Multiple tunings are separated by commas.
Only one psy tuning can be used at a time.
- film (psy tuning):
--deblock -1:-1 --psy-rd <unset>:0.15
- animation (psy tuning):
--bframes {+2} --deblock 1:1
--psy-rd 0.4:<unset> --aq-strength 0.6
--ref {Double if >1 else 1}
- grain (psy tuning):
--aq-strength 0.5 --no-dct-decimate
--deadzone-inter 6 --deadzone-intra 6
--deblock -2:-2 --ipratio 1.1
--pbratio 1.1 --psy-rd <unset>:0.25
--qcomp 0.8
- stillimage (psy tuning):
--aq-strength 1.2 --deblock -3:-3
--psy-rd 2.0:0.7
- psnr (psy tuning):
--aq-mode 0 --no-psy
- ssim (psy tuning):
--aq-mode 2 --no-psy
- fastdecode:
--no-cabac --no-deblock --no-weightb
--weightp 0
- zerolatency:
--bframes 0 --force-cfr --no-mbtree
--sync-lookahead 0 --sliced-threads
--rc-lookahead 0
[...]
Seuls "film", "
grain" (<- voir les photos dans l'article qui présentent des films "avec grain") et "anime" sont utiles.
renaud07 a écritApparemment je ne peux pas choisir de preset, j'ai juste les options avancées, mais vu que je ne sais pas m'en servir j'ai laissé ce qui avait par défaut et ça à l'air pas mal vu que la qualité d'image est bonne.
Alors il y a une option sympa dans le x264, pour savoir mathématiquement si le résultat est bon (
ça ne dispense pas d'une vérification humaine, car les améliorations psychovisuelles influent négativement sur le score SSIM/PSNR, mais ça aide à titre informatif) :
--ssim Enable SSIM computation
Le SSIM sera calculé par le x264 pour chaque image (ça va ralentir un peu l'encodage, raison pour laquelle l'option n'est pas activée par défaut), et le SSIM moyen sera affiché sur la sortie standard à la fin de l'encodage (à voir si HandBrake récupère cette sortie comme le fait MeGUI sous Windows ?). Plus le SSIM est proche de 1 plus la qualité sera "meilleure" (entre guillemets car encore une fois il peut se gourrer).
Le score ne sera jamais à 1, vu que le H.264 est un format de compression avec perte (sauf avec un quantizer constant à 0, ce qui enclenche le mode de compression sans perte, mais on se retrouve avec une taille bien supérieure à celle de la source).
Enfin, traditionnellement, ces deux options (présentes aussi dans le XviD) :
-I, --keyint <integer or "infinite"> Maximum GOP size [250]
-i, --min-keyint <integer> Minimum GOP size [auto] (jamais ou rarement modifié)
(GOP = groupe d'images. Une scène, en gros. Un nouveau GOP est introduit lorsque le nombre de blocks différents dans l'image suivante est supérieur à 40% (option --scenecut). Voir aussi l'option
--open-gop (*) qui améliore l'efficacité de la compression vidéo au prix de la compatibilité avec certains décodeurs)
correspondent à 10 fois le nombre d'images par seconde de la source (pour keyint) et 1 fois le nombre d'images par seconde (pour min-keyint).
Bon les deux sont "intelligents", à savoir que la limite keyint est rarement atteinte, et que le min-keyint est automatique (bon si c'est automatique dans le sens "je prends le keyint et je le divise par 10", il est bête. Mais je ne crois pas que ce soit le cas).
Pour la plupart des sources (25 FPS, 23,976 FPS, 24 FPS, ...) je ne pense pas que ça change grand chose de ne pas les spécifier. Par contre sur une source à 60 images par secondes, un keyint de 250 sera peut-être trop limité (ce qui engendrera trop d'images clés, lesquelles utilisent plus de débit, et donc un fichier final très gros).
(*) À propos de --open-gop (pas activé par défaut semble-t-il)
LorD_MulDer a écritH.264 allows P-Frames and B-Frames to have multiple references. That is: Instead of only referring to the previous frame, they can refer to up to 16 previous frames.
Consequently you cannot start decoding at any I-Frame, because one of the P-/B-Frames after the I-Frame may refer to some frame before the I-Frame.
Anyway, there is a special kind of I-Frames in H.264, the IDR-Frames. Any frame following an IDR-Frame is guaranteed to not refer to any frame before the IDR-Frame.
The purpose of multiple references (and None-IDR I-Frames) is improved compressibility:
If more reference frames are available to the encoder, then the P- or B-Frame can be predicted more precisely and thus the residual will cost less bits to encode.
This thread explains how you can find the a point in a H.264 stream where you can start decoding/playing:
http://forum.doom9.org/showthread.php?t=146269
http://forum.doom9.org/showthread.php?t=146492
Je crois que c'est tout pour le moment.
renaud07 a écrit@ The uploader : ça n'a rien à voir avec les codecs mais c'est toujours sur les dvd : Est-ce que tu sais si c'est possible de dézonner complètement un lecteur dvd de PC et pas seulement changer la région comme le fait regionset ? à moins qu'il existe un log linux pour changer la région du dvd à la volée comme DVD Region Killer ?
Je crois qu'il faut changer le firmware du lecteur DVD pour cela. C'est risqué (tu risques de te retrouver avec une brique à la place d'un lecteur).
renaud07 a écritEDIT : autre question : Je compte peut-être m'acheter un lecteur blu-ray et j'ai lu sur certains forum que certains BD étaient en 25fps comme les DVD or c'est surtout pour le respect de la cadence d'images et aussi la HD évidemment que je veux en acquérir un. Alors comment savoir avant achat comment ils sont encodés ? Si ça se trouve c'est comme les dvd si on achète pas aux US ils sont en 25fps...
Les BluRay vendus en France sont à 25 FPS (format PAL), en tout cas pour ceux que j'ai (c'est à dire 2/3). C'est peut-être marqué derrière ?
(en tout cas sur les boîtes de DVD l'aspect ratio de l'image est souvent marqué, genre 2.35:1, alors pourquoi pas le FPS)
Mais j'ai très peu de BluRay, j'ai surtout des DVDs.
Évidemment il y a l'option de lire le BR sur ton ordi et de voir le FPS dans le lecteur, mais c'est trop tard à ce moment là (après l'achat)
renaud07 a écritAh oui j'ai une petite question : je me sert souvent de winff pour reconvertir des trucs et ça mets au temps de temps que la longueur du fichier alors que handbrake est beaucoup plus rapide c'est environ la moité (ex : pour un épisode d'une série de 40min il va en mettre que 20 pour le convertir) serait-ce à cause des réglages ? pourtant le bitrate est le même pour la vidéo.
Oui c'est à cause des réglages. Le débit joue aussi, mais surtout pour le décodage.
renaud07 a écritEDIT : L'idée de Kanor sur l'article serait bienvenue 🙂
Ben en fait les preset du x264 sont déjà très bons. Pour le mode CRF, 23.0 est un bon quantizer moyen (à condition de ne pas utiliser un preset qui bâcle le boulot, genre "ultra-fast") pour la plupart des sources, AMHA.
A partir du moment où on utilise le preset 'normal' (d'ailleurs même le gain du preset 'slow' est discutable), le plus gros facteur sur la qualité finale du film reste le quantizer moyen.
J'ai vu des sources ne pas être bonne au dessous de 18 (rare), ou 20 (un peu moins rare).
Pour faire un parallèle foireux avec le Xvid, CRF à 18 = XviD avec un Constant Quantizer de 2, et CRF à 23 = XviD avec un Constant Quantize de 4.