Je recevais des milliers de ces avertissements avec un encodage particulier. Je réduisais la vidéo 1080p à 480p. À un point de montage, où il y avait une vidéo douteuse en raison d'un défaut dans le disque laser source, ces messages ont commencé à apparaître et sont ensuite apparus pour, je pense, chaque image par la suite. Ils ont continué encore et encore, comme ce court extrait:
Past duration 0.901115 too large= 535031kB time=00:54:15.06 bitrate=1346.5kbits/s dup=0 drop=19 speed=1.15x
Last message repeated 31 times
Past duration 0.901115 too large= 535031kB time=00:54:15.62 bitrate=1346.3kbits/s dup=0 drop=19 speed=1.15x
Last message repeated 34 times
Past duration 0.901115 too large= 535031kB time=00:54:16.21 bitrate=1346.0kbits/s dup=0 drop=19 speed=1.15x
Last message repeated 36 times
Past duration 0.901115 too large= 535338kB time=00:54:16.83 bitrate=1346.5kbits/s dup=0 drop=19 speed=1.15x
Last message repeated 39 times
L'appel original de ffmpeg était le suivant:
ffmpeg -i input.mp4 -s 720x480 -c:v libx264 -preset slower -crf 17 -c:a copy -y output.mkv
Suite aux suggestions ici, j'ai d'abord ajouté -framerate 60000/1001 à l'entrée. Cela n'a rien amélioré. J'ai conservé -framerate et ajouté -r 60000/1001 à la sortie. Cela n'a toujours rien amélioré. En conservant les deux, j'ai finalement ajouté -async 1 -vsync 1. Cela m'a permis de recevoir un seul avertissement, et c'est tout. Cette invocation était:
ffmpeg -i input.mp4 -framerate 60000/1001 -s 720x480 -c:v libx264 -preset slower -crf 17 -c:a copy -y output.mkv -r 60000/1001 -async 1 -vsync 1
La seule différence que j'ai trouvée dans un vidage détaillé de MediaInfo était la suppression de cette ligne trouvée dans l'invocation d'origine mais pas dans la seconde:
Delay relative to video : -33ms
Cependant, j'ai vérifié la synchronisation A / V vers le début des fichiers et vers la fin, et il n'y avait aucune différence perceptible de synchronisation entre les deux fichiers. Leurs temps de fonctionnement étaient également les mêmes, mais cela n'était mesuré qu'à la seconde près, en VLC. J'ai donc vérifié le nombre d'images en utilisant ffmpeg comme ceci:
ffmpeg -i output.mkv -map 0:v:0 -c copy -f null -
et recherchez "frame = #" vers la fin de la sortie.
Il s'avère que la vidéo source a une longueur de 375226 images, l'invocation d'origine a donné 375195 images et la deuxième invocation a donné 375200. Ainsi, la deuxième invocation, avec beaucoup moins de messages d'avertissement, a également perdu 5 images de moins.
Des tests ultérieurs ont montré que -framerate et -r n'étaient pas nécessaires et que l'utilisation des deux indicateurs de synchronisation était suffisante. Cela a produit des résultats identiques à la deuxième invocation ci-dessus, donc la troisième et la plus simple invocation que j'ai trouvée pour résoudre le problème est la suivante:
ffmpeg -i input.mp4 -s 720x480 -c:v libx264 -preset slower -crf 17 -c:a copy -y output.mkv -async 1 -vsync 1
Et encore un autre fichier a produit par la suite un tas de ces avertissements même avec les drapeaux de synchronisation, mais en rajoutant les indicateurs de taux "corrigés" il (produit seulement deux au lieu de milliers d'avertissements). Parfois, la deuxième invocation fonctionne alors que la troisième ne fonctionne pas. Pour mes besoins immédiats, je vais me contenter de la deuxième invocation et j'espère qu'elle résoudra la plupart de ces problèmes.
C'était tout avec ffmpeg version 4.0.