2017-09-01 3 views
1

ビデオファイルにセンサー情報(時系列)をスーパーインポーズしたいとします。私はPythonとOpenCVがうまくいくと思って基本を学び始めたので、私は考えることができる最も単純なおもちゃの例を作ることに決めました。ビデオを読み込んでフレームごとにコピーします。フレーム単位でビデオフレームをコピーするときにビデオ出力がありません

これは私のコードです:

期待
import cv2 

src = cv2.VideoCapture('input.mp4') 
if not src.isOpened(): 
    print("Error opening src") 
    quit() 

width = int(src.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH)) 
height = int(src.get(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT)) 
fps = src.get(cv2.cv.CV_CAP_PROP_FPS) 

fourcc = cv2.cv.CV_FOURCC(*'XVID') 
dest = cv2.VideoWriter('output.avi', fourcc, fps, (height, width)) 
if not dest.isOpened(): 
    print("Error opening dest") 
    quit() 

ret, frame = src.read() 
while ret: 
    dest.write(frame) 
    ret, frame = src.read() 

dest.release() 
src.release() 
  • :XviDのファイルとしてinput.mp4の正確なコピーoutput.avi
  • ではを観測:output.aviは明らかにのみ含まれている5.6キロバイトのファイルですAVIヘッダー。それはmplayerによって再現することはできず、どちらもcv2.VideoCaptureで読み取ることはできません。

これらは私の設定です:

  • のDebian GNU/Linuxの9
  • のPython 2.7.13
  • cv.__version__リターン '2.4.9.1'
  • のFFmpeg 3.2.5-1

再現性のために、非常に短いYouTube動画をでダウンロードするコマンドラインがあります:

youtube-dl 'https://www.youtube.com/watch?v=RfkcI8dhfsQ' -o input.mp4 
+0

「読み取り」は実際には成功しましたか? –

+0

そうだと思います。ループは51回実行されます。 (私の質問に記載されているサンプルのYouTubeビデオについて) – giusti

+0

Open CV 2xがFFmpeg 3xと互換性がないという提案を読んだことがありますが、これが私の場合に関連するかどうかを確認する方法はわかりません。 – giusti

答えて

1

この行では、(width,height)ない(height, width)次のようになります。

dest = cv2.VideoWriter('output.avi', fourcc, fps, (height, width)) 

VideoWriterは、あなたがそれ以外の場合は正しく動作しません書いているのフレームと同じ大きさを持っている必要があります。

+0

ありがとう!私は 'frame.shape()'が '(height、width、depth)'を返すことに惑わされていると思います。 – giusti

+0

@giustiええ、なぜ彼らはその高さ、幅をとにかく行うのか分かりません。それは単に人々を混乱させるだろう。 – ROAR

関連する問題