web-dev-qa-db-ja.com

python opencv videowriteがビデオを書き込まない

python opencvでプログラミングを開始しました。opencv3.0.0チュートリアルの次のページを使用しました

ドキュメントを読むときのチュートリアル

動画を保存する例を使用しようとしても、機能しません。ウェブカメラのコンテンツを表示し、output.aviというファイルも作成しますが、ouput.aviのサイズを確認したところ、0バイトでした。 YUY2などのさまざまなコーデックを使用してみました

python 2.7.8とopencv 3.0.0とWindows 8.1を使用しています。

13
Zachzhao

私は同じ問題を抱えていましたが、ビデオ出力の解像度を入力とまったく同じに指定することで解決しました:

cap = cv2.VideoCapture('vtest.avi')
...
out = cv2.VideoWriter('output.avi',fourcc, 20.0,(int(cap.get(3)),int(cap.get(4))))

もちろん、ffmpegがインストールされて動作していることを確認してください。

16
Pijar

交換:

fourcc = cv2.VideoWriter_fourcc(*'XVID')

と:

fourcc = cv2.VideoWriter_fourcc('M','J','P','G')

私のために働いた...

より一般的には:

here の後に続くビデオ圧縮形式のfourccコードを調べます。コードが何であれ-たとえばFFMpegの 'FMP4'-次の方法でプラグインします。

cv2.VideoWriter_fourcc('F','M','P','4')
12
Lamar Latrell

正しい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で試すことができます。

6
Scott

私の場合、コーデックは障害だと思いましたが、そうではありませんでした。代わりに、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とその逆を可能にしました。コーデックの調整について心配する必要はありませんでした。

3
mmmFood

画像の解像度を確認してください!奇妙な形の画像(1284x709)を試してみたところ、1Kサイズの判読不能なビデオになってしまいました。画像のサイズを最も近い「一般的な」解像度であるimage = cv2.resize(image, (1280,720))に変更した後、問題なく動作しました。

1
nchaumont

使用しているコーデックに問題があるはずです。

やってみました:

cv.CV_FOURCC('i', 'Y', 'U', 'V')

これは私のために働いた。

1
Leonard Zhou

まったく同じ問題があります。私はC++でOpenCVを使用していますが、コーデックを選択する代わりに-1を渡して、Pythonでも使用可能なコーデックのドロップダウンメニューを表示できると思います。そこから私はすべての異なるコーデックを試しましたが、Leonard Zhouと同じように、IYUVコーデックは私のために働いたものでした。また、同じコードと同じコーデックインストーラーを備えた別のマシンでXVIDを問題なく使用できたとしても、これが唯一の方法であったことにも注意してください。

編集:私が提案したことはパッチとして機能しましたが、主な問題は実行可能ファイルのフォルダにopencv_ffmpeg dllを追加することで解決しました。

0
pandaman1234

ビデオライターのサイズを画面解像度のサイズに変更したところ、問題なく動作しました。

これが解決策です。

out = cv2.VideoWriter("output.avi", fourcc, 5.0, (1920, 1080))
0
CCVT

Windows 7でPython 2.7およびOpenCV 2.4.8を使用している場合、ファイルNAMEが"output.mpg"の場合、書き込みができないという事実を経験しました。

"output.avi"に変更することで解決しました。

0
schwang