Binlerce uyarıyı belirli bir kodlamayla alıyordum. 1080p videoyu 480p'ye düşürüyordum. Kaynak lazer diskindeki bir kusur nedeniyle bazı tehlikeli videoların olduğu bir düzenleme noktasında, bu mesajlar ortaya çıkmaya başladı ve daha sonra her karede ortaya çıktı. Bu kısa alıntı gibi devam ettiler:
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
Orijinal ffmpeg çağrısı şuydu:
ffmpeg -i input.mp4 -s 720x480 -c:v libx264 -preset slower -crf 17 -c:a copy -y output.mkv
Buradaki önerileri izleyerek girişe ilk olarak -framerate 60000/1001 ekledim. Bu hiçbir şeyi geliştirmedi. -Frame'i korudum ve çıktıya -r 60000/1001 ekledim. Bu hala hiçbir şey geliştirmedi. Her ikisini de tuttum sonunda -async 1 -vsync 1 ekledim. Bu, tek bir uyarı almamla sonuçlandı ve hepsi bu. Bu çağrı şuydu:
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'dan ayrıntılı bir dökümde bulduğum tek fark, orijinal çağırmada bulunan ancak ikincisinde olmayan bu satırın kaldırılmasıydı:
Delay relative to video : -33ms
Ancak, dosyaların başına ve sonuna yakın A / V senkronizasyonunu kontrol ettim ve iki dosya arasında senkronizasyonda fark edilebilir bir fark yoktu. Çalışma süreleri de aynıydı, ancak bu VLC'de sadece en yakın saniyeye kadar ölçüldü. Bu yüzden ffmpeg kullanarak çerçeve sayılarını kontrol ettim:
ffmpeg -i output.mkv -map 0:v:0 -c copy -f null -
ve çıktının sonuna yakın "frame = #" araması yapar.
Kaynak videonun 375226 kare uzunluğunda olduğu, orijinal çağrının 375195 kare ve ikinci çağrının 375200 sağlandığı ortaya çıktı.
Müteakip testler -frame ve -r'nin gereksiz olduğunu ve sadece iki senkronizasyon bayrağının kullanılmasının yeterli olduğunu gösterdi. Bu, yukarıdaki ikinci çağrı ile aynı sonuçları verdi, bu yüzden sorunu çözmek için bulduğum üçüncü ve en basit çağrı şu:
ffmpeg -i input.mp4 -s 720x480 -c:v libx264 -preset slower -crf 17 -c:a copy -y output.mkv -async 1 -vsync 1
Ve yine başka bir dosya, senkronizasyon bayrakları ile bile bu uyarıların bir demetini üretti, ancak "sabit" oran bayraklarını ekleyerek (binlerce uyarı yerine sadece iki tane üretti). Bu yüzden bazen ikinci çağrı üçüncüsü çalışmadığında çalışır. Anlık amaçlarım için ikinci çağrıyı çözeceğim ve umarım bu sorunların çoğunu çözeceğim.
Tüm bunlar ffmpeg sürüm 4.0'dı.