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


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

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

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


100
2018-01-25 12:54


मूल


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


जवाब:


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

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

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

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

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

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

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

107
2018-01-25 13:05



वही गति जैसे कि यह परिवर्तित हो जाएगा। - Somebody
एक और विकल्प है ffprobe जो पैकेज में आता है ffmpeg। यह कोई रूपांतरण नहीं करता है लेकिन फ़ाइल से मेटाडेटा जानकारी को पढ़ता है। इसलिए यह मेटाडेटा में त्रुटियों का पता लगाएगा लेकिन फ़ाइल के भीतर कोई समस्या नहीं मिलेगी। व्यक्तिगत रूप से उपयोग कर रहे हैं ffprobe आगे प्रसंस्करण से पहले अपलोड किए जाने का तेज़ सत्यापन करने के लिए - mente
दुर्भाग्यवश फिल्म को देखने के लिए लगता है, लेकिन ऐसा लगता है जैसे यह काम करता है - MattPark
यदि, ओपी कहता है, "उहम के बीच में ब्रेक डाउनलोड करें ... डाउनलोड करें", यह बहुत संभावना है सब धाराएं बाधित हो जाएंगी, इसलिए आप डीकोडिंग को प्रतिबंधित करके इस त्रुटि का पता लगा सकते हैं सिर्फ एक ऑडियो ट्रैक (का उपयोग करते हुए -map), जो ऑपरेशन को काफी तेज करेगा: ffmpeg -v error -i in.mkv -map 0:1 -f null … यदि कोई त्रुटि है, तो यह बाइट स्थिति लॉग करेगा, जिसका उपयोग आप फ़ाइल को छोटा करने के लिए कर सकते हैं (एक मेगाबाइट या दो पहले सुरक्षित होने के लिए) और फिर डाउनलोड करना फिर से शुरू करें। - Lumi
एक पुराने हेक्स कोर प्रोसेसर पर, 1 जीबी 1hour लंबी। एमकेवी फ़ाइल का परीक्षण करने के लिए मुझे 4 1/2 मिनट लग गए। परीक्षण के दौरान सभी कोर अधिकतम किए गए थे। I हेक्स ने फ़ाइल की प्रतिलिपि संपादित की और क्षति का अनुकरण करने के लिए 00 के कुछ ब्लॉक जोड़े। त्रुटि लॉग ने त्रुटियों को सही तरीके से रिपोर्ट किया। त्रुटियों के बिना फ़ाइलों को एक खाली त्रुटि.लॉग लौटा दिया - TripleAntigen


मुझे उपयोग करने का विचार पसंद आया 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

7
2017-09-22 17:05



यदि आप इसे बनाते हैं तो यह टूटे हुए हिस्सों को अच्छे हिस्सों से बदल देता है, जो इससे भी बेहतर होगा - akostadinov
मुझे इसका उपयोग कर एक त्रुटि मिल रही है: - Akshit Rewari
ट्रेसबैक (सबसे हालिया कॉल अंतिम): फ़ाइल "एफ: \ filecheck.py", पंक्ति 6, <मॉड्यूल> टी = os.popen ('ffmpeg -v 5 -i "% s" -f null - 2> और 1' % sys.argv [1])। पढ़ें () इंडेक्स त्रुटि: सूची सूचकांक सीमा से बाहर है - Akshit Rewari


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

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

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

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


0
2018-01-25 13:13



मेरे पास मेरी मशीन पर जीस्पॉट का कुछ पुराना संस्करण है ... लेकिन यह कुछ पूरी तरह से अलग करने के लिए एक उपकरण है (कोड / डीकोड निर्धारित करना ...)। इसका इसके साथ कुछ लेना देना नहीं है। मैं mediainfo की जांच करूँगा। - Rook
जीस्पॉट रिपोर्ट करेगा कि फ़ाइल आकार या फ्रेम गिनती इंडेक्स से अपेक्षित नहीं है (कहीं बाईं तरफ, यह थोड़ी देर हो गई है क्योंकि मैंने इसका इस्तेमाल किया है!), बाद में संस्करणों ने भी अधिक कार्यक्षमता जोड़ा। - Shevek
मीडिया की जानकारी निर्देशिकाओं को दोबारा स्कैन कर सकते हैं: वर्तमान फ़ोल्डर से शुरू होने वाले किसी भी स्तर पर सभी फ़ाइलों की एक रिपोर्ट प्राप्त करने के लिए बस चलाएं mediainfo *। - ccpizza
mediainfo स्पष्ट रूप से पूर्णता की जांच नहीं करता है। मैंने 33 एमबी लिया webm वीडियो फ़ाइल और truncateआधे से डी। mediainfo अभी भी भ्रष्टाचार का कोई स्पष्ट संकेत नहीं, दोनों के लिए लगभग एक ही आउटपुट था। बाद truncate1 एमबी में आईएनजी में अभी भी आउटपुट में भ्रष्टाचार का कोई स्पष्ट संकेत नहीं था। केवल अगर आप आउटपुट पर गहराई से नजर रखते थे, तो कुछ विरोधाभासी जानकारी थी। लेकिन ये भाग वीडियो फ़ाइल के प्रारूप पर निर्भर करते हैं, इसलिए आप इस पहचान को स्वचालित नहीं कर सकते हैं। - Tino
mediainfo मेटाडेटा के अलावा कुछ भी नहीं पढ़ता है। यह आपकी फ़ाइल की वैधता को किसी भी तरह से जांच नहीं करेगा। - DanielSmedegaardBuus


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

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

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


0
2017-08-15 14:13



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


दूसरे जवाब के साथ समस्या का उपयोग कर 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
2018-04-11 12:16