python opencvでプログラミングを開始しました。opencv3.0.0チュートリアルの次のページを使用しました
動画を保存する例を使用しようとしても、機能しません。ウェブカメラのコンテンツを表示し、output.aviというファイルも作成しますが、ouput.aviのサイズを確認したところ、0バイトでした。 YUY2などのさまざまなコーデックを使用してみました
python 2.7.8とopencv 3.0.0とWindows 8.1を使用しています。
私は同じ問題を抱えていましたが、ビデオ出力の解像度を入力とまったく同じに指定することで解決しました:
cap = cv2.VideoCapture('vtest.avi')
...
out = cv2.VideoWriter('output.avi',fourcc, 20.0,(int(cap.get(3)),int(cap.get(4))))
もちろん、ffmpegがインストールされて動作していることを確認してください。
交換:
fourcc = cv2.VideoWriter_fourcc(*'XVID')
と:
fourcc = cv2.VideoWriter_fourcc('M','J','P','G')
私のために働いた...
より一般的には:
here の後に続くビデオ圧縮形式のfourccコードを調べます。コードが何であれ-たとえばFFMpegの 'FMP4'-次の方法でプラグインします。
cv2.VideoWriter_fourcc('F','M','P','4')
正しいfourcc 4バイトコードを使用していることを確認してください。チュートリアルの例は次のとおりです。
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480))
この「XVID」コードはLinuxでのみ機能します。例の上のドキュメントには、(チュートリアルで)「Windowsの場合:DIVX(テストと追加が必要)」と記載されています。したがって、そうでない場合は、上のfourcc行を次のように置き換えてみてください。
fourcc = cv2.VideoWriter_fourcc(*'DIVX')
私はLinuxでcv2.VideoWriterを頻繁に使用していますが、常に機能します。したがって、上記がうまくいかない場合は、いつでもLinux VMで試すことができます。
私の場合、コーデックは障害だと思いましたが、そうではありませんでした。代わりに、videoWriter()が使用するディメンションを調整することでトリックが行われました。
(ok, frame) = cv2.VideoCapture(videoPath).read()
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter(output, fourcc, 10.0, (1280, 720))
ビデオ出力(1280、720、3)からのframe.shapeのため、(1280,720)が使用されました。それはmp4へのaviとその逆を可能にしました。コーデックの調整について心配する必要はありませんでした。
画像の解像度を確認してください!奇妙な形の画像(1284x709)を試してみたところ、1Kサイズの判読不能なビデオになってしまいました。画像のサイズを最も近い「一般的な」解像度であるimage = cv2.resize(image, (1280,720))
に変更した後、問題なく動作しました。
使用しているコーデックに問題があるはずです。
やってみました:
cv.CV_FOURCC('i', 'Y', 'U', 'V')
これは私のために働いた。
まったく同じ問題があります。私はC++でOpenCVを使用していますが、コーデックを選択する代わりに-1
を渡して、Pythonでも使用可能なコーデックのドロップダウンメニューを表示できると思います。そこから私はすべての異なるコーデックを試しましたが、Leonard Zhouと同じように、IYUV
コーデックは私のために働いたものでした。また、同じコードと同じコーデックインストーラーを備えた別のマシンでXVIDを問題なく使用できたとしても、これが唯一の方法であったことにも注意してください。
編集:私が提案したことはパッチとして機能しましたが、主な問題は実行可能ファイルのフォルダにopencv_ffmpeg
dllを追加することで解決しました。
ビデオライターのサイズを画面解像度のサイズに変更したところ、問題なく動作しました。
これが解決策です。
out = cv2.VideoWriter("output.avi", fourcc, 5.0, (1920, 1080))
Windows 7でPython 2.7およびOpenCV 2.4.8を使用している場合、ファイルNAMEが"output.mpg"
の場合、書き込みができないという事実を経験しました。
"output.avi"
に変更することで解決しました。