Stavo ricevendo migliaia di questi avvisi con una codifica particolare. Stavo ridimensionando il video da 1080p a 480p. In un punto di modifica, dove c'erano dei video poco chiari a causa di un difetto del laserdisc sorgente, questi messaggi iniziarono a comparire e poi apparvero per ogni fotogramma da quel momento in poi. Continuarono all'infinito, come questo breve estratto:
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'invocazione originale di ffmpeg era questa:
ffmpeg -i input.mp4 -s 720x480 -c:v libx264 -preset slower -crf 17 -c:a copy -y output.mkv
Seguendo i suggerimenti qui ho prima aggiunto -framerate 60000/1001 all'input. Ciò non ha migliorato nulla. Ho mantenuto -framerate e aggiunto -r 60000/1001 all'output. Ciò non ha ancora migliorato nulla. Mantenendo entrambi ho aggiunto infine -async 1 -vsync 1. Questo mi ha portato a ricevere un singolo avviso, e questo è tutto. Quell'invocazione era:
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
L'unica differenza che ho riscontrato in un dump dettagliato di MediaInfo è stata la rimozione di questa riga trovata nell'invocazione originale ma non nella seconda:
Delay relative to video : -33ms
Tuttavia, ho controllato la sincronizzazione A / V vicino all'inizio dei file e vicino alla fine, e non c'era alcuna differenza percepibile nella sincronizzazione tra i due file. Anche i loro tempi di funzionamento erano gli stessi, ma questo era misurato solo al secondo più vicino, in VLC. Quindi ho controllato i conteggi dei frame usando ffmpeg in questo modo:
ffmpeg -i output.mkv -map 0:v:0 -c copy -f null -
e cercando "frame = #" vicino alla fine dell'output.
Si scopre che il video di origine era lungo 375226 fotogrammi, l'invocazione originale produceva 375195 fotogrammi e la seconda invocazione produceva 375200. Quindi la seconda invocazione, con un numero notevolmente inferiore di messaggi di avvertimento, ha anche perso 5 fotogrammi in meno.
I test successivi hanno dimostrato che -framerate e -r non erano necessari e che era sufficiente usare solo i due flag di sincronizzazione. Ciò ha prodotto risultati identici alla seconda invocazione sopra, quindi la terza e più semplice invocazione che ho trovato per risolvere il problema è questa:
ffmpeg -i input.mp4 -s 720x480 -c:v libx264 -preset slower -crf 17 -c:a copy -y output.mkv -async 1 -vsync 1
E ancora un altro file successivamente ha prodotto una serie di questi avvisi anche con i flag di sincronizzazione, ma aggiungendo nuovamente i flag di tasso "risolto" (ha prodotto solo due anziché migliaia di avvisi). Quindi a volte la seconda invocazione funziona quando la terza no. Per i miei scopi immediati mi accontenterò della seconda invocazione e spero che risolva la maggior parte di questi problemi.
Tutto questo con ffmpeg versione 4.0.