Des tricheurs et des préréglages-paramètres qui fonctionnent réellement avec FFmpeg 1.0?

28

J'ai essayé un certain nombre de «feuilles de triche» disponibles ailleurs, mais elles sont presque toutes obsolètes et ne fonctionneront tout simplement PAS avec la dernière version de FFMpeg.

Quelqu'un peut-il m'indiquer les paramètres qui fonctionneront avec le dernier FFMpeg?

Je suis principalement intéressé par les codecs suivants

H.264, préréglages de moyenne faible et haute qualité

aussi bien que

ProRes, préréglages de faible moyenne et haute qualité

Bachalo
la source

Réponses:

49

FFmpeg n'inclut plus les préréglages et les profils basés sur des fichiers texte pour libx264, c'est-à-dire ce que vous avez utilisé avec l' -vpreoption. Celles - ci ont été amortis et retirés en faveur de l' accès aux paramètres prédéfinis x264 réels, profils (et airs) avec le -preset, -profile:vet les -tuneoptions. Les anciens fichiers texte n'émulaient que les préréglages et profils x264 officiels et, en raison de plusieurs limitations, ne pouvaient pas offrir toutes les fonctionnalités du nouveau système. Il est également beaucoup plus facile à entretenir.

De plus, de nombreux encodeurs ont leurs propres options distinctes; également appelé «options privées». Vous devrez examiner les options d'encodeur audio et vidéo pour les codecs courants dans la documentation en ligne FFmpeg, ou vérifier la sortie de ffmpeg -h fullpour une liste complète des options prises en charge. Par exemple, x264 répertorie ses options sous libx264 AVOptionsdans la sortie d'aide complète.

Si votre ffmpeg prend en charge, -presetaucun préréglage de fichier texte ne doit être utilisé et FFmpeg n'est plus fourni avec d'autres préréglages iPod non standard. C'est une idée fausse que les préréglages de texte peuvent simplement être copiés de n'importe où et utilisés avec n'importe quel ffmpeg. Ceci est faux et entraînera une rupture.


Fondamentalement, les préréglages vous ont permis de faire les choses suivantes:

Qualité de contrôle

La qualité est contrôlée soit en spécifiant un débit binaire via -b:v(pour la vidéo) ou -b:a(pour l'audio), soit en spécifiant toute autre méthode de codage que le codec peut prendre en charge.

Pour x264, il existe différentes méthodes d'encodage, la méthode Constant Rate Factor étant la plus sophistiquée. Il en résulte un débit binaire variable, mais globalement de bonne qualité en un seul passage. Les valeurs CRF varient de 0 à 51, mais les valeurs raisonnables se situent entre 19 et 26, selon votre source et la qualité que vous souhaitez. 23 est par défaut, vous pouvez donc par exemple choisir 18 pour "haute qualité" et 28 pour "basse qualité", quoi que cela signifie pour vous.

ffmpeg -i input.mp4 -c:v libx264 -crf 23 output.mp4

x264 a également d'autres méthodes de codage , mais cela est hors de portée ici.

Contraindre le profil H.264

Ces profils définissent un ensemble de fonctionnalités que l'encodeur peut utiliser pour correspondre aux capacités d'un certain décodeur. Dans FFmpeg récent, utilisez la syntaxe suivante pour spécifier un profil, où pourrait se trouver le profil baseline, mainou high:

ffmpeg -i input.mp4 -c:v libx264 -profile:v baseline output.mp4

Pour plus d'informations et quand utiliser un profil, voir: Quelles sont les différences entre les profils H.264?

Choisissez un encodage x264 preset

Ces préréglages affectent la vitesse d'encodage. L'utilisation d'un préréglage plus lent vous donne une meilleure compression, ou une qualité par taille de fichier, tandis que des préréglages plus rapides vous donnent une pire compression. En général, vous devez simplement utiliser le préréglage que vous pouvez vous permettre d'attendre. Les préréglages peuvent être ultrafast, superfast, veryfast, faster, fast, medium(par défaut), slowet veryslow. Voici un exemple:

ffmpeg -i input.mp4 -c:v libx264 -preset slow output.mp4

Encoder une vidéo sans perte

Ceci est possible en spécifiant un CRF de 0, utilisez donc simplement -crf 0:

ffmpeg -i input.mp4 -c:v libx264 -crf 0 output.mp4

Enfin, parlons rapidement de ProRes. ProRes accepte soit un débit fixe avec -b:v, soit vous pouvez spécifier le profil, qui doit être une valeur comprise entre 0 et 3 , où les débits sont choisis en fonction du profil. Plus haut signifie mieux:

ffmpeg -i input.mp4 -c:v prores -profile:v 0 output.mov

Le wiki ffmbc suggère que les noms de profils peuvent être utilisés - cela échoue cependant dans FFmpeg 1.0.

slhck
la source
Que dois-je faire pour réduire les chances d'échec de la conversion, cela se produit au hasard, parfois cela ne se produit pas
FlyingAtom
@FlyingAtom Je n'ai pas encore entendu parler de "Conversion Fail". Si vous avez une question spécifique avec un problème reproductible, veuillez poser une nouvelle question: superuser.com/questions/ask
slhck
Alors, que finiriez-vous effectivement si tout ce que vous fournissiez était ffmpeg -i input.mp4 -c:v libx264 output.mp4? crf: 23 et preset: moyen?
Drazen Bjelovuk
1
@Drazen Oui, c'est vrai.
slhck
À votre santé! -------
Drazen Bjelovuk
20

J'ai fait un test dans lequel j'ai transcodé (en utilisant le codage libx264 .mp4) une vidéo de haute qualité à partir d'un caméscope Sony en utilisant la gamme complète de valeurs prédéfinies (sauf le placebo) sur une gamme de valeurs CRF (18, 21, 24 et 27 ). Je voulais savoir ce qui me donnerait la meilleure combinaison de vitesse d'encodage, de qualité de sortie et de taille de fichier.

Pour chaque valeur CRF, j'ai donné à chaque opération de transcodage un score pour son temps de codage (par exemple, pour CRF = 18, le temps ultra-rapide de 5,7 secondes de la valeur prédéfinie a obtenu un score de 1,0, le temps très lent de 162 secondes a obtenu un 0, avec tous les autres scores échelonnés entre les deux). J'ai calculé les scores de taille du fichier de sortie de la même manière, bien sûr, en donnant au plus petit fichier le meilleur score. J'ai ensuite ajouté les deux scores pour un score vitesse / taille "combiné".

Pour chacune des quatre valeurs CRF, le préréglage «très rapide» a été le vainqueur haut la main, avec des scores presque parfaits de 1,94 (pour CRF 18 et 21), 1,96 (CRF 24) et 1,97 (CRF 27). Je trouve très curieux que "veryfast" produise à chaque fois presque la plus petite taille de fichier , perdant seulement à "veryslow" et jamais de beaucoup.

Une différence que j'ai remarquée parmi les différentes valeurs prédéfinies était que le système d'exploitation (Windows 7) me donnerait des vignettes différentes. Les préréglages les plus rapides afficheraient une miniature plusieurs secondes dans la vidéo, où les miniatures des préréglages les plus lents refléteraient la ou les images d'ouverture de la vidéo. Ce n'est pas important pour moi; ce que j'ai appris, c'est que "-preset veryfast" semble être un choix facile.

Voici mes résultats (sous forme d'image instantanée d'une feuille de calcul Excel):
Excel instantané

Voici la feuille de calcul Excel en texte csv:

CRF,Preset,Seconds,score,MB,score,totalscore
18,1_ultrafast,5.7,1.00,59.5,0.09,1.09
18,2_superfast,8.4,0.98,62.3,0.00,0.98
18,3_veryfast,10.8,0.97,30.9,0.98,1.94
18,4_faster,16.0,0.93,33.5,0.89,1.83
18,5_fast,24.0,0.88,36.8,0.79,1.68
18,6_medium,29.1,0.85,34.9,0.85,1.70
18,7_slow,48.1,0.73,33.9,0.88,1.61
18,8_slower,84.9,0.49,33.0,0.91,1.40
18,9_veryslow,162.0,0.00,30.1,1.00,1.00
21,1_ultrafast,5.7,1.00,38.0,0.00,1.00
21,2_superfast,7.9,0.98,35.0,0.15,1.14
21,3_veryfast,10.0,0.97,19.0,0.97,1.94
21,4_faster,14.2,0.94,21.0,0.87,1.80
21,5_fast,19.9,0.89,23.0,0.77,1.66
21,6_medium,24.6,0.86,22.0,0.82,1.67
21,7_slow,43.1,0.72,21.0,0.87,1.58
21,8_slower,69.8,0.51,20.5,0.89,1.41
21,9_veryslow,137.3,0.00,18.4,1.00,1.00
24,1_ultrafast,5.5,1.00,24.9,0.00,1.00
24,2_superfast,7.5,0.98,21.4,0.27,1.25
24,3_veryfast,9.3,0.97,12.0,0.99,1.96
24,4_faster,13.2,0.93,14.0,0.84,1.77
24,5_fast,17.4,0.90,15.0,0.76,1.66
24,6_medium,21.0,0.87,14.4,0.81,1.67
24,7_slow,37.3,0.72,14.0,0.84,1.56
24,8_slower,62.2,0.51,13.0,0.92,1.42
24,9_veryslow,121.1,0.00,11.9,1.00,1.00
27,1_ultrafast,5.5,1.00,16.8,0.00,1.00
27,2_superfast,7.4,0.98,13.6,0.38,1.36
27,3_veryfast,9.0,0.97,8.4,1.00,1.97
27,4_faster,12.6,0.93,10.1,0.80,1.73
27,5_fast,15.8,0.90,10.4,0.76,1.66
27,6_medium,18.8,0.87,10.0,0.81,1.68
27,7_slow,34.1,0.73,9.8,0.83,1.56
27,8_slower,59.6,0.48,9.0,0.93,1.41
27,9_veryslow,109.7,0.00,8.4,1.00,1.00
Ted W
la source
3
Je sais que les options de mise en forme de Super User sont médiocres, mais cela pourrait être utile si vous publiez les données sous forme de texte - éventuellement en utilisant la mise en forme du code.
Scott
1
Fascinant. C'est aussi plus rapide sur ma machine. Merci!
joeytwiddle
1
Je dois admettre que j'ai regardé vos résultats avec suspicion, mais j'ai répété le test et obtenu des résultats similaires, en utilisant ffmpeg version 3.3.2-1 sur un clip de 2 min 1080p. En fait, très rapide a généré la plus petite taille de fichier 60% du temps, et arrive en deuxième position très lentement 40% du temps (mais pas beaucoup). À partir de maintenant, j'utiliserai veryfast pour tous mes encodages avec une valeur CRF assez faible (18, 19, 20) car veryfast n'était que un peu plus lent avec les valeurs CRF inférieures qu'à celles plus élevées. Merci, vous m'avez fait gagner beaucoup de temps. Données brutes et script en commentaire ci-dessous.
mattst
1
Suite du commentaire ci-dessus ... Voici mes données brutes - CRF 18 à 27 et le script bash Linux / UNIX que j'ai écrit pour exécuter les encodages (au cas où quelqu'un souhaiterait exécuter un test similaire).
mattst
1
Voici quelques excellents articles de blog sur les sujets, avec des tests effectués pour x264 et x265 (les résultats sont, on peut le prévoir, très différents pour chacun)
forresthopkinsa