Je cherche un moyen de faire pivoter les vidéos tournées avec mon Nexus 4 sur mon système Debian Wheezy. Les vidéos sont tournées en mode portrait et je voudrais les faire pivoter en mode paysage. De préférence, la rotation est commandée par la ligne de commande.
J'ai trouvé plusieurs questions précédentes qui suggèrent une bonne solution, mais je n'arrive pas à réussir à la faire fonctionner.
Pour commencer, il y avait cette question: Rotation de vidéos avec FFmpeg
Mais cela indique que ffmpeg est obsolète et que je devrais utiliser avconv. J'ai trouvé cette question détaillant la voie à suivre. https://askubuntu.com/questions/269429/how-can-i-rotate-video-by-180-degrees-with-avconv
Cela m'a fait utiliser la commande suivante:
avconv -i original.mp4 -vf "transpose=1" -codec:v libx264 -preset slow -crf 25 -codec:a copy flipped.mp4
Cependant, ceci est laborieusement lent (le dernier test m'a pris plus de 6 heures pour moins de 3 minutes de métrage) et ne donne pas un film lisible. Je reçois également une erreur lors de la consignation de la sortie qui indique Mb Rate> level limit.
Y at-il un problème ici avec le ré-encodage? Devrais-je d'abord ré-encoder les vidéos de mon téléphone sur un autre, un encodage plus "réalisable" avant d'appliquer les rotations? Ou est-ce que je manque un autre point important?
Si vous souhaitez simplement modifier les métadonnées de manière à ce que les lecteurs multimédia prenant en compte l'indicateur lisent le fichier pivoté, essayez l'une des solutions suivantes:
ffmpeg -i input.mp4 -c copy -metadata:s:v:0 rotate=90 output.mp4
comme trouvé ailleurs sur stackoverflow .
Rotation = 0 corrigé mon problème. J'ai commencé à enregistrer des vidéos en mode portrait, j'ai réalisé mon erreur et immédiatement transformé mon téléphone en paysage pour continuer l'enregistrement. Mon iphone avait marqué la vidéo comme portrait pour toute la vidéo.
ffmpeg -i input.mp4 -c copy -metadata:s:v:0 rotate=0 output.mp4
Fixe le.
FFmpeg
et programmes similaires change les métadonnées même avec le -map_metadata
option. exiftool
peut lire la matrice de rotation et l'indicateur de rotation, mais ne peut pas l'écrire.
Pour obtenir une véritable rotation sans perte (y compris les métadonnées), je ne pouvais pas trouver de solution. J'ai donc saisi un éditeur hexadécimal (par exemple, HxD ) et analysé les fichiers vidéo faisant l'objet d'une rotation.
vide
pour trouver les métadonnées de la piste vidéotrak...\tkhd
@
signe (HEX 40)pas de rotation:
00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00
40
180 °:
FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00
FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00
40
90 ° cw:
00 00 00 00 00 01 00 00 00 00 00 00 FF FF 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
40
90 ° ccw:
00 00 00 00 FF FF 00 00 00 00 00 00 00 01 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
40
Modifiez le fichier selon vos besoins et faites-le pivoter auprès des lecteurs prenant en charge le drapeau de rotation (la plupart des lecteurs actuels le font).
Si votre vidéo contient de l'audio stéréo, cette option n'est évidemment pas activée. Par conséquent, si vous souhaitez que le son corresponde à la rotation de la vidéo (180 °), vous devez activer les canaux gauche et droit.
Vous avez abordé plusieurs points dans votre question:
avprobe original.mp4
afin qu'il puisse être vérifié.Cette réponse est simplement un résumé des commentaires fournis par LordNeckbeard.
La rotation sans réencodage n'est possible que si:
Pour bien comprendre les étapes nécessaires à cela, il faut commencer par lire ou au moins survoler cette question:
Quelles sont les différences et les similitudes entre ffmpeg, libav et avconv?
Résumé: avconv est un fork de ffmpeg, le responsable Debian a choisi avconv, vous devez compiler le ffmpeg correct à partir du source.
La prochaine étape serait de compiler le ffmpeg correct à partir de la source, comme détaillé ici:
Guide de compilation de ffmpeg pour Debian
La dernière étape consiste à utiliser les commandes trouvées dans d’autres publications:
Comment retourner une vidéo à 180 ° (verticale/à l'envers) avec FFmpeg? ou Rotation de vidéos avec FFmpeg
Résumé: ffmpeg -vfilters "rotate = 90" -i input.mp4 output.mp4