Rotation des vidéos mp4 sans réencodage

je cherche un moyen de faire tourner des vidéos tournées avec mon Nexus 4 sur mon système Debian Wheezy. Les vidéos sont prises en mode portrait et je voudrais les faire pivoter en mode paysage. De préférence, la rotation s'effectue en ligne de commande.

j'ai trouvé plusieurs questions précédentes qui font allusion à une bonne solution mais je ne semble pas arriver à le faire fonctionner.

pour commencer il y avait cette question: vidéos tournantes avec FFmpeg

mais il indique que ffmpeg est périmé et que je devrais utiliser avconv. J'ai trouvé cette question détaillant la façon d'aller de l'avant. 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, c'est laborieusement lent (dernier test m'a pris plus de 6 heures pour moins de 3 minutes d'images) et n'entraîne pas un film jouable. J'obtiens aussi une erreur dans la sortie de journalisation qui indique taux Mb > limite de niveau.

y a-t-il un problème avec le réencodage ? Dois-je d'abord ré-encoder les vidéos de mon téléphone vers un autre encodage plus "fonctionnel" avant d'appliquer les rotations? Ou est-ce que je manque un autre point important ?

Merci d'avance

60
demandé sur Community 2014-07-30 11:56:36

5 réponses

si vous voulez juste changer les métadonnées de telle sorte que les médiaplayeurs qui considèrent le drapeau jouer le fichier tourné, essayez quelque chose comme:

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

tel que trouvé ailleurs sur stackoverflow .

82
répondu ruediger05 2017-05-23 11:54:58

Rotation=0 fixe mon problème. J'ai commencé à enregistrer la vidéo en mode portrait, j'ai réalisé mon erreur et j'ai immédiatement tourné mon téléphone vers landscape pour continuer à enregistrer. Mon iphone avait marqué la vidéo comme portrait pour l'ensemble de la vidéo.

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

L'a réparé.

41
répondu Mangor 2017-08-06 19:48:20

FFmpeg et d'autres programmes semblables modifier les métadonnées même avec le -map_metadata option. exiftool peut lire la matrice de rotation et le drapeau de rotation, mais ne peut pas l'écrire.

Pour obtenir de vrais lossless (incl. metadata), Je n'ai pas pu trouver de solution, donc j'ai pris un éditeur hex (par exemple HxD ) et j'ai analysé les fichiers vidéo tournés.

véritable rotation sans perte de MP4:

  • open mp4 avec un éditeur hexadécimal et de la recherche pour vide pour trouver les métadonnées de la vidéo
  • quelques lignes ci-dessus (pour mes fichiers principalement 9, parfois 12) Vous devriez voir trak...\tkhd
  • entre les deux il doit y avoir un @ signe (HEX 40)
  • dans les deux lignes avant elle la matrice de rotation est stockée
  • 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
    
  • de 90° à droite:

    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 
    
  • de 90° à gauche:

    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
    

modifier le fichier que vous avez besoin, et il doit être tourné dans les joueurs qui soutiennent le drapeau de rotation (la plupart des joueurs actuels le font).

dans le cas où votre vidéo contient audio stéréo, ce n'est évidemment pas commuté, donc dans le cas où vous voulez que le son corresponde à la rotation vidéo (180°), vous devez changer les canaux gauche et droite.

7
répondu aXeL-HH 2018-03-28 12:48:53

il y a plusieurs choses que vous avez abordées dans votre question:

  1. il n'y a presque aucune chance que vous puissiez tourner sans réencodage. L'exception à cette règle (MJPEG codec) a déjà été mentionnée, mais il est peu probable que vous l'utilisez, il va donc au-delà de la portée de cette question. Je mentionnerai que la raison de cette capacité est que JPEG peut être converti via des métadonnées. Ainsi, si vous êtes en mesure de trouver un conteneur qui a la rotation des métadonnées, vous serez en mesure de tourner, mais aucun n'existe (ou sont assez étendus) jusqu'à présent.
  2. S'il vous a fallu des heures pour tourner et réencoder 3 minutes de la vidéo, alors le problème peut se trouver sur une énorme résolution. Et je veux dire énorme ! Pouvez-vous s'il vous plaît fournir la sortie du avprobe original.mp4 afin qu'il puisse être vérifié.
  3. Libav versus FFmpeg débats sont très contre-productifs (vous pouvez voir que par la quantité de fud posté ici déjà). Fondamentalement, ce qui s'est passé était une scission du projet avec certains développeurs allant d'une manière et d'une autre, le fait que le projet FFmpeg a réussi à garder le nom est juste un hasard et il n'a aucun sens à appeler un projet original et un autre une fourchette. Les différences entre les projets sont principalement dans le style de développement et sur la philosophie. Si vous caractérisiez FFmpeg comme plus Open Source et Libav comme plus de logiciel libre, Vous ne seriez pas tout ce qui trompe. Les gens rationnels espèrent que finalement les développeurs viendront à leurs sens, et peut-être pas fusionner les projets, mais coopérer dans une plus grande mesure. Quand Ubuntu est sorti à l'origine, sur chaque chat Debian GNU/Linux il y avait des messages énormes le long de la ligne de "Ubuntu n'est pas Debian!!!!!!!"mais maintenant, la situation s'est calmée et les deux côtés sont très heureux avec l'un l'autre.
3
répondu v010dya 2014-11-09 10:43:25

Cette réponse est tout simplement un résumé des commentaires fournis par LordNeckbeard.

tournant sans encodage

tourner sans réencodage n'est pas possible à moins que:

  • votre entrée est MJPEG
  • vous tourner lors de la lecture

Tourner avec un encodage à l'aide de la bonne ffmpeg

Pour bien comprendre les étapes nécessaires à cette, on devrait commencer par lire ou au moins parcourir cette question:

quelles sont les différences et les similitudes entre ffmpeg, libav et avconv?

résumé: avconv est une fourchette de ffmpeg, le responsable debian a choisi avconv, vous devez compiler la ffmpeg correcte à partir de la source.

la prochaine étape serait de compiler la ffmpeg correcte à partir de la source comme est détaillé ici:

Guide de Compilation de ffmpeg pour Debian

la dernière étape est d'utiliser les commandes trouvées dans d'autres messages:

comment retourner une vidéo 180° (verticale / à l'envers) avec FFmpeg? ou Tourner des vidéos avec FFmpeg

résumé: ffmpeg-vfilters "rotate=90" - I input.sortie mp4.mp4

1
répondu stedes 2017-05-23 12:26:35