Làm cách nào để kiểm tra xem video có được tải xuống hoàn toàn không?


10

Tôi có một loạt các video mà tôi muốn kiểm tra xem chúng có đầy đủ hay không. Một số trong số chúng có thể được tải xuống một phần, nhưng chúng không bị lỗi. Làm cách nào để kiểm tra hiệu quả nếu những video này được tải xuống hoàn toàn?

Nếu tôi có các liên kết, tôi sẽ kiểm tra kích thước của chúng, nhưng tôi thì không.

Tôi đã thử sử dụng ffprobemediainfo. ffprobebáo cáo các sự cố nhỏ trên các tệp được tải xuống một phần, nhưng nó cũng báo cáo các sự cố tương tự với một số tệp được tải xuống hoàn toàn. Tôi có nên sử dụng ffmpegđể đọc toàn bộ tệp và so sánh độ dài của video để kiểm tra xem chúng có được tải xuống không? Có một giải pháp tốt hơn?


Bạn đang nói về các tệp hiện đang được tải xuống, tức là chương trình đang tải chúng vẫn đang ghi vào tệp vì nó nhận được nhiều dữ liệu hơn? Hay bạn đang nói về các tập tin mà tải xuống đã bị hủy bỏ tại một số điểm trong quá khứ?
Gilles 'SO- đừng trở nên xấu xa'

@Gilles Được tải xuống trong quá khứ và bây giờ một số tệp này không đầy đủ. Tôi muốn tìm các tệp video không đầy đủ, để tôi có thể tự tìm các liên kết và tiếp tục tải xuống.
Ho1

@ Ho1 câu trả lời của tôi có thỏa mãn câu hỏi của bạn không?
J363

@ J363 Cảm ơn câu trả lời của bạn. Bạn có thể vui lòng trả lời bình luận của tôi?
Ho1

Câu trả lời:


11

ffmpeglà một công cụ bất khả tri của hệ điều hành có khả năng xác định xem một tệp video đã được tải xuống hoàn toàn hay chưa. Lệnh dưới đây hướng dẫn ffmpegđọc video đầu vào và mã hóa video thành không có gì. Trong quá trình mã hóa, bất kỳ lỗi nào như các khung bị thiếu đều được xuất ra test.log.

ffmpeg -v error -i FILENAME.mp4 -f null - 2>test.log

Nếu một tệp video không được tải xuống hoàn toàn, sẽ có nhiều dòng trong tệp test.log. Ví dụ: .1 MB bị thiếu trong tệp video tạo ra 71 dòng lỗi. Nếu video được tải xuống đầy đủ và không bị hỏng, không tìm thấy lỗi và không có dòng nào được in ra test.log.


Biên tập

Trong ví dụ tôi đã đưa ra ở trên, tôi đã kiểm tra toàn bộ tệp vì video thử nghiệm tôi đã tải xuống là một torrent, có thể thiếu các đoạn trong toàn bộ tệp.

Thêm -sseof -60vào danh sách các đối số sẽ kiểm tra 60 giây cuối cùng của tệp, nhanh hơn đáng kể.

ffmpeg -v error -sseof -60 -i FILENAME.mp4 -f null - 2>test.log

Bạn sẽ cần một phiên bản mới hơn của ffmpeg, 2.8 đã thiếu cờ sseof, vì vậy tôi đã sử dụng 3.0.


1
Điều này hoạt động bằng cách nào đó, nhưng nó yêu cầu xử lý tất cả các video. Là một phương pháp thay thế, tôi thấy rằng việc mở video trong VLC, nhấp vào một nơi nào đó gần cuối sẽ tốn ít thời gian hơn và thực tế hơn. Có thể định nghĩa điều tương tự trong ffmpeg? Tôi có nghĩa là tìm kiếm 99% mà không xử lý tất cả video và kiểm tra xem nó có hoạt động tốt không có lỗi hay không.
Ho1

@ Ho1 xem lệnh cập nhật.
J363

1
Tôi khẳng định lệnh này hoạt động vì tôi đã thử nghiệm nó nhiều lần có và không có cờ -sseof. Lệnh gốc kiểm tra toàn bộ tệp, đó là hành vi được đề xuất. Lệnh được sửa đổi mà bạn yêu cầu xác nhận giả định rằng dữ liệu bị thiếu từ cuối tệp vào lệnh, có thể không phải là trường hợp. Tệp thử nghiệm của tôi là 99,9% của một tệp mp4 MB được tải xuống với máy khách torrent. Khi tôi sử dụng cờ -sseof và tăng dần lượng thời gian nhìn về phía sau, cuối cùng tôi cũng nhận được đầu ra chính xác giống như khi tôi chạy lệnh tìm kiếm toàn bộ tệp.
J363

1
Với -ss-sseof, ffmpeg không đọc và xử lý toàn bộ tệp. Vì vậy, dù sao, mở video trong VLC và nhấp vào gần cuối video sẽ nhanh hơn.
Ho1

1
Bạn nói đúng, nhưng tôi đang tải xuống qua http.
Ho1

7

MediaInfo hiển thị một dòng:

Truncated: Yes

nếu một tệp không hoàn thành như mong đợi bởi các đặc tả định dạng.

Vì về mặt kỹ thuật không có sự khác biệt giữa một tệp sai (không đáp ứng các thông số kỹ thuật về ranh giới tệp) các tệp được tải xuống và một phần, về mặt kỹ thuật không thể thực hiện sự khác biệt giữa tệp lỗi và tệp được tải xuống một phần.

Một thử nghiệm (nâng cao) khác có thể được thực hiện, ví dụ như đọc chỉ mục của tệp .mp4 và kiểm tra xem tệp bù + kích thước khung của khung cuối cùng có nằm trong kích thước tệp của tệp bạn nhận được không, nhưng đó không chính xác là những gì bạn đang tìm kiếm cho (nếu có siêu dữ liệu, ví dụ như áp phích trong tệp nguồn, ở cuối tệp và tệp bị cắt ngay trước áp phích này, tải xuống một phần vẫn không được phát hiện trong mọi trường hợp). Nó không được triển khai trong MediaInfo nhưng bạn có thể thêm yêu cầu tính năng MediaInfo .

Trong mọi trường hợp, rất khó phát hiện tất cả các phần tải xuống, bởi vì tổng kích thước tệp không được chỉ định trong hầu hết các định dạng tệp video để bạn có thể chắc chắn rằng một tệp bị cắt bớt, nhưng bạn không thể chắc chắn một tệp không bị cắt bớt. Cách duy nhất để chắc chắn rằng bạn đã tải xuống tệp hoàn chỉnh là lấy kích thước tệp từ một nơi khác (và tốt hơn: có hàm băm của nó, ví dụ MD5).

PS: câu hỏi này không dành riêng cho bất kỳ hệ điều hành nào.


Cảm ơn câu trả lời của bạn. Tôi không muốn một câu trả lời chính xác, một câu trả lời gần đúng sẽ là đủ cho tôi. Bạn có nghĩ rằng câu hỏi này nên được chuyển đến superuser.com?
Ho1

Tôi không thể có được trường như vậy ngay cả khi sử dụng phiên bản mediainfo v0.7.83 bằng cách sử dụng -f(hiển thị thông tin đầy đủ). Bạn có thể vui lòng giúp đỡ trên Truncatedlĩnh vực này?
Ho1

Chỉ cần xóa 1 byte trong tệp của bạn và bạn sẽ hiển thị trường "cắt ngắn" này (không cần -f, đầu ra mặc định là đủ). FYI nó được triển khai cho các định dạng được sử dụng nhiều nhất hiện nay: MP4 / MOV, Matroska, MXF. bạn đang thử nghiệm với định dạng khác?
Jérôme Martinez

2
Cảm ơn rất nhiều cho câu trả lời. Để kiểm tra nhiều tệp cùng một lúc, tôi đã sử dụng như sau: mediainfo * | grep -E "^(IsTruncated|Complete name)"trong đó tên tệp của tệp tương ứng đang được hiển thị ngay phía trên dòng "IsTruncated: Yes".
0x01

4

Tôi đã có một tệp trong đó ffmpeg (v3.1.1) với -sseof -60 không hiển thị bất kỳ cảnh báo nào và chỉ thoát ra mà không có dấu hiệu cho thấy có gì đó không đúng. Mediainfo cũng không hiển thị tập tin đã bị cắt ngắn. Chỉ bỏ qua -sseof -60 sẽ báo cáo bất kỳ lỗi nào với ffmpeg. Vì vậy, tôi đã quay trở lại để thử ffprobe. Nó có vẻ hơi nhanh hơn ffmpeg.

ffprobe -v error -count_frames -i filename.mp4

sản xuất đầu ra này

[h264 @ 00000000004e6a60] Invalid NAL unit size.
[h264 @ 00000000004e6a60] Error splitting the input into NAL units.
[mov,mp4,m4a,3gp,3g2,mj2 @ 00000000004e5280] stream 1, offset 0x1350135: partial file

Tôi chưa gặp phải bất kỳ kết quả dương tính giả nào (theo báo cáo của OP).

Chỉnh sửa : ffprobe đã có trên các tệp thử nghiệm của tôi nhanh hơn khoảng 10% so với ffmpeg, nhưng chỉ khi bạn hướng dẫn nó sử dụng tất cả các lõi với tùy chọn '-threads 0'. Nếu không, nó chỉ sử dụng một lõi / luồng và chậm hơn.


Điều này không cung cấp một câu trả lời cho câu hỏi. Một khi bạn có đủ danh tiếng, bạn sẽ có thể nhận xét về bất kỳ bài đăng nào ; thay vào đó, cung cấp câu trả lời không yêu cầu làm rõ từ người hỏi . - Từ đánh giá
Braiam

@Braiam Nó trả lời câu hỏi, bởi vì một tệp được tải xuống đầy đủ sẽ không tạo ra đầu ra và một tệp không đầy đủ sẽ.
Jan Ehrhardt
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.