2015-12-03 6 views
5

मैं सख्त एक सुविधाजनक तरीका के लिए खोज कर रहा हूँ ffmpeg उस में फ़ोल्डर्स के साथ एक विशिष्ट निर्देशिका के अंदर .mp4 फ़ाइलों की अखंडता की जाँच करने के साथ एक निर्देशिका के अंदर वीडियो फ़ाइलों की अखंडता की जाँच करें। .mp4 फ़ाइलों और फ़ोल्डर्स के दोनों नाम रिक्त स्थान, विशेष वर्ण और संख्याएं हैं।जल्दी

मैं पहले से ही एक उचित ffmpeg आदेश मिल गया है जल्दी से एक क्षतिग्रस्त .mp4 फ़ाइल, here से लिया पहचान करने के लिए: ffmpeg -v error -i filename.mp4 -map 0:1 -f null - 2>error.log

बनाया error.log कुछ प्रविष्टियों, फिर फ़ाइल को स्पष्ट रूप से दूषित है शामिल हैं। विपरीत एक खाली त्रुटि होगी। लॉग इन करें।

अगले कदम फ़ोल्डर और इसके उप-भीतर हर .mp4 फ़ाइल को यह आदेश लागू करने के लिए किया जाएगा। कुछ गाइड, here और here की तरह, वर्णन करते हैं कि कैसे एक ffmpeg आदेश रिकर्सिवली लागू करने के लिए, लेकिन मेरे कोडन कौशल सीमित हैं, इसलिए मैं इन आदेशों संयोजित करने का उपाय नहीं मिल सकता है निम्नलिखित पाने के लिए:

करने के लिए एक रास्ता एक फ़ोल्डर (रिकर्सिवली) ऊपर उल्लिखित ffmpeg कमांड के साथ अंदर सभी .mp4 फ़ाइलों का परीक्षण, कि लॉग फ़ाइलों को बनाने चाहिए, एक वीडियो फ़ाइल त्रुटियों (पढ़ने के कुछ सामग्री है) होते हैं करता है केवल अगर और, के लिए यह टूटा फ़ाइल का नाम वारिस चाहिए पता है कि कौन सी फाइल दूषित है।

उबंटू Gnome 15.10 का उपयोग करना।

+1

आप एक बैच स्क्रिप्ट (Windows) या एक खोल स्क्रिप्ट (यूनिक्स) की ज़रूरत है? –

+0

एक शेल स्क्रिप्ट, क्योंकि मैं उबंटू जीनोम 15.10 का उपयोग कर रहा हूं। अग्रिम में बहुत धन्यवाद। – DMT

उत्तर

4

इस आदेश का प्रयास करें: "*.mp4":

find . -name "*.mp4" -exec ffmpeg -v error -i "{}" -map 0:1 -f null - 2>error.log \; 

find आदेश वर्तमान निर्देशिका रिकर्सिवली जो दिए गए पैटर्न के अनुरूप में सभी फाइलों पाता है। -exec के बाद वह आदेश आता है जिसे आप सभी फ़ाइलों के लिए चलाने के लिए चाहते हैं। "{}" वर्तमान फ़ाइल का नाम बदलता है, जहां उद्धरण फ़ाइल नामों में रिक्त स्थान की अनुमति देते हैं। आदेश \; के साथ समाप्त होना है।

संपादित करें:

कोड ऊपर केवल एक लॉग फ़ाइल को पूरी तरह उत्पन्न करता है। .mp4 फ़ाइलों के लिए अलग .log फ़ाइलें बनाने के लिए उनके नाम के साथ प्रत्येक, आप {} प्रतीक एक बार उपयोग कर सकते हैं:

find . -name "*.mp4" -exec sh -c "ffmpeg -v error -i {} -map 0:1 -f null - 2>{}.log" \; 
+0

एंड्रिया, तेजी से प्रतिक्रिया देने के लिए धन्यवाद! आपका आदेश केवल आंशिक रूप से काम करता है: हालांकि यह अपने उपफोल्डर के साथ किसी फ़ोल्डर के अंदर सभी फ़ाइलों को ध्यान में रखता है, केवल एक त्रुटि.लॉग सभी फ़ाइलों के लिए बनाई गई है। बुरी बात यह है कि मैं अकेले इस .log फ़ाइल की सामग्री से टूटी हुई वीडियो फ़ाइलों की पहचान नहीं कर सकता, क्योंकि यह मुझे केवल फ़ाइल के टूटे बाइट दिखाता है, लेकिन फ़ाइल नाम ही नहीं। इसलिए मैं एक कमांड, कि प्रत्येक क्षतिग्रस्त वीडियो फ़ाइल के लिए एक अलग log फ़ाइल पैदा करेगा, क्षतिग्रस्त वीडियो फ़ाइल के रूप में एक ही नाम होगा के लिए खोज कर रहा हूँ। – DMT

+0

@dmt अद्यतन उत्तर देखें, मुझे आशा है कि इससे मदद मिलती है! –

+0

इस बार आपके अपडेट किए गए आदेश ने एक .log फ़ाइल बनाई जिसे {} .log कहा जाता है। कुछ गलत हो गया। – DMT

3

मैं हाल ही में एक ही समस्या के साथ मुलाकात की है, लेकिन मुझे लगता है कि वहाँ पता लगाने के लिए एक सरल हैक जो फ़ाइलों टूट रहे हैं:

find -name "*.mp4" -exec sh -c "echo '{}' >> errors.log; ffmpeg -v error -i '{}' -map 0:1 -f null - 2>> errors.log" \; 

इस तरह त्रुटियों फ़ाइल नाम (और पथ) का पालन करें।

+1

बेहतर स्वरूपण sourcery 'ढूंढने के लिए भी। -नाम "* .mp4" -exec sh -c "echo '{} \ t \ c' >> error.log; ffmpeg -v त्रुटि -i '{}' -map 0: 1 -f null - 2 >> error.log; echo '' >> error.log "\;' – awiebe

संबंधित मुद्दे