2017-05-27 3 views
0

J'ai cherché une réponse ici sur Stack Overflow et googling partout ... même si cela semble être une ligne de commande très simple pour moi, je ne trouve pas de réponse nulle part. Je voudrais changer le taux de trame d'une vidéo de 23,976fps à 24fps avec FFmpeg, sans perte et en gardant le nombre total de cadres.Comment puis-je modifier une fréquence d'images vidéo avec FFmpeg, sans perte et en conservant le même nombre total d'images?

Pour le rendre plus simple:

Disons que j'ai 25fps vidéo avec une longueur totale de 100 cadres.

Comment puis-je changer est frame rate à 50fps, avec FFmpeg, sans perte et en gardant la même longueur totale de 100 cadres?

C'était jusqu'à présent la meilleure solution, je suis tombé avec (qui se trouve here):

Extrait les cadres comme rawvideo:

ffmpeg -i input.mov - f rawvideo -b 50000000 -pix_fmt yuv420p -vcodec rawvideo -s 1920x1080 -y temp.raw

recréer la vidéo avec une nouvelle framerate:

ffmpeg -f rawvideo -b 50000000 -pix_fmt yuv420p -r 24 -s 1920x1080 -i temp.raw -y output.mov

Note 1:je devais retirer "-b 50000000" lors de la recréation de la vidéo avec la nouvelle fréquence d'images, afin de le faire fonctionner correctement.

Il a fait exactement ce que je l'ai prévu de faire, mais je me demande toujours s'il existe une façon plus simple de le faire? J'ai essayé de les assembler en une seule ligne, comme suggéré dans le même article, mais je n'ai pas réussi à le faire fonctionner.

Note 2:Même si elle fait exactement ce que je voulais faire, je viens de réaliser plus tard il y a perte de qualité en utilisant cette méthode, que je préférerais éviter.

Merci à tous d'avance!

+0

La modification du framerate ne perd aucun cadre. Cela change juste la rapidité avec laquelle ils s'affichent. 100 images/25fps = 4 sec vidéo, en le changeant en 50fps fait maintenant 2 sec vidéo (par exemple: contient toujours 100 images). Montrez-nous la commande ffmpeg qui a perdu des images pendant le réglage d'image. –

Répondre

1

Si votre codec vidéo est H.264/5, cette méthode en deux étapes fonctionne sans perte.

# 1 démultiplexeur à bitstream

ffmpeg -i in.mov -c copy in.264 

# 2 Remultiplexer avec le nouveau framerate

ffmpeg -r 24 -i in.264 -c copy out.mov 

Pour d'autres codecs, s'il y a un format bitstream disponible, cela peut être fait sans transcodage.

Si transcoder est bien, la seule étape fonctionne suivant:

ffmpeg -r 24 -i in.mov -vsync 0 -c:v <codecname> out.mov 

Bien sûr, vous aurez envie de spécifier des paramètres tels que bitrate..etc pour contrôler la qualité.

+0

Salut Mulvya, merci beaucoup. Oui, la vidéo est encodée directement à partir de la caméra comme H.264 et votre suggestion a parfaitement fonctionné. Vraiment apprécié, vous avez sauvé ma journée. Merci beaucoup encore une fois!! – Nuno