J'ai une vidéo au format mp4 avec une fréquence d'images de .33
(1 image pendant 3 secondes). Je souhaite augmenter la fréquence d'images à 5 images / s. J'ai essayé la commande ci-dessous mais cela ne fait rien:
ffmpeg -i <input.mp4> -r 5 <output.mp4>
Une idée pourquoi ffmpeg ignore l' -r
option?
Réponses:
Je sais que c'est une vieille question mais aucune des réponses actuelles n'est plus recommandée.
Remuxage sans perte (vidéo)
Comme indiqué dans les commentaires, il existe un moyen de le faire lorsque la vidéo n'a pas à être ré-encodée. Il nécessite le remuxage du fichier dans un format de conteneur MKV différent, puis le remuxage dans un MP4. Voici un exemple qui change une vidéo en 12 images / seconde:
Si la vidéo contient de l'audio, vous pouvez également la ralentir sans modifier la hauteur, mais ce n'est pas une conversion sans perte. L'exemple ci-dessous suppose que la vidéo source était de 24 images / seconde, de sorte que l'audio devait être ralenti à la moitié (0,5) de la vitesse à l'aide du filtre atempo de ffmpeg .
FFMPEG Wiki Guidance
Ceci est le guide du wiki ffmpeg . Notez que toutes ces options nécessitent un ré-encodage de la vidéo.
Accélérer / ralentir la vidéo
Vous pouvez modifier la vitesse d'un flux vidéo à l'aide du filtre vidéo setpts. Notez que dans les exemples suivants, le flux audio n'est pas modifié, il devrait donc idéalement être désactivé avec -an.
Pour doubler la vitesse de la vidéo, vous pouvez utiliser:
Le filtre fonctionne en modifiant l'horodatage de présentation (PTS) de chaque image vidéo. Par exemple, s'il y a deux images successives affichées aux horodatages 1 et 2 et que vous souhaitez accélérer la vidéo, ces horodatages doivent devenir respectivement 0,5 et 1. Il faut donc les multiplier par 0,5.
Notez que cette méthode supprimera les images pour atteindre la vitesse souhaitée. Vous pouvez éviter les pertes d'images en spécifiant une fréquence d'images de sortie plus élevée que l'entrée. Par exemple, pour passer d'une entrée de 4 FPS à une entrée accélérée jusqu'à 4x (16 FPS):
Pour ralentir votre vidéo, vous devez utiliser un multiplicateur supérieur à 1:
Lisse
Vous pouvez lisser la vidéo lente / rapide avec le filtre vidéo minterpolate. Ceci est également connu comme "interpolation de mouvement" ou "flux optique".
D'autres options incluent slowmoVideo et Butterflow. Accélérer / ralentir l'audio
Vous pouvez accélérer ou ralentir l'audio avec le filtre audio atempo. Pour doubler la vitesse de l'audio:
Le filtre atempo est limité à l'utilisation de valeurs comprises entre 0,5 et 2,0 (il peut donc le ralentir à pas moins de la moitié de la vitesse d'origine et accélérer jusqu'à pas plus du double de l'entrée). Si vous en avez besoin, vous pouvez contourner cette limitation en enchaînant plusieurs filtres atempo ensemble. Ce qui suit avec quadruple la vitesse audio:
En utilisant un filtre graphique complexe, vous pouvez accélérer la vidéo et l'audio en même temps:
la source
mkvmerge --default-duration 0:24000/1001fps --fix-bitstream-timing-information 0 in.mkv -o out.mkv
changer le framerate sur le conteneur MKV . Vous pouvez redistribuer vers MKV et revenir à MP4, ou trouver un outil qui le fait directement pour MP4. Le codage de la vidéo est très gourmand en CPU et avec perte, c'est donc une option horrible.Si le fichier d'entrée n'a pas de fréquence d'images valide, vous devrez peut-être le définir explicitement
la source
Je ne pouvais obtenir le taux de rafraîchissement modifié que si le fichier d'entrée était classé comme un fichier "brut":
Sans spécifier,
-f h264
il serait par défaut à 25 fps et il ne pourrait pas être changé. Apparemment, cela était dû au fait que le flux ne contenait aucune information de fréquence d'images et qu'il s'agit de la fréquence d'images par défaut de ffmpeg.Apparemment, lorsque vous utilisez
-r
une option de sortie, il duplique ou supprime des images pour que la vidéo soit lue à la même vitesse - dans ce cas, pas ce que vous voulez! Mais en changeant le framerate d'entrée comme ci-dessus, la vidéo accélérera ou ralentira, sans perte ni duplication d'images.la source
Une telle caractéristique - de changer le framerate - est appelée "conforme" et est souvent utilisée pour produire un ralenti ou une avance rapide comme montrant la croissance d'une plante en quelques minutes en quelques jours. ffmpeg n'autorise pas l'écrasement / la modification de la fréquence d'images sans réencodage . Si tel est le cas, la durée changera et l'audio sera désynchronisé, à moins d'être réparé séparément. Mais je crains que l'audio ne soit pas intéressant dans votre cas avec une fréquence d'images de 0,33
Vous voulez vous conformer parce que vous voulez juste changer le framerate, mais ffmpeg ignore
-r
silencieusementsi la fréquence d'images est spécifiée dans le fichier d'entrée. Étant donné que votre fichier d'entrée est au format .mp4, son propre taux de rafraîchissement a priorité surlorsque le réencodage n'est pas nécessaire. Pour cela, vous avez besoin d'un outil différent: mencoder.-r
En supposant que votre fichier d'entrée ne contienne aucun son - probablement vrai pour toute vidéo avec une fréquence d'images de 0,33 - ce dont vous avez besoin est:
Notez que mencoder produit par défaut une sortie au format AVI.
la source
r
est spécifié comme commutateur de sortie, ffmpeg produira une sortie à cette fréquence d'images spécifiée, quelle que soit la fréquence d'images de l'entrée. Sir
est spécifié en tant que commutateur d'entrée, ffmpeg dupliquera ou supprimera les images selon les besoins pour fournir le nombre spécifié d'images par seconde d'entrée au filtre / encodeur.r
commutateur d'entrée est en contradiction avec mon expérience précédente sur le format .mp4, la note de Malvineous (sur cette page) et la description du bogue 403 trac.ffmpeg.org/ticket/403 ; votre description lorsquer
est utilisé sur la sortie se produit lors du ré-encodage, alors que le scénario de OP semble être un cas conforme (correction de la fréquence d'images sans ré-encodage) par le fait qu'il avait une fréquence d'images de 0,33.r
fps.-r
. Cette utilisation n'a pas pu affecter mes expériences précédentes en réponse à OP parce que, pensant à un cas conforme, je n'ai jamais laissé tomber le paramètre de copie de ffmpeg, et-r
est donc ignoré. J'ai écrit une demande de fonctionnalité: trac.ffmpeg.org/ticket/5170Le moyen le plus rapide consiste à créer un fichier BAT dans le répertoire avec les lignes suivantes:
Vous devez avoir mkvmerge et ffmpeg dans le même répertoire. Il change automatiquement chaque fichier mp4 en quelques secondes sans perte de qualité.
la source