2 votes

atteindre un débit vidéo constant en utilisant ffmpeg

Nous utilisons ffmpeg et un script pour le transcodage et nous voulons faire des fichiers batch que nous pouvons utiliser pour le transcodage.

Par exemple, j'utilise un paramètre appelé video_kbit et si j'écris en 30000, il devrait atteindre 30 Mbit. Bien sûr, si j'utilise 6000 comme paramètre, il devrait atteindre 6 MBit aussi, donc j'ai un script qui atteint tous les bitrates vidéo que je veux.

Dans l'état actuel de mes paramètres, je n'atteins que 18,1 Mbit. Ce n'est que lorsque j'utilise 15000 comme paramètre que j'atteins mon objectif pour un débit vidéo constant de 15 MBit. Si j'utilise 8000 comme paramètre, j'obtiens 10,1 MBit. Donc, en dessous de 15000, j'obtiens un débit supérieur et au-dessus de 15000, j'obtiens un débit inférieur à celui que je souhaite.

Mes préréglages sont :

ffmpeg -threads "4" -i "$2"  -f mp4 -c:v libx264 -crf 1 \
-bufsize 30000k -maxrate ${FC_PARAM_video_kbit}k \
-acodec libfaac -ac 2 -ab ${FC_PARAM_audio_kbit}k -ar 44100 \
-pix_fmt yuv420p -vf scale=${FC_PARAM_width}:${FC_PARAM_height} -y "$3"

Et j'utilise ces paramètres :

FC_PARAM_video_kbit = 30000
FC_PARAM_audio_kbit = 192
FC_PARAM_width = 1920
FC_PARAM_height = 1080

J'ai essayé d'utiliser un bufsize plus élevé et d'utiliser profile:v et des réglages de niveau, mais rien ne m'a permis de m'approcher du débit vidéo constant de 30000 Mbit.

Avez-vous des idées ou des suggestions pour une meilleure façon d'atteindre mon objectif ?

2voto

slhck Points 209720

Fixer le CRF (a mode de qualité constante ) et un débit binaire vidéo en même temps n'a aucun sens. Vous voulez l'un ou l'autre, exclusivement.

Pour atteindre un débit binaire fixe, vous devez définir minrate , maxrate y b:v à la même valeur. Votre script ressemblerait à quelque chose comme ceci (mais idéalement vous changeriez bufsize également) :

ffmpeg -threads "4" -i "$2" -c:v libx264 \
-bufsize 30000k -maxrate ${FC_PARAM_video_kbit}k \
-minrate ${FC_PARAM_video_kbit}k -b:v ${FC_PARAM_video_kbit}k \
-c:a libfaac -ac 2 -b:a ${FC_PARAM_audio_kbit}k -ar 44100 \
-pix_fmt yuv420p -filter:v scale=${FC_PARAM_width}:${FC_PARAM_height} -y "$3"

Mais bon, est-ce que ça a un sens ? La question est de savoir ce que vous avez réellement besoin d'obtenir. Il est rarement utile de forcer un débit binaire élevé si cela n'apporte pas une meilleure qualité visuelle (et seulement des fichiers plus volumineux). Vouloir 30 MBit/s pour une vidéo x264 - même s'il s'agit d'un contenu HD 1080p - me semble un peu exagéré.*

x264 est capable de fournir une très bonne qualité si vous définissez un CRF suffisamment bas. Tout ce qui est inférieur à 17 ou 18 devrait être imperceptible en termes de distorsion visuelle, et un CRF de 0 signifie un encodage sans perte. Fixez plutôt le CRF à une valeur qui vous semble suffisamment bonne et ne vous préoccupez pas du débit binaire. Il s'agit d'une option que vous pouvez appliquer à des lots de vidéos pour obtenir une qualité de sortie similaire.

Enfin, n'oubliez pas que si, par exemple, une seconde de vidéo peut être compressée sans perte (c'est-à-dire avec CRF 0) en seulement 10 MBit, le fait de régler le débit binaire sur 30 MBit/s ne forcera pas cette partie de la vidéo à consommer réellement 30 MBit. x264 ne "crée" pas d'informations juste pour gonfler la sortie à un débit binaire demandé. Il restera à 10 MBit.

* Si vous souhaitez archiver ou distribuer la vidéo pour un traitement ultérieur, choisissez un codec intermédiaire comme ProRes ou DNxHD.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X