J'ai essayé de comprendre comment faire pivoter des vidéos avec FFmpeg. Je travaille avec des vidéos iPhone prises en mode portrait. Je sais comment déterminer les degrés de rotation actuels en utilisant MediaInfo (excellente bibliothèque, btw) mais je suis bloqué sur FFmpeg maintenant.
D'après ce que j'ai lu, ce que vous devez utiliser est une option vfilter . Selon ce que je vois, cela devrait ressembler à ceci:
ffmpeg -vfilters "rotate=90" -i input.mp4 output.mp4
Cependant, je ne peux pas faire fonctionner cela. D'abord, -vfilters n'existe plus, c'est maintenant juste -vf . Deuxièmement, je reçois cette erreur:
No such filter: 'rotate'
Error opening filters!
Pour autant que je sache, j'ai une version toutes options sur FFmpeg. L'exécution de ffmpeg -filters montre ceci:
Filters:
anull Pass the source unchanged to the output.
aspect Set the frame aspect ratio.
crop Crop the input video to x:y:width:height.
fifo Buffer input images and send them when they are requested.
format Convert the input video to one of the specified pixel formats.
hflip Horizontally flip the input video.
noformat Force libavfilter not to use any of the specified pixel formats
for the input to the next filter.
null Pass the source unchanged to the output.
pad Pad input image to width:height[:x:y[:color]] (default x and y:
0, default color: black).
pixdesctest Test pixel format definitions.
pixelaspect Set the pixel aspect ratio.
scale Scale the input video to width:height size and/or convert the i
mage format.
slicify Pass the images of input video on to next video filter as multi
ple slices.
unsharp Sharpen or blur the input video.
vflip Flip the input video vertically.
buffer Buffer video frames, and make them accessible to the filterchai
n.
color Provide an uniformly colored input, syntax is: [color[:size[:ra
te]]]
nullsrc Null video source, never return images.
nullsink Do absolutely nothing with the input video.
Avoir les options pour vflip et hflip est génial et tout, mais ils ne me mèneront tout simplement pas là où je dois aller. J'ai besoin au moins de faire pivoter les vidéos de 90 degrés. 270 degrés serait également une excellente option. Où sont passées les options de rotation?
la source
-vf "vflip,hflip"
-vf "vflip,hflip"
fonctionne comme un charme.Réponses:
Faire pivoter de 90 dans le sens des aiguilles d'une montre:
Pour le paramètre de transposition, vous pouvez passer:
Utilisez
-vf "transpose=2,transpose=2"
pour 180 degrés.Assurez-vous d'utiliser une version récente de ffmpeg à partir d'ici (une construction statique fonctionnera correctement).
Notez que cela ré-encodera les parties audio et vidéo. Vous pouvez généralement copier l'audio sans le toucher, en utilisant
-c:a copy
. Pour modifier la qualité vidéo, définissez le débit binaire (par exemple avec-b:v 1M
) ou consultez le guide d'encodage H.264 si vous souhaitez des options VBR.Une solution consiste également à utiliser ce script de commodité .
la source
-vcodec libx264
. Mais ce serait bien si je n'avais pas besoin de chercher quel encodage utiliser car ffmpeg devrait déjà le savoir. Aucune suggestion?-vf "transpose=2,transpose=2"
cclock_flip
,clock
,cclock
ou auclock_flip
lieu de0
,1
,2
ou3
.Si vous ne voulez pas recoder votre vidéo ET que votre lecteur peut gérer les métadonnées de rotation, vous pouvez simplement changer la rotation dans les métadonnées à l'aide de ffmpeg:
la source
ffmpeg -i input.m4v 2>&1 | grep rotate
ffmpeg -i input.m4v -map_metadata 0 -metadata:s:v rotate="90" -codec copy output.m4v
. De cette façon, toutes les métadonnées globales du fichier d'entrée seront copiées en tant que métadonnées globales dans le fichier de sortie et seules les métadonnées de rotation sont modifiées.rotate=0
.-metadata:s:v rotate="180"
, n'a pas fonctionné. Est-ce censé fonctionner?ffmpeg -i input.mp4 -codec copy -map_metadata 0 -metadata:s:v:0 rotate=0 output.mp4
Avez-vous déjà essayé
transpose
? Comme (de l'autre réponse)Si vous utilisez une ancienne version, vous devez mettre à jour ffmpeg si vous souhaitez utiliser la fonction de transposition, comme elle a été ajoutée en octobre 2011.
La page de téléchargement FFmpeg propose des versions statiques que vous pouvez exécuter directement sans avoir à les compiler.
la source
Je suis tombé sur cette page en cherchant la même réponse. Cela fait maintenant six mois que cela a été demandé à l'origine et les versions ont été mises à jour plusieurs fois depuis. Cependant, je voulais ajouter une réponse pour toute autre personne qui vient ici à la recherche de ces informations.
J'utilise la version Debian Squeeze et FFmpeg de ces dépôts.
La page MAN pour ffmpeg indique l'utilisation suivante
La clé étant que vous ne devez pas utiliser une variable de degré, mais une variable de réglage prédéfinie à partir de la page MAN.
la source
Pour faire pivoter l'image dans le sens horaire, vous pouvez utiliser le filtre de rotation, indiquant un angle positif en radians. Avec 90 degrés équivalant à PI / 2, vous pouvez le faire comme suit:
dans le sens antihoraire, l'angle doit être négatif
Le filtre de transposition fonctionnera également bien à 90 degrés, mais pour d'autres angles, c'est un choix plus rapide ou unique.
la source
*
se comporte comme une multiplication:ffmpeg -i in.avi -vf "rotate=-8*PI/40" -q 1 out.avi
(rotation légèrement inférieure à -PI / 4 = -10 * PI / 40)ne fonctionnera pas, même avec la dernière source ...
doit changer la commande:
fonctionne bien
la source
rotate=PI/2
ourotate=90*PI/180
est nécessaireSi vous obtenez une erreur "Le codec est expérimental mais les codecs expérimentaux ne sont pas activés", utilisez ceci:
Est arrivé avec moi pour un fichier .mov avec audio aac.
la source
-sameq
Option 'sameq' was removed. If you are looking for an option to preserve the quality (which is not what -sameq was for), use -qscale 0 or an equivalent quality factor option. Failed to set value '1' for option 'sameq': Invalid argument
renvoyé - qscale donne également une erreur.Please use -q:a or -q:v, -qscale is ambiguous
, mais fonctionne toujours.Ce script qui affichera les fichiers avec la structure de répertoires sous "fixedFiles". Pour le moment est fixé sur des fichiers MOV et exécutera un certain nombre de transformations en fonction de la "rotation" originale de la vidéo. Fonctionne avec les vidéos capturées iOS sur un Mac exécutant Mavericks, mais devrait être facilement exportable. Dépend d'avoir installé à la fois exiftool et ffmpeg .
la source
[Parsed_pad_2 @ 0x7f8b15c3a580] Input area -420:0:1500:1080 not within the padded area 0:0:1080:1080 or zero-sized
\ n `[Parsed_pad_2 @ 0x7f8b15c3a580] Failed to configure input pad on Parsed_pad_2
\ nError reinitializing filters!
\ nFailed to inject frame into filter network: Invalid argument
\ nError while processing the decoded data for stream #0:0
\ nConversion failed!
La réponse d'Alexy a presque fonctionné pour moi, sauf que je recevais cette erreur:
J'ai juste dû ajouter un paramètre (-r 65535/2733) à la commande et cela a fonctionné. La commande complète était donc:
la source
24000/1001
serait plus précis.Une solution supplémentaire avec une approche différente des dernières solutions mentionnées, consiste à vérifier si votre pilote de caméra prend en charge les commandes de la caméra v4l2 (ce qui est très courant).
Dans le terminal, tapez simplement:
Si votre pilote de caméra prend en charge les commandes de la caméra v4l2, vous devriez obtenir quelque chose comme ceci (la liste ci-dessous dépend des commandes prises en charge par votre pilote de caméra):
Et si vous êtes chanceux, il prend en charge horizontal_flip et vertical_flip .
Ensuite, tout ce que vous devez faire est de définir le horizontal_flip en:
ou le vertical_flip par:
puis vous pouvez appeler votre appareil vidéo pour capturer une nouvelle vidéo (voir l'exemple ci-dessous), et la vidéo sera tournée / retournée.
Bien sûr, si vous devez traiter une vidéo déjà existante, cette méthode n'est pas la solution que vous recherchez.
L'avantage de cette approche est que nous inversons l'image au niveau du capteur, de sorte que le capteur du pilote nous donne déjà l'image retournée, ce qui évite à l'application (comme FFmpeg) tout traitement supplémentaire et inutile.
la source
Malheureusement, la version Ubuntu de ffmpeg prend en charge les filtres vidéo.
Vous devez utiliser avidemux ou un autre éditeur pour obtenir le même effet.
De manière programmatique, mencoder a été recommandé.
la source
Smartphone: récupération d'une vidéo au format vertical
Vous voulez l'envoyer à un site Web, il était de 90 ° vers la gauche (anti-horaire, format paysage) hmm.
ffmpeg -i input.mp4 -vf "rotate=0" output.mp4
le fait. J'ai retrouvé le format vertical
debian buster: ffmpeg --version ffmpeg version 4.1.4-1 ~ deb10u1 Copyright (c) 2000-2019 les développeurs FFmpeg
la source