Я отримував тисячі цих попереджень із певним кодуванням. Я знижував масштаб відео з 1080p до 480p. У момент редагування, де було якесь хитке відео через дефект вихідного лазердиска, ці повідомлення почали надходити, а потім з'являлися для кожного кадру після цього. Вони продовжували й далі, як цей короткий уривок:
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
Оригінальним викликом ffmpeg було таке:
ffmpeg -i input.mp4 -s 720x480 -c:v libx264 -preset slower -crf 17 -c:a copy -y output.mkv
Після наступних пропозицій я вперше додав -framerate 60000/1001 до входу. Це нічого не покращило. Я зберіг -framerate і додав -r 60000/1001 до виводу. Це все ще нічого не покращило. Зберігаючи обидва, я нарешті додав -async 1 -vsync 1. В результаті я отримав єдине попередження, і це все. Ця виклик була такою:
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
Єдиною різницею, яку я знайшов у детальному дампінгу від MediaInfo, було видалення цього рядка, знайденого в оригінальному виклику, а не у другому:
Delay relative to video : -33ms
Однак я перевірив синхронізацію A / V біля початку файлів і наприкінці, і не було помітної різниці в синхронізації між двома файлами. Їх час роботи також був однаковим, але це було виміряно лише до найближчої секунди, у VLC. Тому я перевірив кількість кадрів, використовуючи ffmpeg так:
ffmpeg -i output.mkv -map 0:v:0 -c copy -f null -
і шукаєте "frame = #" наприкінці виводу.
Виявляється, вихідне відео було 375226 кадрів, початкове виклик отримало 375195 кадрів, а друге виклик отримало 375200. Отже, другий виклик із значно меншою кількістю попереджувальних повідомлень також скинув на 5 менших кадрів.
Подальше тестування показало, що -framerate та -r не потрібні, і достатньо лише використання двох прапор синхронізації. Це дало ідентичні результати, ніж друге виклик вище, тому третя і найпростіша виклик, яку я знайшов для вирішення проблеми, полягає в наступному:
ffmpeg -i input.mp4 -s 720x480 -c:v libx264 -preset slower -crf 17 -c:a copy -y output.mkv -async 1 -vsync 1
І ще один файл згодом створив купу цих попереджень навіть із прапорцями синхронізації, але додавання назад прапорців швидкості "виправили" його (створили лише два замість тисяч попереджень). Тому іноді друге виклик працює, коли третє - ні. Для моїх найближчих цілей я збираюся зупинитися на другому виклику і сподіваюся, що він вирішить більшість цих проблем.
Це все було з ffmpeg версії 4.0.