Bagaimana cara memeriksa apakah video telah diunduh sepenuhnya?

10

Saya memiliki banyak video yang ingin saya periksa apakah sudah lengkap atau tidak. Beberapa dari mereka mungkin diunduh sebagian, tetapi tidak salah. Bagaimana saya dapat memeriksa secara efisien apakah video ini sepenuhnya diunduh?

Jika saya memiliki tautan, saya akan memeriksa ukurannya, tetapi saya tidak.

Saya mencoba menggunakan ffprobedan mediainfo. ffprobemelaporkan masalah kecil pada file yang diunduh sebagian, tetapi juga melaporkan masalah serupa dengan beberapa file yang sepenuhnya diunduh. Haruskah saya gunakan ffmpeguntuk membaca seluruh file dan membandingkan panjang video untuk memeriksa apakah mereka diunduh? Apakah ada solusi yang lebih baik?

Ho1
sumber
Apakah Anda berbicara tentang file yang sedang diunduh, yaitu program yang mengunduhnya masih menulis ke file karena menerima lebih banyak data? Atau apakah Anda berbicara tentang file yang unduhannya dibatalkan pada suatu waktu di masa lalu?
Gilles 'SANGAT berhenti menjadi jahat'
@Gilles Diunduh di masa lalu, dan sekarang beberapa file ini tidak lengkap. Saya ingin menemukan file video yang tidak lengkap, sehingga saya dapat menemukan tautan secara manual dan melanjutkan unduhan.
Ho1
@ Ho1 apakah jawaban saya memuaskan pertanyaan Anda?
J363
@ J363 Terima kasih atas jawaban Anda. Bisakah Anda menanggapi komentar saya?
Ho1

Jawaban:

11

ffmpegadalah alat agnostik OS yang mampu menentukan apakah file video telah sepenuhnya diunduh. Perintah di bawah ini memerintahkan ffmpeguntuk membaca video input dan mengkodekan video menjadi kosong. Selama proses pengkodean, setiap kesalahan seperti frame yang hilang adalah output ke test.log.

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

Jika file video tidak sepenuhnya diunduh, akan ada banyak baris di file test.log. Misalnya, .1 MB hilang dari file video menghasilkan 71 baris kesalahan. Jika video sepenuhnya diunduh dan belum rusak, tidak ada kesalahan ditemukan, dan tidak ada garis yang dicetak untuk test.log.


Edit

Dalam contoh yang saya berikan di atas, saya menguji seluruh file karena video uji yang saya unduh adalah torrent, yang dapat memiliki potongan yang hilang di seluruh file.

Menambahkan -sseof -60ke daftar argumen akan memeriksa 60 detik terakhir dari file, yang jauh lebih cepat.

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

Anda memerlukan ffmpeg versi yang lebih baru, 2,8 tidak memiliki flag sseof, jadi saya menggunakan 3.0.

J363
sumber
1
Ini berfungsi entah bagaimana, tetapi itu membutuhkan pemrosesan semua video. Sebagai metode alternatif, saya menemukan bahwa membuka video di VLC, mengklik di suatu tempat di dekat akhir membutuhkan waktu lebih sedikit dan lebih praktis. Apakah mungkin untuk mendefinisikan hal serupa ffmpeg? Maksud saya berusaha untuk 99% tanpa memproses semua video, dan memeriksa apakah itu berfungsi dengan baik tanpa kesalahan.
Ho1
@ Ho1 lihat perintah yang diperbarui.
J363
1
Saya yakin perintahnya bekerja karena saya mengujinya beberapa kali dengan dan tanpa flag -sse. Perintah asli memeriksa seluruh file, yang merupakan perilaku yang disarankan. Perintah yang diubah yang Anda minta menegaskan asumsi bahwa data hilang dari akhir file ke dalam perintah, yang mungkin tidak demikian. File pengujian saya adalah 99,9% dari 137MB mp4 yang diunduh dengan klien torrent. Ketika saya menggunakan flag -sseof dan semakin meningkatkan jumlah waktu yang terlihat mundur, saya akhirnya mendapatkan output yang sama persis seperti jika saya menjalankan perintah mencari seluruh file.
J363
1
Dengan -ssdan -sseof, ffmpeg membaca dan memproses seluruh file. Jadi, bagaimanapun, membuka video di VLC dan mengklik di dekat akhir akan lebih cepat.
Ho1
1
Anda benar, tetapi saya mengunduh melalui http.
Ho1
7

MediaInfo menampilkan garis:

Truncated: Yes

jika file tidak lengkap seperti yang diharapkan oleh spesifikasi format.

Karena secara teknis tidak ada perbedaan antara file yang salah (tidak memenuhi spesifikasi tentang batas file) file muxed dan sebagian diunduh, secara teknis tidak mungkin untuk melakukan perbedaan antara file kereta dan file yang diunduh sebagian.

Tes (lanjutan) lain dapat dilakukan misalnya membaca indeks file .mp4 dan memeriksa apakah file mengimbangi + ukuran bingkai dari frame terakhir berada dalam ukuran file dari file yang Anda dapatkan, tetapi itu tidak persis seperti apa yang Anda cari untuk (jika ada metadata misalnya poster di file sumber, di akhir file, dan file terpotong tepat sebelum poster ini, unduhan parsial masih tidak terdeteksi dalam setiap kasus). Itu tidak diterapkan di MediaInfo tetapi Anda dapat menambahkan permintaan fitur MediaInfo .

Dalam semua kasus, sangat sulit untuk mendeteksi semua unduhan parsial, karena ukuran total file tidak ditunjukkan dalam sebagian besar format file video sehingga Anda dapat memastikan file terpotong, tetapi Anda tidak dapat memastikan file tidak terpotong. Satu-satunya cara untuk memastikan Anda mengunduh file lengkap adalah dengan mendapatkan ukuran file dari tempat lain (dan lebih baik: miliki hash misalkan MD5).

PS: pertanyaan ini tidak spesifik untuk sistem operasi apa pun.

Jérôme Martinez
sumber
Terima kasih atas jawaban anda. Saya tidak ingin jawaban yang tepat, jawaban perkiraan akan cukup bagi saya. Apakah Anda pikir pertanyaan ini harus dipindahkan ke superuser.com?
Ho1
Saya tidak bisa mendapatkan bidang seperti itu bahkan dengan menggunakan versi mediainfo v0.7.83 menggunakan -f(tampilan informasi lengkap). Bisakah Anda membantu mendapatkan Truncatedlapangan?
Ho1
Hapus saja 1 byte di file Anda dan Anda seharusnya menampilkan bidang "terpotong" ini (tidak perlu -f, output default sudah cukup). FYI diimplementasikan untuk format yang paling banyak digunakan saat ini: MP4 / MOV, Matroska, MXF. apakah Anda menguji dengan format lain?
Jérôme Martinez
2
Terima kasih banyak atas jawabannya. Untuk memeriksa banyak file sekaligus, saya menggunakan yang berikut: di mediainfo * | grep -E "^(IsTruncated|Complete name)"mana nama file dari file yang sesuai ditampilkan langsung di atas baris "IsTruncated: Yes".
0x01
4

Saya punya file di mana ffmpeg (v3.1.1) dengan -sse -60 tidak menunjukkan peringatan apa pun dan hanya keluar tanpa indikasi bahwa ada sesuatu yang salah. Mediainfo juga tidak menunjukkan bahwa file tersebut terpotong. Hanya meninggalkan -sseof -60 yang akan melaporkan kesalahan dengan ffmpeg. Jadi saya kembali ke mencoba ffprobe. Tampaknya sedikit lebih cepat daripada ffmpeg.

ffprobe -v error -count_frames -i filename.mp4

menghasilkan output ini

[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

Saya belum menemukan positif palsu (seperti dilaporkan oleh OP).

Sunting : ffprobe ada di testfiles saya sekitar 10% lebih cepat dari ffmpeg, tetapi hanya jika Anda menginstruksikannya untuk menggunakan semua core dengan opsi '-baca 0'. Kalau tidak, ia hanya menggunakan satu inti / utas dan lebih lambat.

Jan Ehrhardt
sumber
Ini tidak memberikan jawaban untuk pertanyaan itu. Setelah Anda memiliki reputasi yang cukup, Anda akan dapat mengomentari setiap pos ; alih-alih, berikan jawaban yang tidak memerlukan klarifikasi dari penanya . - Dari Ulasan
Braiam
@Braiam Itu menjawab pertanyaan, karena file yang diunduh dengan benar tidak akan menghasilkan output dan file yang tidak lengkap akan.
Jan Ehrhardt