J'ai une vidéo mkv (h264) à 23,976 ips (24000/1001) mais je veux la convertir en 25 ips sans réencodage ni perte de qualité. Je sais que mkvmerge peut le faire (avec l'option --default-duration '0: 25fps') mais je voudrais le faire directement depuis ffmpeg si possible Selon les documents, cela devrait fonctionner:
ffmpeg -i input.mkv -r 25 -vcodec copy output.mkv
mais quand je l'exécute, je n'obtiens que les mêmes images vidéo. Quelle est la bonne méthode pour le faire (si elle existe) dans ffmpeg?
-r
n'est pas compatible avec la copie de flux, et il n'y a pas de filtres de flux binaire pour modifier la fréquence d'images.Réponses:
Voici la méthode utilisant les versions actuelles de FFmpeg. Il repose sur le démultiplexeur concat ne pas redimensionner le PTS des entrées après le premier fichier, mais simplement appliquer un décalage fixe. Disons que vous avez un flux de 30 ips avec une échelle de temps
15360
(typique de la sortie FFmpeg). Cela signifie que la trame0
a PTS0
et la trame30
a PTS15360
. Cela deviendrait un flux de 45 fps si nous pouvions changer l'échelle de temps23040
sans affecter les valeurs PTS.C'est essentiellement ce que fait la méthode ci-dessous.
1 . Identifiez les propriétés de la source.
Vous souhaitez noter les propriétés de la source, en particulier la résolution et
tbn
.2a . (Facultatif) Modifiez l'échelle de temps en quelque chose de pratique, pour simplifier les calculs.
Cela nous amène
Si vous effectuez cette étape, la nouvelle échelle de temps doit être égale ou un multiple entier de la fréquence d'images d'origine.
2b . Calculez l'échelle de temps nécessaire, de sorte que pour la
x
fréquence d' images cible , le PTS de la trame #x
dans la source ait la même valeur que la nouvelletbn
. Si vous avez effectué l'étape 2a, c'est très simple et c'est simplement le nouveau framerate. Donc, pour les fps cibles45
, le nouveautbn
devrait être45
.3 . Générez une vidéo factice.
Toutes les propriétés doivent être identiques comme la résolution, le profil H.264, le format de pixel, le nombre de références ... etc. pour de meilleurs résultats.
4 Concattez les vidéos.
Créez d'abord un fichier texte
Ensuite, le concat
Le fichier de sortie aura la deuxième vidéo en cours de lecture à 45 ips.
5 . Maintenant, coupez le pré-rouleau factice
et tu as
J'ai dit que c'était compliqué!
la source