Conversion de vidéo de 1080p à 720p avec la plus petite perte de qualité grâce à ffmpeg

Je m'embrasse avec mon film de haute qualité: 1080p avec 60fps. Le problème est en retard lorsque vous jouez.

J'ai essayé de le convertir en 720p avec ffmpeg:

ffmpeg -i MyMovie.mkv -r 60 -s hd720 MyMovie_720p.mkv 

Mais il y a une perte de qualité importante car le débit binaire a diminué de 32,3 Mbps à 2,8 Mbps. Comment puis-je spécifier le débit binaire droit pour le flux vidéo, et laisser tout autre flux copié vierge?

Fichier d'entrée mediainfo:

 ID : 1 Format : AVC Format/Info : Advanced Video Codec Format profile : [email protected] Format settings, CABAC : Yes Format settings, ReFrames : 4 frames Codec ID : V_MPEG4/ISO/AVC Duration : 2h 58mn Bit rate : 32.3 Mbps Width : 1 920 pixels Height : 1 080 pixels Display aspect ratio : 16:9 Frame rate : 59.940 fps Color space : YUV Chroma subsampling : 4:2:0 Bit depth : 8 bits Scan type : Progressive Bits/(Pixel*Frame) : 0.260 Stream size : 40.2 GiB (92%) Writing library : x264 core 116 r2019 9cc407d Encoding settings : cabac=1 / ref=4 / deblock=1:-2:-1 / analyse=0x3:0x113 / me=umh / subme=10 / psy=1 / psy_rd=0.80:0.20 / mixed_ref=1 / me_range=32 / chroma_me=1 / trellis=2 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=0 / chroma_qp_offset=-3 / threads=6 / sliced_threads=0 / nr=0 / decimate=0 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=6 / b_pyramid=2 / b_adapt=2 / b_bias=0 / direct=3 / weightb=1 / open_gop=0 / weightp=2 / keyint=250 / keyint_min=25 / scenecut=40 / intra_refresh=0 / rc_lookahead=60 / rc=crf / mbtree=0 / crf=14.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / vbv_maxrate=50000 / vbv_bufsize=62500 / crf_max=0.0 / nal_hrd=none / ip_ratio=1.40 / pb_ratio=1.30 / aq=1:0.60 Language : English Default : Yes Forced : No Matrix coefficients : BT.709-5, BT.1361, IEC 61966-2-4 709, SMPTE RP177 

Voici un exemple qui devrait vous donner la vidéo de la plus haute qualité (je ne parle pas de la taille du fichier résultant). Notez que cette vidéo peut ne pas être jouable sur tous les appareils ou les joueurs:

 ffmpeg -i MyMovie.mkv -vf scale=-1:720 -c:v libx264 -crf 0 -preset veryslow -c:a copy MyMovie_720p.mkv 

Pour obtenir une qualité «sans perte visuelle», vous pouvez utiliser:

 ffmpeg -i MyMovie.mkv -vf scale=-1:720 -c:v libx264 -crf 18 -preset veryslow -c:a copy MyMovie_720p.mkv 

Voyons maintenant ce que nous avons ici:

Le filtre vidéo d'échelle sert à redimensionner la vidéo. Vous venez de définir une taille – quelle est la hauteur dans cet exemple – et utilisez -1 pour l'autre dimension. Ffmpeg recalculera la valeur correcte automatiquement tout en conservant le rapport d'aspect.

Qualité contrôlée avec l'option -crf :

La gamme de l'échelle de quantificateur est 0-51: où 0 est sans perte, 23 est par défaut et 51 est le pire possible. Une valeur plus faible est une qualité supérieure et une gamme subjectivement saine est de 18-28. Considérez 18 comme étant visuellement sans perte ou presque: il devrait ressembler à la même chose ou à peu près identique à l'entrée mais il n'est pas techniquement sans perte.

La gamme est exponentielle, donc l'augmentation de la valeur CRF +6 est à peu près la moitié du bitrate alors que -6 est à peu près deux fois le bitrate. L'utilisation générale consiste à choisir la valeur CRF la plus élevée qui offre toujours une qualité acceptable. Si la sortie semble bonne, essayez une valeur plus élevée et si elle semble mauvaise, choisissez une valeur inférieure.

Vous pouvez trouver plus d'informations dans le guide d'encodage x264 .

Vous contrôlez le compromis entre la vitesse de codage vidéo et l'efficacité de compression avec les options -preset . Ceux-ci sont ultrarapide, super rapide, très rapide, rapide, rapide, moyen, lent, plus lent et plus rapide . La valeur par défaut est moyenne . L'option veryslow offre la meilleure efficacité de compression (résultant en une taille de fichier plus petite pour la même qualité), mais elle est très lente – comme le dit le nom.

L'audio sera copié directement du fichier d'entrée vers le fichier de sortie sans aucune modification.