web-dev-qa-db-fra.com

Puis-je définir le champ de rotation d'un flux vidéo avec FFmpeg?

J'ai un fichier vidéo. Je l'ouvre avec l'utilitaire MediaInfo et je peux voir un flux vidéo dans ce fichier ayant l'attribut Rotation 90 (avec d'autres attributs tels que CodecID, bitrate, etc.).

Maintenant, j'ai un autre fichier vidéo qui n'a pas cet attribut Rotation 90, il n'a pas du tout l'attribut Rotation.

Puis-je utiliser ffmpeg.exe pour qu'il produise un fichier de sortie avec l'attribut Rotation 90 ajouté et sans autres modifications? Je ne veux pas vraiment faire de transformation, je veux juste définir l'attribut Rotation.

J'ai essayé le -metadata option en vain.

32

Cela fonctionne avec FFmpeg récent:

ffmpeg -i input.mp4 -c copy -metadata:s:v:0 rotate=90 output.mp4

Cela copie de flux les flux binaires, donc aucun encodage n'est effectué. Seules les métadonnées du premier flux vidéo (v:0) est modifié ici et le lecteur affichera la vidéo en rotation. (Tous les joueurs ne le supporteront pas.)

Notes complémentaires:

  • Si vous voulez faire pivoter "physiquement" la vidéo, vous devez tiliser le filtre transpose . Le filtrage nécessitera un nouveau codage, vous devrez donc supprimer -c copy.

  • Si vous omettez -c copy, et que vous souhaitez encoder au lieu de seulement recomposer, alors ffmpeg fera automatiquement pivoter la vidéo s'il existe des métadonnées de rotation existantes. Vous pouvez désactiver ce comportement avec -noautorotate.

69
slhck