2 votes

Taux de rafraîchissement variable avec FFmpeg

Supposons que j'ai 5 images avec les délais respectifs entre chaque image :

  1. 60ms;
  2. 54ms;
  3. 70ms;
  4. 23ms;
  5. 40ms;

Comment puis-je indiquer cette information à FFmpeg ?

3voto

Gyan Points 29437

En plus de la méthode des multiples outils présentée sur https://stackoverflow.com/q/28086775/5726027, cela peut également être fait à travers une seule commande longue.

ffmpeg -i a1.jpg -i a2.jpg -i a3.jpg -i a4.jpg -i a5.jpg
       -filter_complex
        "[1]settb=1/1000,setpts=PTS+0.06/TB[b];
         [2]settb=1/1000,setpts=PTS+0.054/TB[c];
         [3]settb=1/1000,setpts=PTS+0.07/TB[d];
         [4]split[4a][4b];
         [4a]settb=1/1000,setpts=PTS+0.023/TB[e];
         [4b]settb=1/1000,setpts=PTS+0.04/TB[f];
         [0][b][c][d][e][f]concat=n=6"
       -vsync vfr -r 1000 -video_track_timescale 1000 vt.mp4

Pour chaque image sauf la première, des filtres de timebase et de timestamp sont appliqués. Comme vous avez besoin d'une précision en millisecondes, la timebase est réglée à 1/1000 sec = 1 milliseconde. Ensuite, setpts ajoute le délai requis (en secondes). Comme je crois que le tout dernier frame de la vidéo a, en effet, la durée par défaut déterminée par le débit de codage, la toute dernière image doit être dupliquée. La première copie a la valeur PTS selon son délai, et la seconde a son PTS réglé sur la durée prévue de la dernière image.

0voto

jpwynn Points 5222

J'ai fini par utiliser l'option -concat. Il s'agit essentiellement d'un fichier texte avec le nom et la durée de chaque image d'entrée.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X