web-dev-qa-db-fra.com

FFMPEG - Comment copier | Extraire des paramètres de codage du fichier multimédia existant?

Je souhaitais pouvoir faire ce plusieurs fois maintenant alors je demande.

Si j'ai un fichier vidéo ou audio existant, ffmpeg, mplayer et d'autres lecteurs multimédia peuvent détecter au moins certaines des "probreties" telles que conteneur, codec et bittrate utilisés, probablement diverses qualité et codage Paramètres spécifiques, etc.

Comment puis-je extraire ces paramètres d'un fichier existant afin de les utiliser (directement) pour le codage avec FFMPEG?

Par exemple, j'ai eu une vidéo mkv vidéo codée avec x264 Avec certains paramètres et un autre fichier avi non compressé. Je souhaite "copier" les paramètres de codage utilisés dans le fichier X264 MKV pour transcoder l'AVI avec les paramètres id.

Remarque: Je cherche un moyen qui devrait inclure aucun travail humain avec "traduire" les paramètres d'un décodeur au codeur. C'est bon si j'ai besoin d'extraire les paramètres en premier et de l'enregistrer quelque part, mais je voudrais pouvoir simplement alimenter les options de lecture à une ligne de commande ou préréglage | fichier de configuration pour FFMPEG.

19
n611x007

Il n'y a pas de moyen automatique de le faire. Vous devez regarder les paramètres du fichier d'origine et les appliquer dans le fichier de sortie.

Dans la plupart des cas, ceux-ci seront les suivants:

  • Format de conteneur (MP4, MKV, ...)
  • CODEC VIDEO ET AUDIO (H.264, H.265, ...)
  • Spécifique audio:
    • Nombre de canaux audio
    • Taux d'échantillonnage audio
    • Bitrate audio
  • Spécifique vidéo:
    • Profil et niveau (pour assurer la compatibilité, voir ICI )
    • Limitations de débit maximum (par exemple pour H.264 )
    • Résolution vidéo maximale, changement via -filter:v scale ou alors -s:v
    • Framerer, changer via -filter:v fps-r
    • Susmampling Chroma, changement via -pix_fmt (par exemple., -pix_fmt yuv420p devrait vous donner la meilleure compatibilité)
    • Taille du GOP (distance entre les cadres IDR), définie via -g
    • Autres paramètres de codage spécifiques

Mais même si vous obtenez bien, certains appareils peuvent nécessiter des informations spécifiques et propriétaires intégrées au Bitstream.


Quant à la tâche spécifique d'utiliser x264, cela ne va pas être trivial. Je ne suis pas au courant d'un seul script qui s'occuperait de ces tâches, qui sont généralement faits manuellement. Pour le plus d'informations sur les paramètres de codage, sur UNIX/Linux ou OS X, vous pouvez utiliser mediainfo avec des trucs de bash.

Par exemple, pour une vidéo codée x264 dans un fichier MP4:

mediainfo input.mp4 | grep "Encoding settings" | cut -d':' -f2- | tr '/' '\n' | sed 's/ //'

Cela produira une liste des options x264:

cabac=1
ref=3
deblock=1:-1:-1
analyse=0x3:0x113
me=hex
subme=7
psy=1
…

Vous pouvez ensuite passer manuellement ces options sur le binaire X264.

Si vous passez par FFMPEG, c'est un peu plus compliqué, car toutes les options de X264 ne peuvent pas ou ne devraient être mappées comme ceci. Notez que souvent une spécification de préréglage, de syntonisation et de profil simples (comme on le voit dans x264 --fullhelp et le Guide de codage X264 ) et la spécification du niveau du CRF suffit.

Et cela ne considère même pas l'audio, où heureusement, il n'y a pas beaucoup d'options.

11
slhck