python - Opencv videocapture के लिए स्थायी सुधार




ffmpeg (2)

यह सवाल कई वेबसाइटों पर कई बार सामने आया है, लेकिन निश्चित समाधान नहीं है। मैं फ़ंक्शन का उपयोग करके एक वीडियो के साथ Opencv को चलाने की कोशिश कर रहा हूं:

import cv2
cap = cv2.VideoCapture('video.mp4')
if(cap.isOpened()==False):
print "Error opening camera"

लेकिन यह हर बार विफल होता है। मैंने विभिन्न साइटों से लगभग सभी चरणों की कोशिश की है, लेकिन इसे काम करने के लिए नहीं मिल सकता है (अलग से ffmpeg के पुनर्निर्माण सहित)।

कोई भी सहायताकाफी प्रशंसनीय होगी।

मेरा मंच Ubuntu17 और पायथन 3 है।


मैंने Link से चरणों का पालन किया

तथा

ऊपर दिए गए Link में यह Cmake कमांड इस प्रकार है जो काम करता है

cmake -DWITH_CUDA = बंद -DBUILD_TIFF = पर -DBUILD_opencv_java = पर -DWITH_FFMPEG = पर -DBUILD_opencv_python3 = पर -DENABLE_AVX = पर -DWITH_OPENGL = पर -DWITH_OPENCL = -DWITH_IPP पर = -DWITH_TBB = पर -DWITH_EIGEN = -DWITH_V4L पर = चालू - DWITH_VTK = OFF -DBUILD_TESTS = OFF -DBUILD_PERF_TESTS = OFF -DCMAKE_BUILD_TYPE = RELEASE -DBUILD_openco_python2 = OFF -DCMAKE_INSTALL_PREFIX = (pywy3/) $। -D CMAKE_INSTALL_PREFIX = / usr / लोकल -D INSTALL_PYTHON_EXAMPLES = ON -D INSTALL_C_EXAMPLES = OFF -D PYTHON_EXECUTABLE = / home / user / anaconda3 / bin / python -DILILD_DILFD_DAMFIX_DREFIX

मैं OpenCV बिल्ड के बारे में अच्छी तरह से नहीं जानता हूँ, लेकिन सटीक PYTHON_EXECUTABLE = / home / user / anaconda3 / bin / python पाथ है जो मुझे लगता है कि OpenCV बाइंडिंग के लिए विशेष पायथन को अपडेट किया गया है।


यह उत्तर लिनक्स और पायथन को ध्यान में रखकर लिखा गया है, लेकिन सामान्य विचार OpenCV द्वारा समर्थित किसी भी OS और भाषा पर लागू किया जा सकता है।

वीडियो फ़ाइल को न खोलने वाले VideoCapture वर्ग के कई कारण हो सकते हैं, लेकिन निम्नलिखित तीन अधिकांश मामलों पर लागू होते हैं।

OpenCV FFMPEG समर्थन:

डिफ़ॉल्ट रूप से OpenCV वीडियो फ़ाइलों को पढ़ने के लिए ffmpeg का उपयोग करता है। OpenCV FFMPEG समर्थन के साथ नहीं बनाया गया हो सकता है। टर्मिनल एंटर में FFMPEG सपोर्ट के साथ OpenCV बनाया गया था या नहीं, यह जानने के लिए:

python -c "import cv2; print(cv2.getBuildInformation())" | grep -i ffmpeg

आउटपुट कुछ इस तरह होना चाहिए:

FFMPEG: हाँ

यदि आउटपुट No तो ffmpeg समर्थन के साथ स्रोत से OpenCV बनाने के लिए एक ऑनलाइन गाइड का पालन करें।

FFMPEG कोडेक:

यह संभव है कि FFMPEG में आपकी विशिष्ट फ़ाइल के लिए कोडेक न हों। हम इस वीडियो का उपयोग एक उदाहरण के रूप में करने जा रहे हैं, यह दिखाने के लिए कि क्या FFMPEG में इस फ़ाइल के लिए डिकोडिंग क्षमता है।

सबसे पहले, हमें इस वीडियो फ़ाइल में उपयोग किए गए एन्कोडिंग प्रारूप को खोजने की आवश्यकता है। हम mediainfo कार्यक्रम का उपयोग करेंगे। टर्मिनल में, दर्ज करें:

mediainfo video_file.mp4

आउटपुट में, वीडियो शीर्षक के तहत, प्रारूप की तलाश करें । इस मामले में प्रयुक्त वीडियो एन्कोडिंग AVC है , जो H264 का दूसरा नाम है।

अब, हम यह खोजने की कोशिश करते हैं कि क्या एफ़सी एनकोडेड फ़ाइलों को डिकोड करने के लिए एफएफएमपीजी कोडेक का समर्थन करता है। टर्मिनल में:

ffmpeg -codecs | grep -i avc

मेरी मशीन पर, आउटपुट है:

DEV.LS h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 भाग 10 (डिकोडर्स: h264 h264_crystalhd h264_vdpau) (एन्कोडर्स: libx264 libx264rgb)

हम DEV में रुचि रखते हैं, जिसका उद्देश्य डिकोडिंग, एन्कोडिंग और वीडियो है। इसका मतलब है कि AVC एक वीडियो एन्कोडिंग प्रारूप है और FFMPEG इस प्रारूप के लिए एन्कोडिंग और डिकोडिंग दोनों क्षमताओं का समर्थन करता है।

फ़ाइल पथ

अंत में, जांचें कि क्या फ़ाइल पथ सही है या भले ही फ़ाइल मौजूद है।





ffmpeg