Lorsque j'essaie de télécharger des vidéos capturées depuis mon iPhone dans mon application, le serveur effectue une conversion de .mov à .mp4 afin qu'il puisse être lu sur d'autres plates-formes. Cependant, le problème est que lorsque je tire la vidéo (en orientation portrait) et qu’elle est convertie (avec ffmpeg) puis lue depuis le serveur, elle semble faire l’objet d’une rotation. Une idée?
Selon la version de ffmpeg que vous possédez et comment elle est compilée, l’un des éléments suivants devrait fonctionner:.
ffmpeg -vfilters "rotate=90" -i input.mov output.mp4
...ou...
ffmpeg -vf "transpose=1" -i input.mov output.mp4
FFMPEG a modifié le comportement par défaut pour faire pivoter automatiquement les sources vidéo avec les métadonnées de rotation en 2015 . Cela a été publié en tant que v2.7.
Si votre version de ffmpeg est v2.7 ou ultérieure, mais que vos métadonnées de rotation ne sont pas respectées, il est probable que vous utilisiez une rotation personnalisée basée sur des métadonnées. Ainsi, la même logique sera appliquée deux fois, modifiant ou annulant la rotation.
En plus de supprimer votre rotation personnalisée (recommandé), il existe une option pour désactiver la rotation automatique avec -noautorotate
.
ffmpeg -noautorotate -i input.mp4
...
Cela fonctionnera également dans certaines versions plus anciennes.
Ce que vous pouvez également faire est de supprimer les métadonnées spécifiques à QuickTime lorsque vous faites pivoter le .mov
. . Ainsi, la rotation de la vidéo est identique, dans VLC et QuickTime.
ffmpeg -i in.mov -vf "transpose=1" -metadata:s:v:0 rotate=0 out.mov
Voici la documentation sur l'option -metadata
(from http://ffmpeg.org/ffmpeg.html ):
-metadata[:metadata_specifier] key=value (output,per-metadata)
Définissez une paire clé/valeur de métadonnées.
Un métadata_specifier facultatif peut être utilisé pour définir des métadonnées sur des flux ou des chapitres. Voir la documentation -map_metadata pour plus de détails.
Cette option remplace les métadonnées définies avec -map_metadata. Il est également possible de supprimer des métadonnées en utilisant une valeur vide.
Par exemple, pour définir le titre dans le fichier de sortie:
ffmpeg -i in.avi -metadata title="my title" out.flv
Pour définir la langue du premier flux audio:
ffmpeg -i INPUT -metadata:s:a:1 language=eng OUTPUT
Par souci d'exhaustivité, la raison en est que les iPhones capturent uniquement la vidéo dans une orientation fixe. L'orientation mesurée est ensuite enregistrée dans des métadonnées spécifiques à Apple.
En conséquence, Quicktime Player lit les métadonnées et fait pivoter la vidéo dans la bonne orientation pendant la lecture, contrairement à d'autres logiciels (VLC, par exemple) et l'affiche comme étant orientée dans les données de codec réelles.
C'est pourquoi rotate=90
(ou vflip
, ou transpose
, ou etc.) fonctionnera pour certaines personnes, mais pas pour d'autres. Selon la manière dont l'appareil photo est tenu pendant l'enregistrement, la rotation nécessaire peut être de 90, 180 ou même 270 degrés. Sans lire les métadonnées, vous devinez simplement combien de rotations sont nécessaires et le changement qui corrige une vidéo échouera pour une autre.
Utilisez le filtre vflip
ffmpeg -i input.mov -vf "vflip" output.mp4
Rotate ne fonctionnait pas pour moi et transpose = 1 faisait une rotation de 90 degrés
Alors, moi aussi, je me suis heurté à ce problème et voici mon 0,02 $:
1.) Certaines vidéos ont des métadonnées d’orientation/rotation, d’autres pas: MTS (Sony AVHCD) ou les AVI que j’ai - NE PAS avoir de balise d’orientation. MOV et MP4 (ipad/iphone ou samsung galaxy note2).
you can check the setting via 'exiftool -Rotation file'.
My videos often have 90 or 180 as the rotation.
2.) ffmpeg - quelle que soit la page de manuel avec la balise metadata, cela ne semble jamais JAMAIS la définir dans le fichier de sortie. - le numéro de rotation est TOUJOURS '0'. il le signale correctement dans la sortie - mais il n'est jamais réglé correctement pour être signalé par exiftool. - Mais bon - au moins c'est là et toujours 0.
3.) angles de rotation: Si vous voulez faire pivoter +/- 90: transposez = 1 dans le sens horaire de 90, 2 ccw Maintenant si vous avez besoin de 180 degrés - ajoutez simplement ce filtre DEUX FOIS. rappelez-vous - c'est une chaîne de filtrage que vous spécifiez. :-) - voir plus bas.
4.) faites pivoter puis redimensionnez: Ceci est délicat, car vous entrez rapidement dans les violations de format de sortie MP4. Supposons que vous avez une résolution de 1920x1080 MOV. .____.] puis on redimensionne à -1: 720 -> 1080 * (720/1920) = 405 horiz Et 405 horizontal n'est PAS divisible par 2 - ERREUR. corrigez cela manuellement. CORRIGER CECI automatiquement - nécessite un peu de travail sur Shell-script.
5.) échelle puis faire pivoter: Vous pouvez le faire de cette façon - mais vous vous retrouvez avec 720x1280. beurk. Mais l'exemple de filtre ici serait: "-vf yadif = 1, scale = -1: 720, transpose = 1" Ce n'est tout simplement pas ce que je veux - mais pourrait fonctionner assez bien.
En résumé: - NOTE - 'balise de rotation intentionnellement incorrecte, pour montrer - elle ne s'affichera pas AT ALL dans la sortie! Ceci prendra l'entrée - et faites-le pivoter de 180 degrés , ALORS RESCALER - réinitialiser l’étiquette de rotation. - typiquement iphone/ipad2 peut créer du matériel tourné à 180 degrés. vous pouvez simplement laisser '-metadata Rotation = x' en dehors de la ligne ...
/ usr/bin/ffmpeg -i input-movie.mov -timestamp 2012-06-23 08:58:10 -map_metadata 0: 0 -metadata Rotation = 270 -sws_flags lanczos -vcodec libx264 -x264opts me = umh -b 2600k -vf yadif = 1, transposer = 1, transposer = 1, échelle = 1280: 720 -f mp4 -y output-movie.MP4
J'ai plusieurs appareils - comme un boîtier décodeur, ipad2, note2 et je convertis TOUTES mes données d'entrée (que ce soit au format MP4, MOV, MTS, AVI) en 720p MP4, et jusqu'à présent, TOUTES les vidéos résultantes sont lues correctement (orientation, etc.). son) sur chaque dev.
J'espère que ça aide.
Bien que le sujet soit ancien. J'espère que cela aidera quelqu'un:
Obtenir la dernière version de ffmpeg: https://www.ffmpeg.org/download.html
La commande qui a fonctionné pour moi (retourner 180 degrés):
ffmpeg -noautorotate -i input.mp4 -filter:v "rotate=PI" output.mp4
Lorsque les degrés sont déterminés par -filter:v "PI/180*degrees"
par exemple -filter:v "45*PI/180"
pour 45 degrés
Une bonne explication est ici https://superuser.com/questions/578321/how-to-rotate-a-video-180-with-ffmpeg
J'ai filmé la vidéo avec Ipad3 et elle a été orientée à l'envers, ce qui, je suppose, est la situation habituelle de tous les appareils Apple dans certaines versions. En plus de cela, le fichier MOV de 3 minutes (1920x1090) prenait environ 500 Mo, ce qui ne le rend pas disponible pour un partage facile. Je devais le convertir en MP4 et analyser tous les threads trouvés sur stackoverflow: voici la dernière chaîne de code pour ffmpeg que j'ai utilisée (ffmpeg ver. 2.8.4):
ffmpeg -i IN.MOV -s 960x540 -metadata:s:v rotate="0" -acodec libmp3lame OUT.mp4
Je suppose que vous pouvez simplement laisser '-metadata: s: v rotate = "0"' si vous n'avez pas besoin du redimensionnement ni du changement de codec audio. Notez que si vous redimensionnez la vidéo, la largeur et la hauteur doivent être entièrement divisées en 4.
Pour inclure dans des pages Web mes vidéos au format portrait de iPhone, je viens de découvrir la recette suivante pour obtenir des fichiers .mp4 en mode portrait.
Étape 1: dans QuickTime Player, exportez votre fichier au format 480p (je suppose que le format 720p ou 1080p fonctionnerait également). Vous obtenez à nouveau un fichier .mov.
Étape 2: Prenez le nouveau fichier dans QT Player et exportez-le vers «iPad, iPhone…». Vous obtenez un fichier .m4v.
Étape 3: J’utilise Miro Video Converter, mais il est probable que tout convertisseur facilement disponible fonctionnera pour obtenir votre fichier .mp4.
Fonctionne comme un charme (à long souffle).