Conversion de la vidéo 1080p en 720p avec le moins de perte de qualité avec ffmpeg

45

J'empile avec mon film de haute qualité: 1080p à 60fps. Le problème est à la traîne en jouant.

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

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

Cependant, la perte de qualité est importante car le débit binaire est passé de 32,3 Mbps à 2,8 Mbps. Comment puis-je spécifier un débit binaire correct pour le flux vidéo et laisser tous les autres flux copiés en parfait état?

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
Atome d'Altera
la source

Réponses:

93

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

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 de la balance sert à redimensionner la vidéo. Vous venez de définir une taille - qui est la hauteur dans cet exemple - et d'utiliser -1pour l'autre dimension. ffmpeg recalculera automatiquement la valeur correcte tout en préservant les proportions.

Qualité contrôlée avec l' -crfoption:

La plage de l'échelle du quantificateur est comprise entre 0 et 51: 0 étant nul, 23 par défaut et 51 le pire possible. Une valeur inférieure est une qualité supérieure et une plage subjectivement saine est comprise entre 18 et 28. Considérez 18 comme étant visuellement sans perte ou presque: il devrait ressembler ou presque à l'entrée, mais ce n'est pas techniquement sans perte.

La plage étant exponentielle, l'augmentation de la valeur CRF +6 correspond à peu près à la moitié du débit tandis que -6 correspond à environ deux fois le débit. L’utilisation générale consiste à choisir la valeur CRF la plus élevée tout en offrant une qualité acceptable. Si la sortie semble bonne, essayez une valeur supérieure et si la valeur est mauvaise, choisissez une valeur inférieure.

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

Vous contrôlez le compromis entre la vitesse d'encodage vidéo et l'efficacité de la compression avec les -presetoptions. Ce sont ultra-rapide, ultra-rapide, très rapide, plus rapide, moyen, lent, plus lent, très lent . La valeur par défaut est moyenne . L' option veryslow offre la meilleure efficacité de compression ( réduisant ainsi la taille du fichier pour la même qualité), mais elle est très lente - comme son nom l'indique.

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

Nikola Dimitrijevic
la source
2
LordNeckbeard - merci pour l'édition. Je n'ai pas eu le temps de taper tous les détails
Nikola Dimitrijevic
1
Votre exemple définit la hauteur sur 720 et non sur la largeur.
Chovy
Pouvez-vous faire cela à l'envers video.stackexchange.com/questions/20439/…
William
2
Pour copier également des sous-titres au format mkv sans conversion, vous pouvez ajouter -scodec copy.
Casper
2
Je pense que pour obtenir 720p, vous devez définir la largeur à 1280 c'est-à-dire pas -vf scale=-1:720mais -vf scale=1280:-1.
cdlvcdlv
0

Si vous souhaitez mettre à l'échelle une taille différente, il existe certaines limitations concernant les dimensions de mise à l'échelle FFMPEG. Il n'accepte pas chaque hauteur. Voici une petite liste des meilleures recommandations pour les dimensions.

Les codecs vidéo fonctionnent mieux lorsque la largeur et la hauteur en pixels sont des multiples de 16. Bien que vous puissiez utiliser n’importe quelle largeur et hauteur dans vos paramètres d’encodage, des dimensions non optimales peuvent entraîner une qualité d’image médiocre et une cadence de prise de vue réduite. Pour une qualité d'image et une lecture optimales, vous devez utiliser des dimensions de largeur et de hauteur multiples de 16; votre meilleur choix suivant est un multiple de 8, puis un multiple de 4.

Recommended width and height for videos with 16:9 aspect ratios:

Best Choice:     2nd Best:        3rd Best:
Multiples of 16  Multiples of 8   Multiples of 4
1920 x 1080      1792 x 1008      1856 x 1044
1280 x 720       1152 x 648       1216 x 684
1024 x 576        896 x 504       1088 x 612
 768 x 432        640 x 360        960 x 540
 512 x 288        384 x 216        832 x 468
 256 x 144        128 x 72         704 x 396
                                   576 x 324
                                   448 x 252
                                   320 x 180
                                   192 x 108
Ewald Bos
la source