मैं एक वीडियो फ़ाइल (AVI, एमपीईजी, mp4…) की अखंडता की जांच कैसे कर सकता हूं?


126

यह शीर्षक कुछ भ्रामक हो सकता है, इसलिए मुझे समझाने की ...

मैं एक वीडियो फ़ाइल डाउनलोड कर रहा हूं ... एमपीईजी, एवी - लोकप्रिय प्रारूपों में से एक है। अब, अगर मैं इसे डाउनलोड कर रहा हूं, और डाउनलोड उह के बीच में टूट जाता है ... डाउनलोड करें, तो, उदाहरण के लिए, विंडोज मीडिया प्लेयर कुछ त्रुटि देगा और इसे खेलने से मना कर देगा (हालांकि फ़ाइल है, आइए बताते हैं) 98% पूर्ण)। लेकिन, KMPlayer, या MediaPlayer Classic जैसे खिलाड़ी उस बिंदु तक इसे खेलेंगे (जैसा कि वास्तव में, वे इसे तब भी खेल सकते हैं जब तक कि इसे डाउनलोड भी किया जा रहा हो)।

इसलिए, मुझे दिलचस्पी है, ... फ़ाइल को सुरक्षित करने के लिए डाउनलोड (डाउनलोड मैनेजर और एक जैसे) के किसी भी माध्यम का उपयोग किए बिना पूरी तरह से डाउनलोड किया जाता है, कोई कैसे सत्यापित कर सकता है कि वीडियो फ़ाइल पूरी तरह से डाउनलोड की गई है या नहीं और यह पूरी हो गई है?


अपूर्ण एमपीईजी को बिना किसी समस्या के खेलना चाहिए। AVI फ़ाइल के अंत में त्वरित खोज के लिए अनुक्रमित करता है, जिसे कुछ खिलाड़ी उपयोग करेंगे और कुछ की आवश्यकता नहीं होगी या अनदेखा करेंगे।
बोबिन्स

7
Incomplete MPEG should play with no problems.@bobince, सवाल था / यह है कि भ्रष्टाचार की जांच कैसे की जाए, अधूरी फाइल को कैसे चलाया जाए। यहां तक ​​कि अगर कोई प्रारूप अपूर्ण फ़ाइलों को चलाने का समर्थन करता है, तब भी भ्रष्टाचार के लिए जांच करना संभव होना चाहिए यदि फ़ाइल प्रारूप विनिर्देशों के अनुरूप नहीं है। उदाहरण के लिए, आप अभी भी एक अधूरा सादा-पाठ फ़ाइल पढ़ सकते हैं, लेकिन आप अभी भी पता लगा सकते हैं कि फ़ाइल में कोई समस्या है जैसे कि यह एक वाक्य के बीच में समाप्त होती है या बीच में स्पष्ट रूप से लापता जानकारी का एक हिस्सा है।
18

जवाबों:


135

आप ffmpegवीडियो कनवर्टर में एक सुविधा का उपयोग कर सकते हैं : यदि आप इसे कुछ भी नहीं करने के लिए वीडियो को फिर से लोड करने के लिए निर्दिष्ट करेंगे, तो यह केवल इनपुट फ़ाइल को पढ़ेगा और दिखाई देने वाली किसी भी त्रुटि की रिपोर्ट करेगा। यह बहुत तेज़ प्रक्रिया है क्योंकि वीडियो फ्रेम को सिर्फ पढ़ा, जाँचा और चुपचाप गिराया जा रहा है।

उदाहरण कमांड लाइन: (लिनक्स के लिए)

ffmpeg -v error -i file.avi -f null - 2>error.log

-v errorवर्बोसिटी का एक निश्चित स्तर का मतलब है (कुछ त्रुटियों को दिखाने के लिए जो सामान्य रूप से छिपे हुए हैं क्योंकि वे playability को बहुत प्रभावित नहीं करते हैं)।

आपको फ़ाइल ffmpeg के आउटपुट के बारे में कुछ सामान्य जानकारी के साथ एक पूर्ण त्रुटि लॉग मिलेगा, इसलिए इसे संभवतः आपके ध्यान की आवश्यकता होगी, इसी तरह की फाइलों के बैच चेक करने के लिए फिल्टर के माध्यम से लिखा जा सकता है।

FFmpeg यहां विंडोज के लिए भी उपलब्ध है । कमांड लाइन stderr रीडायरेक्ट के अपवाद के साथ लगभग समान होगी:

ffmpeg.exe -v error -i file.avi -f null - >error.log 2>&1

5
एक ही गति के रूप में अगर यह परिवर्तित हो जाएगा।
किसी ने

8
एक अन्य विकल्प यह है ffprobeकि पैकेज के साथ आता है ffmpeg। यह कोई रूपांतरण नहीं करता है, लेकिन केवल फ़ाइल से मेटाडेटा जानकारी पढ़ता है। इसलिए यह मेटाडेटा में त्रुटियों का पता लगाएगा, लेकिन फ़ाइल के भीतर कोई समस्या नहीं मिलेगी। ffprobeआगे प्रसंस्करण से पहले अपलोड किए गए का तेज़ सत्यापन करने के लिए व्यक्तिगत रूप से उपयोग करना
mente

1
दुर्भाग्य से फिल्म को देखने में जितना समय लगता है, लेकिन लगता है कि यह काम करता है
मैटपार्क

3
अगर, जैसा कि ओपी कहता है, "डाउनलोड उह के बीच में टूट जाता है ... डाउनलोड करें", यह बहुत संभावना है कि सभी धाराएं बाधित हो जाएंगी, इसलिए आप डिकोडिंग को केवल एक ऑडियो ट्रैक (उपयोग -map) तक सीमित करके इस त्रुटि का पता लगा सकते हैं । जो काफी आपरेशन तेज़ हो जाएगी: ffmpeg -v error -i in.mkv -map 0:1 -f null …है कि कोई त्रुटि है, यह बाइट स्थिति है, जिसे आप फ़ाइल को काटना (पहले एक मेगाबाइट या दो सुरक्षित रहने के लिए) का उपयोग कर सकते हैं और फिर से डाउनलोड होना शुरू प्रवेश करेंगे।
लुमी

3
एक पुराने हेक्स कोर प्रोसेसर पर 1GB 1 घंटे की लंबी .mkv फ़ाइल का परीक्षण करने में शायद मुझे 4 1/2 मिनट का समय लगा। परीक्षण के दौरान सभी कोर अधिकतम किए गए थे। I hex ने फ़ाइल की एक कॉपी संपादित की और क्षति का अनुकरण करने के लिए 00 के कुछ ब्लॉक जोड़े। त्रुटि लॉग ने त्रुटियों की सही रिपोर्ट की। त्रुटियों के बिना फाइलें एक खाली त्रुटि लौटा
दीं।

12

मुझे ffmpeg -f nullऊपर उपयोग करने का विचार पसंद आया , लेकिन मैं वास्तव में उस आउटपुट का उपयोग करने की प्रक्रिया को स्वचालित करना चाहूंगा। विशेष रूप से, मेरे पास मेरे संगीत वीडियो संग्रह के साथ सामान्य परिदृश्य यह है कि मेरे पास कुछ क्लिप हैं, जिनके पास एक ही रिज़ॉल्यूशन है, और मैं उन फ़ाइलों के लिए सत्यापन लॉग को अलग करना चाहूंगा जो सबसे अधिक टूट गए हैं।

दुर्भाग्य से, ffmpeg के पास अब तक अपने इंटरैक्टिव मोड को अक्षम करने का कोई तरीका नहीं है, जो उपयोग के इस मामले के लिए शोर को आउटपुट करता है। मैंने फ़िल्टरिंग करने के लिए साधारण रैपर स्क्रिप्ट हैक करना समाप्त किया:

#!/usr/bin/env python
import sys
import os
import re

t = os.popen('ffmpeg -v 5 -i "%s" -f null - 2>&1' % sys.argv[1]).read()
t = re.sub(r"frame=.+?\r", "", t)
t = re.sub(r"\[(.+?) @ 0x.+?\]", "[\\1]", t)
print t

उदाहरण आउटपुट:

[mpeg1video]ac-tex damaged at 21 17
[mpeg1video]Warning MVs not available
[mpeg1video]concealing 22 DC, 22 AC, 22 MV errors
[mpeg1video]Warning MVs not available
[mpeg1video]concealing 22 DC, 22 AC, 22 MV errors
[mpeg1video]ac-tex damaged at 13 9

1
यदि आप इसे बनाते हैं ताकि यह टूटे हुए हिस्सों को अच्छे हिस्सों के साथ बदल दे, तो यह और भी बेहतर होगा
akostadinov

मुझे इसका उपयोग करने में एक त्रुटि मिल रही है:
अक्षित रेवाड़ी

2
ट्रेसबैक (सबसे हालिया कॉल अंतिम): फ़ाइल "F: \ filecheck.py", लाइन 6, में <मॉड्यूल> t = os.popen ('ffmpeg -v 5 -i "% s" -f null - 2 & 1' ' % sys.argv [1])। पढ़ें () IndexError: सूची सूचकांक सीमा से बाहर
अक्षित रेवाड़ी

1

खिड़कियों के लिए, आप वर्तमान बैच पर वीडियो और इस बैट फ़ाइल के साथ सभी सबफ़ोल्डर्स के लिए 'बैच' चेक अखंडता कर सकते हैं:

checkvideo.bat

@echo off

set "filtro=%1"
if [%filtro%]==[] (
    set "filtro=*.mp4"
    )

for /R %%a in (%filtro%) do call :doWork "%%a"

    PAUSE
    exit /B

:doWork
    C:\ffmpeg\bin\ffmpeg.exe -v error -i %1 -f null - > "%~1.log" 2>&1

उपयोग:

checkvideo.bat [filter]

यदि आप एक फ़िल्टर नहीं देते हैं, तो '* .mp4' मिलेगा।

नमूने: checkvideo.bat checkvideo.bat *.avi

सेटअप: यहां से विंडोज के लिए FFmpeg डाउनलोड करें: https://ffmpeg.zeranoe.com/builds/ और उन्हें अनज़िप करें C:\ffmpeg\bin\पथ के लिए बैट फ़ाइल में बदलें जहां आपने अनज़ैप्ड ffmpeg checkvideo.batको पथ में शामिल फ़ोल्डर पर रखा है या उसके फ़ोल्डर में रखें पथ पर्यावरण चर


जुआन एंटोनियो टुबिओ का जवाब मेरे लिए वीडियो अखंडता की जांच करने के लिए काम कर रहा है। लेकिन मैं लॉग फ़ाइल कैसे पढ़ सकता हूं और उस समय का पता लगा सकता हूं जहां वीडियो दूषित है। लॉग उदाहरण है। qscale भिन्नता की [h264 @ 00000173649787c0] CABAC डिकोड 64 7 [h264 @ 00000173649787c0] त्रुटि पर एमबी 64 7 डिकोडिंग, जबकि, bytestream 38,638 में विफल रहा है
J.Duck

1

प्रारूप का ffmpegपुनरावर्तन करने के लिए उपयोग करने वाले दूसरे उत्तर के साथ समस्या nullयह है कि इसमें वास्तव में लंबा समय लगता है। विशेष रूप से, यदि आप एक निर्देशिका में कई फ़ाइलों की जाँच करना चाहते हैं।

एक त्वरित तरीका यह होगा कि सभी वीडियो के लिए थंबनेल उत्पन्न करें, और देखें कि थंबनेल पीढ़ी विफल कहाँ है।

find . -iname "*.mp4" | while read -r line; do 
  line=`echo "$line" | sed -r 's/^\W+//g'`; 
  echo 'HERE IT IS ==>' "$line"; 
  if ffmpeg -i "$line" -t 2 -r 0.5 %d.jpg; 
    then echo "DONE for" "$line"; 
  else echo "FAILED for" "$line" >>error.log; 
  fi; 
done;

यह विधि अन्य तरीकों की तुलना में बहुत तेजी से निकला।

हालांकि, वहाँ एक गुफा है। यह विधि गलत परिणाम दे सकती है, क्योंकि कभी-कभी थंबनेल भ्रष्ट फ़ाइलों के लिए भी उत्पन्न हो सकते हैं। उदाहरण के लिए, यदि वीडियो फ़ाइल केवल अंत में दूषित है, तो यह विधि विफल हो जाएगी।


0

MediaInfo किसी भी वीडियो फ़ाइल के बारे में जानकारी प्राप्त करने के लिए एक महान उपकरण है जिसे आप इसे फेंकना चाहते हैं। यह आपकी इच्छित जानकारी को हाइलाइट करने में सक्षम हो सकता है।

एक अन्य उपकरण GSpot है, लेकिन इसे 2007 से अपडेट नहीं किया गया है।

प्रत्येक को एक अच्छी और ज्ञात खराब फ़ाइल देने की कोशिश करें और परिणामों की तुलना करें।

मैं GSpot का उपयोग तब तक करता रहा जब तक कि इसे अपडेट नहीं किया गया, फिर MediaInfo पर स्विच कर दिया गया


1
मेरे पास अपनी मशीन पर GSpot के कुछ पुराने संस्करण हैं ... लेकिन यह पूरी तरह से कुछ अलग करने के लिए एक उपकरण है (कोड / डिकोड का निर्धारण ...)। इसका इससे कोई लेना-देना नहीं है। मैं मध्यस्थता करूंगा।
रूक

जीएसपोट रिपोर्ट करेगा कि क्या फ़ाइल का आकार या फ्रेम काउंट सूचकांक से अपेक्षित रूप से मेल नहीं खाता है (कहीं बाएं हाथ की तरफ, यह कुछ समय हो गया है क्योंकि मैंने इसका इस्तेमाल किया है!), बाद के संस्करणों ने भी बहुत अधिक कार्यक्षमता जोड़ी।
शेवेक

mediainfo निर्देशिकाओं को पुन: स्कैन कर सकता है: किसी भी स्तर पर सभी फाइलों की रिपोर्ट प्राप्त करने के लिए वर्तमान फ़ोल्डर से बस चलाएं mediainfo *
ccpizza

1
mediainfoस्पष्ट रूप से पूर्णता के लिए जाँच नहीं करता है। मैंने एक 33 एमबी webmवीडियो फ़ाइल ली और truncateउसे आधा कर दिया। mediainfoअभी भी दोनों के लिए लगभग एक ही आउटपुट था, भ्रष्टाचार का कोई स्पष्ट संकेत नहीं। बाद truncateवहाँ 1 MB ing अभी भी उत्पादन में भ्रष्टाचार का कोई स्पष्ट संकेत था। केवल तभी जब आप आउटपुट पर गहराई से देखते थे, कुछ विरोधाभासी जानकारी थी। लेकिन ये हिस्से वीडियो फ़ाइल के प्रारूप पर निर्भर करते हैं, इसलिए आप इस खोज को स्वचालित नहीं कर सकते।
टीनो

3
mediainfoकुछ भी नहीं पढ़ता है लेकिन मेटाडेटा। यह किसी भी तरह से आपकी फ़ाइल की वैधता की जाँच नहीं करेगा।
डैनियलस्मेडगार्डबस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.