Tôi đã nhận được hàng ngàn cảnh báo này với một mã hóa cụ thể. Tôi đã hạ thấp video 1080p xuống 480p. Tại một điểm chỉnh sửa, nơi có một số video tinh ranh do lỗi của đĩa laser nguồn, các thông báo này bắt đầu xuất hiện và sau đó xuất hiện, tôi nghĩ, mọi khung hình sau đó. Họ tiếp tục và tiếp tục, như đoạn trích ngắn này:
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
Yêu cầu ban đầu của ffmpeg là:
ffmpeg -i input.mp4 -s 720x480 -c:v libx264 -preset slower -crf 17 -c:a copy -y output.mkv
Sau những gợi ý ở đây, lần đầu tiên tôi đã thêm - 60000/1001 vào đầu vào. Điều đó đã không cải thiện bất cứ điều gì. Tôi giữ lại -framerator và thêm -r 60000/1001 vào đầu ra. Điều đó vẫn không cải thiện bất cứ điều gì. Giữ lại cả hai cuối cùng tôi đã thêm -async 1 -vsync 1. Điều này dẫn đến việc tôi nhận được một cảnh báo duy nhất, và đó là tất cả. Lời cầu khẩn đó là:
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
Sự khác biệt duy nhất tôi tìm thấy trong một kết xuất chi tiết từ MediaInfo là loại bỏ dòng này được tìm thấy trong lời gọi ban đầu nhưng không phải trong lần thứ hai:
Delay relative to video : -33ms
Tuy nhiên, tôi đã kiểm tra đồng bộ A / V ở gần đầu tệp và gần cuối và không có sự khác biệt rõ rệt nào về đồng bộ giữa hai tệp. Thời gian chạy của chúng cũng giống nhau, nhưng chỉ được đo đến giây gần nhất, tính bằng VLC. Vì vậy, tôi đã kiểm tra số lượng khung hình bằng cách sử dụng ffmpeg như vậy:
ffmpeg -i output.mkv -map 0:v:0 -c copy -f null -
và tìm kiếm "frame = #" gần cuối đầu ra.
Hóa ra video nguồn dài 375226 khung hình, lần gọi ban đầu mang lại 375195 khung hình và lần gọi thứ hai mang lại 375200. Vì vậy, lần gọi thứ hai, với số lượng thông báo cảnh báo ít hơn cũng giảm 5 khung hình.
Thử nghiệm sau đó cho thấy -framerator và -r là không cần thiết và chỉ cần sử dụng hai cờ đồng bộ là đủ. Điều này tạo ra kết quả giống hệt với lần gọi thứ hai ở trên, vì vậy lần gọi thứ ba và đơn giản nhất mà tôi tìm thấy để giải quyết vấn đề là:
ffmpeg -i input.mp4 -s 720x480 -c:v libx264 -preset slower -crf 17 -c:a copy -y output.mkv -async 1 -vsync 1
Và một tệp khác sau đó đã tạo ra một loạt các cảnh báo này ngay cả với các cờ đồng bộ hóa, nhưng thêm lại các cờ tỷ lệ "đã sửa" nó (chỉ tạo ra hai thay vì hàng ngàn cảnh báo). Vì vậy, đôi khi lời gọi thứ hai hoạt động khi lần thứ ba không. Đối với mục đích trước mắt của tôi, tôi sẽ giải quyết lần gọi thứ hai và hy vọng nó sẽ khắc phục được hầu hết các vấn đề này.
Đây là tất cả với phiên bản ffmpeg 4.0.