web-dev-qa-db-fra.com

Comment définir un niveau de profil h.264 avec ffmpeg?

J'ai un film (m4v/h.264/AAC) qui fonctionne bien sur mon Mac, mais j'ai récemment découvert qu'il ne serait pas lu sur mon Apple TV3. Après avoir examiné les propriétés de ce fichier vidéo, je constate qu’il a un profil [email protected] mais que le seul suport d’Apple TV3 est jusqu’à [email protected]. Je pense que la seule propriété qui rend cette vidéo incompatible est le débit binaire vidéo maximal. Toutes les autres propriétés donnent l'impression qu'elles sont prises en charge dans [email protected].

Comment puis-je utiliser ffmpeg pour rétrograder cette vidéo à [email protected]?

Ou dois-je plutôt changer la propriété réelle (débit maximum) qui rend cette vidéo 4.1 au lieu de 4.0? Je crains que si je modifie simplement le débit binaire, bien que le fichier soit alors compatible avec [email protected], il reste "étiqueté" comme [email protected] et ne lise donc toujours pas sur mon Apple TV3.

15
Sam

Lors du codage avec libx264, vous pouvez définir le profil H.264 et le niveau avec:

  • -profile:v - l'un des high, main ou baseline (et autres, mais ce n'est pas pertinent ici)
  • -level:v - tel que défini dans l'Annexe A de la norme H.264, par exemple, 4.0.

Par exemple:

ffmpeg -i input.mp4 -c:v libx264 -profile:v high -level:v 4.0 -c:a copy output.mp4

Ici, nous venons de copier le flux audio car il ne sera pas affecté.

La sortie aura le profil et le niveau correct définis dans ses métadonnées. Vous pouvez vérifier cela pendant l'encodage, où x264 dit quelque chose comme:

[libx264 @ 0x7fb26103a000] profile High, level 4.0

MediaInfo peut également vous aider à analyser les détails du conteneur et du codec.

Bien entendu, le réencodage de la vidéo dégradera dans une certaine mesure sa qualité, étant donné que vous appliquez à nouveau une conversion avec perte. Essayez de définir l’option -crf pour influencer le paramètre de qualité constante. La valeur par défaut est 23, tandis que les valeurs comprises entre 18 et 28 sont considérées comme saines. Plus bas signifie une meilleure qualité. Si votre entrée présente un débit binaire pouvant atteindre 65 000 kBit/s, il y a de fortes chances qu'elle paraisse quand même bien après la conversion.

21
slhck

En référence à votre commentaire , essayez cette commande:

ffmpeg -i input.mp4 -map 1 -c:v libx264 -profile:v high -level:v 4.0 -c:a copy \
# copies all global metadata from input.mp4 to output.mp4
-map_metadata 0 \
# copies video stream metadata from input.mp4 to output.mp4
-map_metadata:s:v 0:s:v \
# copies audio stream metadata from input.mp4 to output.mp4
-map_metadata:s:a 0:s:a \
output.mp4

À votre santé

1
Riccardo Volpe