2011-07-26 39 views
1

Matlabを使用してaviファイルを作成する際に問題が発生しています。私の目的は、ビデオ全体にエッジフィルターを使用し、ファイルをaviとして保存することです。フィルタは正常に動作し、私の問題はaviファイルの書き込みです。Matlab:aviファイルを書き込む

マイコード:

vidFile = VideoReader('video.avi'); 
edgeMov = avifile('edges','fps',30); 

for i = 1:vidFile.numberofframes 
    frameI = read(vidFile,i); 
    frameIgray = rgb2gray(frameI); 
    edgeI = edge(frameIgray,'canny',0.6); 
    edgeIuint8 = im2uint8(edgeI); 
    edgeIuint8(:,:,2) = edgeIuint8(:,:,1); 
    edgeIuint8(:,:,3) = edgeIuint8(:,:,1); 
    edgeMov = addframe(edgeMov,edgeIuint8); 
end 

edgeMov = close(edgeMov) 

ループが終了し、AVIFILEが閉じて、私はビデオを再生するために行くと、それは「このファイルを再生中にWindows Media Playerが問題に遭遇しました」と言います。私はMedia Player ClassicとVLCを試してみたところ、問題はファイルそのものでなければならないと私は思っていました。 GSpotを使ってファイルをチェックしたところ、AVIヘッダが壊れていると言われました。

ループを再試行しても、まったく同じ問題が戻されました。私が混乱しているのは、少ないフレーム数(例えば30本)のループを実行すると、ビデオがうまく書き込まれ、見ることができるということです。変換しようとしているビデオのサイズは1000フレームを超えているので、サイズが問題であるかどうかわかりません。

ご協力いただきますようお願い申し上げます。ありがとうございます。

+0

作成されたファイルのサイズはどのくらいですか? –

+0

@Richie Cottonちょうど4GBを下回っています。これは元のビデオより少し小さいです。 –

+0

@リキーコットン:私はそれが使用されている圧縮がないために大きかったと思います。私が下にコメントしたコーデックを使用すると、ファイルは約20MBしかありません。 –

答えて

2

私はそれを試してみるAVI

edgeMov = avifile('video.avi','compression','Indeo5','fps',15,'quality',95); 

を作成するには、次を使用しました。

+0

"IndeoコーデックはこのバージョンのWindowsではサポートされていません。別のコーデックを指定する必要があります。 Windows 7に別のコーデックを推奨できますか? –

+0

私はWindows XPでこれを使用しましたが、おそらく単にコーデックをインストールする必要があります:http://www.codecguide.com/download_kl.htm – Igor

+0

おそらく、私は見て、それが動作するかどうかを確認します。私はなぜ、私はフレームの大きな数をエンコードするためのコーデックが必要なのか分からない。奇妙な! –

関連する問題