[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2chのread.cgiへ]
Update time : 05/09 10:56 / Filesize : 216 KB / Number-of Response : 647
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

DirectShowと戦うスレ Part 2



1 名前:デフォルトの名無しさん [2006/11/08(水) 00:25:56 ]
前スレ
pc8.2ch.net/test/read.cgi/tech/1026666092/

45 名前:デフォルトの名無しさん [2006/11/16(木) 08:09:05 ]
>>43
保管したファイルを解凍の時点でわかんない
向こうで質問するにしても気をつけれ

46 名前:デフォルトの名無しさん [2006/11/16(木) 20:15:19 ]
つかDirectShowも所詮はCOMだしなぁ
.NETで動画触ろうと思ったら
結局何が一番良いんだろうなぁ

47 名前:デフォルトの名無しさん mailto:sage [2006/11/16(木) 21:46:09 ]
所詮はCOMってどーゆー意味だろ

48 名前:デフォルトの名無しさん mailto:sage [2006/11/16(木) 22:14:38 ]
COM拒否症かも

49 名前:デフォルトの名無しさん mailto:sage [2006/11/16(木) 23:22:12 ]
>>38とか>>40とか色々まとめると
動画に静止画とかを挿入するような
単純な機能だけならVFWで十分
と思って良い?

50 名前:デフォルトの名無しさん [2006/11/17(金) 08:50:22 ]
じゃあSHOWってなにがすごいのさ?

51 名前:デフォルトの名無しさん [2006/11/17(金) 09:02:24 ]
すごいかどうかは別にして、VFWでできることはDirectShowでも簡単にできる。
あえてVFWを使う必要なしってことかな。

52 名前:デフォルトの名無しさん mailto:sage [2006/11/17(金) 13:17:19 ]
COMでとっつきにくいのを乗り越えてDirect Showで書いても
別に局.NETでマネージされてくれるわけでもないし
じゃあ結局どの辺にご利益があるのかなあ
と言うことだとエスパー

53 名前:52 mailto:sage [2006/11/17(金) 13:20:15 ]
スマソ2行目の局は入力ミス
脳内あぼーんしてくれ



54 名前:デフォルトの名無しさん mailto:sage [2006/11/17(金) 14:20:12 ]
>>50
AVI 以外を扱いたくなったときに対応可能ってとことか。

>>46
.Net で動画触るなら、C++/CLI で書くのが一番。
DirectShow でも WMF でも SDK 使って普通に使える。

55 名前:デフォルトの名無しさん mailto:sage [2006/11/18(土) 01:06:37 ]
単にVFWを捨ててDirectXに統合したかったんでしょ。
で、のちのち気が変わってDirectShowだけプラットフォームSDKに移動したと。

56 名前:デフォルトの名無しさん mailto:sage [2006/11/18(土) 14:11:04 ]
プラットフォームSDKへの移動は、どちらかというと昇格だね。

57 名前:デフォルトの名無しさん mailto:sage [2006/11/19(日) 09:52:40 ]
DVDでコマ送り、コマ戻しはどのようにやるのがよいのでしょう?

58 名前:デフォルトの名無しさん mailto:sage [2006/11/19(日) 11:44:04 ]
。みいかはいつ対応するの?

59 名前:デフォルトの名無しさん mailto:sage [2006/11/20(月) 01:32:42 ]
なんでそんな書き方する?普通にドットネットってかけよ。

60 名前:デフォルトの名無しさん mailto:sage [2006/11/20(月) 01:46:12 ]
最初のshiftが同時押しになったらしい

61 名前:デフォルトの名無しさん [2006/11/20(月) 18:26:00 ]
.NETのことだったのか

62 名前:デフォルトの名無しさん [2006/11/24(金) 02:05:52 ]
質問です。
変換フィルタを使って動画の画面サイズ解像度を変更(下げる)するフィルタ
を作ろうかなと考えております。
中身の処理はアンチエイリアスを自作する予定です。
【質問】
壱:OutPinに解像度を設定する項目があると思うんですがどうやってするんでしょうか?
弍:動画(1秒に15枚のBMP画像)を周波数解析したら普通のPCでは処理重杉でしょうか?

63 名前:デフォルトの名無しさん mailto:sage [2006/11/24(金) 03:31:07 ]
1.希望サイズ、フォーマットの出力メディアタイプの提示をする。(TransformフィルタならGetMediaTypeで提示したいメディアタイプを返す。)
2.JPEG圧縮だって一応周波数に変換するから何とかなるんじゃない?



64 名前:デフォルトの名無しさん [2006/11/24(金) 04:46:37 ]
>>63
壱:InputPinからGetMediaTypeで解像度取得してSetMediaTypeで
下流ストリームに教えてあげるのね。やってみます。
弍:JPEGはDCT。コサイン変換で周波数解析すればおk
と言う事と深読みしてみる(`・ω・´)
回答いただきありがとうございます。

65 名前:デフォルトの名無しさん mailto:sage [2006/11/24(金) 14:39:06 ]
なんか公式の解説ページにあるコードが間違いだらけな気がするのは俺だけ?
明らかにNullのクラスポインタからメソッド呼び出そうとしてたり

66 名前:デフォルトの名無しさん mailto:sage [2006/11/24(金) 15:04:07 ]
>>44
動画板って特別企画の動画2ch板のことか?
あそこに初心者質問スレが立つことなんてあるのか?

67 名前:デフォルトの名無しさん [2006/11/24(金) 20:07:34 ]
>>64
下流ストリームに教えてあげるのはGetMediaTypeと思われ。。。

68 名前:デフォルトの名無しさん [2006/11/24(金) 21:10:08 ]
>>67
なんですと〜。ちゃんと
確認の意味で書いてよかった。

へるぷ見て勉強しなおします

69 名前:デフォルトの名無しさん mailto:sage [2006/11/24(金) 23:31:34 ]
>>68
ヘルプもいいけど、ベースクラスのソースとサンプル見た方が早いよ

70 名前:デフォルトの名無しさん [2006/11/25(土) 01:01:26 ]
>>68
「おいおい、あんた何を俺にくれるのよ?」が GetMediaType

71 名前:デフォルトの名無しさん mailto:sage [2006/11/25(土) 01:05:01 ]
>>65
あるね。ビルドやってないだろ、見たいなの。

72 名前:デフォルトの名無しさん mailto:sage [2006/11/25(土) 02:43:18 ]
DirectShowってやっぱ"Show"って言ってるだけあって
入力方向より出力方向の方が充実してるって感じなんでしょうか?
正直、他アプリからDirectShowへの入力はかなりイマイチな希ガス

73 名前:デフォルトの名無しさん mailto:sage [2006/11/25(土) 03:07:28 ]
ソースフィルタ側ってあんまり活用されてないよねえ



74 名前:デフォルトの名無しさん mailto:sage [2006/11/25(土) 08:05:50 ]
上流はプッシュ、プルモデルを正しく理解して実装するのは(最初のうちは)大変かと 
トランスフォームなら良くわからなくても実装しやすいからね

75 名前:デフォルトの名無しさん mailto:sage [2006/11/25(土) 12:15:15 ]
フィルタ開発しているとピン接続を拒否されたときの理由を調べるのがつらい。
もっと簡単にわかってほしい。

76 名前:デフォルトの名無しさん mailto:sage [2006/11/27(月) 01:07:10 ]
>>51とかよぉ、VFWとやらがどんなもんなのかはまあ知らねぇんだが
DirectShowが簡単ってこたぁねぇ気がすんだがなぁ。
普及させたいからかなんか知らんが誤解を与えるような表現はイクナイ

77 名前:デフォルトの名無しさん mailto:sage [2006/11/27(月) 01:40:18 ]
簡単じゃないけどそれはハードルであって
そこを超えると何もかもが簡単になるという

RUBYYYYYYYYYYYYYYYYYYY

ってやつ

78 名前:デフォルトの名無しさん mailto:sage [2006/11/27(月) 13:03:01 ]
質問です。
長さ無制限のストリームを供給し続けるプル型のソースフィルタを実装することは可能でしょうか?
IAsyncReader::LengthでTotalバイトを取得できるようになっていますので、ここに長さ無制限を示す数値を設定しないといけないのかとは思うのですが、
0や-1を返すとかありなのでしょうか。

ご存知のかたいらっしゃいましたら、ご教示お願いします。



79 名前:デフォルトの名無しさん [2006/11/27(月) 23:36:33 ]
素人でスマンが、DrectXからDirectShowへ入力しようとしてるんだが、
俺なりに調べてみた所、サーフェイスを云々してRECT型使ってGDI経由で入力、
と言うようなスマートじゃない方法しか思いつかないんだが、
何か調べ方間違ってるんだろうか?
WindowsXP限定なら他にもありそうな感じだったがそれはしたくない。

そもそもこういう用途でDirectShowを使おうとすること自体間違いなんだろうか?
Directつながりでやりやすそうとか安易に思ってたんだが。

80 名前:デフォルトの名無しさん mailto:sage [2006/11/28(火) 00:48:21 ]
よくわからんがDirectShowのレンダラに絵を表示させる仕事をさせたいわけ?
できなくはないが簡単にはできない。

81 名前:79 mailto:sage [2006/11/28(火) 01:35:49 ]
編集とか圧縮とかもできればやりたいが基本的にはまずは動画を出力したい、
レンダラ側とかは何とかなりそうだが、ソース側が‥
「プッシュ型ならどっちかって言うと簡単」みたいな記述を↓で見かけて
m--takahashi.com/old/09850.html
鵜呑みにしてソースフィルタ自作しようと思ったものの失敗だったか?
かと言ってFile Monikerとやらも簡単そうには見えないし

と言った状況であります。

82 名前:デフォルトの名無しさん mailto:sage [2006/11/28(火) 13:36:05 ]
>>81
DirectX でレンダリングした結果を動画ファイルにしたいってこと?
それってソースフィルタ書くことになるわけだけど、ソースフィルタ書くってのは
DirectShow のアレコレの中でも非常に難しいことなので、覚悟してやってくれ。
あとプッシュにするかプルにするかは勝手に選べるわけでもないんで、
その辺の理解も必要(パーサが対応してる方じゃないとそもそもグラフが組めない)。
漏れならWMF SDKで WMV にするなぁ。

あと万が一もし単に画面に動画を出したいだけなら、DirectXだけでそのままやれば十分。
ってかDirectShowのレンダラもDirectXで描いてるわけで。

83 名前:デフォルトの名無しさん mailto:sage [2006/11/28(火) 15:58:15 ]
WMF SDKは日本語のドキュメントが公開されてないっぽいので躊躇してたが
実際インストールしてマニュアル見たらこっちのほうが簡単そう

>>82ありがとうございました



84 名前:デフォルトの名無しさん [2006/11/28(火) 19:34:50 ]
62ですが動画サイズ変換フィルタでしました
ありがとうございました

なぜGetMediaTypeの中に出力Pinの設定をかくのか未だ謎。
まぁもう少し使い勝手(入力画像サイズの自動判断など)よくしたら
ソースとバイナリうpします
今後の為にも

85 名前:デフォルトの名無しさん [2006/11/28(火) 19:36:21 ]
う〜〜〜ん 何をしたいのか よくわからん。
DirectXで描画したイメージを100%忠実に取り出すことなんて そもそもできるのか? 

86 名前:デフォルトの名無しさん mailto:sage [2006/11/28(火) 22:49:29 ]
> なぜGetMediaTypeの中に出力Pinの設定をかくのか未だ謎。
ココわからないと、この先しんどいと思われ

87 名前:デフォルトの名無しさん [2006/11/28(火) 23:01:47 ]
>>86
GetMediaTypeは上流ストリームの設定を取るインターフェースだけではなく

下流ストリームの接続の設定も取るしくみなのかしら?
だとしたらPinそれぞれにMediaTypeを取れるインターフェースを作ってもらいたいものよね

88 名前:デフォルトの名無しさん [2006/11/28(火) 23:52:18 ]
>>87
だからそうなってるだろ?

89 名前:デフォルトの名無しさん mailto:sage [2006/11/29(水) 17:43:12 ]
>>84
後学の為の資料としてソースうpしてくれるなら
ソースは直接書き込んだ方がいいかも。
うpろだだと後々検索でこのスレ見た人とかは拾えないから。

>>85
DllInjectionでDirect3D乗っ取ってフロントバッファを取得して、
それを直接DirectShowに流して動画キャプチャソフトを作りたいんじゃないかな?
俺は>>83じゃないからわからんけど。質問見た感じそんな所じゃないかなーと思った


90 名前:デフォルトの名無しさん [2006/11/29(水) 19:49:16 ]
>>89
わかりました。
えいちてぃーえむえるにしてソースをどこかに貼りますね。
ただまだ解決出来ない問題がありますので暫くかかると思うけど…

画面の解像度変更すると出力Pinとレンダラの間に中間フィルタ「Colorコンバータ」が何故か入る
(´・ω・`)

中間フィルタさえはいらなきゃちゃんと表情されるのに…

91 名前:デフォルトの名無しさん [2006/11/30(木) 02:41:37 ]
>>89
フロントバッファと画面イメージって必ずしも同じじゃないんじゃ?
よくわからんけど。。。

92 名前:デフォルトの名無しさん mailto:sage [2006/11/30(木) 22:47:39 ]
>>91
え、BeginScene()とEndScene()の間のレンダリング結果が
Present()によってバックバッファからフロントバッファに
Blt(あるいはFlip)されると思ってたけど、違う?

93 名前:デフォルトの名無しさん [2006/12/07(木) 14:28:29 ]
class CGrabCB: public CUnknown, public ISampleGrabberCB
{

          ・
          ・
とコールバックとかいうのをすると、下記のようなエラーがでるのですが
どうすればよいのでしょうか?

.\AAA.cpp(489) : error C2504: 'CUnknown' : 定義されていない基本クラスが宣言されています。
.\AAA.cpp(492) : error C2501: 'CGrabCB::DECLARE_IUNKNOWN' : 識別名を宣言するのに、型が指定されていません。
.\AAA.cpp(1057) : error C2259: 'CGrabCB' : 抽象クラスをインスタンス化できません。
次のメンバが原因です :
'HRESULT IUnknown::QueryInterface(const IID &,void ** )' : 純粋仮想関数は定義されていません。
c:\Program Files\Microsoft Platform SDK\Include\Unknwn.h(113) : 'IUnknown::QueryInterface' の宣言を確認してください。
'ULONG IUnknown::AddRef(void)' : 純粋仮想関数は定義されていません。
c:\Program Files\Microsoft Platform SDK\Include\Unknwn.h(117) : 'IUnknown::AddRef' の宣言を確認してください。
'ULONG IUnknown::Release(void)' : 純粋仮想関数は定義されていません。
c:\Program Files\Microsoft Platform SDK\Include\Unknwn.h(119) : 'IUnknown::Release' の宣言を確認してください。



94 名前:デフォルトの名無しさん mailto:sage [2006/12/07(木) 14:38:30 ]
まず、CUnknownはどこから出てきた?
仮にCUnknownがIUnknownのメソッドを実装するクラスとして存在したとしても、
C++ではCGrabCBがCUnknownを継承しただけでは、
ISampleGrabberCBのIUnknownのメソッドを実装したことにはならないはず。

95 名前:デフォルトの名無しさん [2006/12/07(木) 14:51:07 ]
実はうまくできてるパソコンがあって、別のPCでも動かそうと思ったら、
このエラーが出てしまって。前も出たのですがどうやって修正したのか忘れてしまった
次第です。
やり方は
ttp://vision.kuee.kyoto-u.ac.jp/~hiroaki/firewire/directshow.html
を真似しました。

96 名前:93 [2006/12/07(木) 14:59:05 ]
streams.hをインクルードし忘れてました。。
で、インクルードすると
C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\include\atlconv.h(1000) : error C2084: 関数 'LPDEVMODEA AtlDevModeW2A(LPDEVMODEA,const DEVMODEW *)' は既に本体を持っています。
C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\include\atlconv.h(548) : 'AtlDevModeW2A' の前の定義を確認してください
C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\include\atlbase.h(6683) : warning C4193: #pragma warning(pop) : 一致する '#pragma warning(push)' がありません

またエラーが出てきてしまいました。前はこれでうまく言ったのですが・・

97 名前:デフォルトの名無しさん mailto:sage [2006/12/10(日) 22:24:56 ]
DirectShowでWEBカメラ映像を表示するプログラムを作ったのですが、
TVチューナーの付いたパソコンだとTV映像が表示されてしまいます。

なんとかWEBカメラに限定させることはできないでしょうか?

98 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 17:08:23 ]
今、WMVを無圧縮AVIにするプログラムを作っているのですが
(最終的に別のソフトでxvidでmp4にする予定)
出力されるAVIが映像の再生時間だけ2倍になってしまいます
(音は普通に再生)

Directshowでの調整がうまくいかなかったので一度AVI作成後にRateとScaleとMicroSecPerFrameを調整して
AVI状態ならずれの修正はできたのですが、それをmp4に変換すると再生がおかしくなってしまい
原因がつかめなかったのでDirectshowでAVI作成するところまでもどってきたのですが
Grapheditでマスターストリーム指定で30秒くらいのファイル一個だけですがうまくいったので<wmv9
IConfigAviMuxをソースに追加してみてSetMasterStreamが成功はしているのですが
結果に反映されてくれません。

ソースは以下のようなものなのですがどこがいけないのでしょうか

-------------------------------------------------------------------------
IGraphBuilder*pGraph= NULL;
ICaptureGraphBuilder2*pBuilder= NULL;
IBaseFilter*pSrc= NULL;
IBaseFilter*pMux= NULL;
IBaseFilter*pAudioDec= NULL;
IBaseFilter*pAVIDec= NULL;
IPin*pPinIn= NULL;
IPin*pPinOut= NULL;
IMediaSeeking*pSeek= NULL;
IMediaSeeking*pRate= NULL;
IMediaEvent*pMediaEvent= NULL;
IMediaControl*pMediaControl;
longevCode;


99 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 17:08:55 ]
CoInitialize(NULL);

CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC, IID_IGraphBuilder, (void **)&pGraph);
CoCreateInstance(CLSID_CaptureGraphBuilder2, NULL, CLSCTX_INPROC, IID_ICaptureGraphBuilder2, (void **)&pBuilder);

IBaseFilter *pAVIMux =NULL;//+id{CLSID_AVI mux}_GUID
pAVIMux = searchFilter(pGraph, L"AVI Mux" );

IConfigInterleaving *pConf = NULL;
IConfigAviMux *pConfMux = NULL;
pGraph->AddFilter(pAVIMux, L"AVI Mux");

LONG lo = -1;

pBuilder->SetOutputFileName(&MEDIASUBTYPE_Avi, OutputFile, &pMux, NULL));

pBuilder->GetFiltergraph(&pGraph));
pGraph->AddSourceFilter( InputFile, L"SourceFilter", &pSrc));

pAVIDec = AVI Decompressorフィルタ取得
pAudioDec = WMAudio Decoder DMOフィルタ取得

pGraph->AddFilter(pAVIDec, L"AVI Decompressor");
pGraph->AddFilter(pAudioDec, L"WMAudio Decoder DMO");

pPinOut = GetPin(pSrc, PINDIR_OUTPUT);
pPinIn = GetPin(pAudioDec, PINDIR_INPUT);
pGraph->Connect(pPinOut, pPinIn);

pBuilder->RenderStream( NULL, NULL, pSrc, pAVIDec, pMux );

100 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 17:10:19 ]
pBuilder->RenderStream( NULL, NULL, pSrc, NULL, pMux );
pGraph->QueryInterface(IID_IMediaControl, (void **)&pMediaControl);
pGraph->QueryInterface(IID_IMediaEvent, (void **)&pMediaEvent);

pMux->QueryInterface(IID_IMediaSeeking, (void**)&pSeek);

CLSID id;
pAVIMux->GetClassID(&id);
CoCreateInstance(id, NULL, CLSCTX_INPROC, IID_IConfigAviMux, (void **)&pConfMux);
pAVIMux->QueryInterface(IID_IConfigAviMux, (void**)&pConfMux);
pConfMux->QueryInterface(IID_IConfigAviMux, (void **)&pAVIMux);
pConfMux->GetMasterStream(&lo);
pConfMux->SetMasterStream(1);
pConfMux->GetMasterStream(&lo);

if (pMediaControl->Run() == S_OK)
{
途中経過表示など
}

//終了処理
if(pRate != NULL) pRate->Release();
if(pConf != NULL) pConf->Release();
if(pAVIMux != NULL) pAVIMux->Release();
if(pConfMux != NULL) pConfMux->Release();

if(pAudioDec != NULL) pAudioDec->Release();
if(pAVIDec != NULL) pAVIDec->Release();
if(pGraph != NULL) pGraph->Release();
if(pBuilder != NULL) pBuilder->Release();

101 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 17:11:22 ]
if(pSrc != NULL) pSrc->Release();
if(pMux != NULL) pMux->Release();
if(pMediaEvent != NULL) pMediaEvent->Release();
if(pSeek != NULL) pSeek->Release();
if(pMediaControl != NULL) pMediaControl->Release();
if(pPinIn != NULL) pPinIn->Release();
if(pPinOut != NULL) pPinOut->Release();
CoUninitialize();
-----------------------------------------------------------------------
いろいろ試行錯誤していたので少し読みにくくてもうしわけありません。

102 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 17:21:22 ]
CLSID id;
pAVIMux->GetClassID(&id);
CoCreateInstance(id, NULL, CLSCTX_INPROC, IID_IConfigAviMux, (void **)&pConfMux);
pAVIMux->QueryInterface(IID_IConfigAviMux, (void**)&pConfMux);
pConfMux->QueryInterface(IID_IConfigAviMux, (void **)&pAVIMux);

の辺りを主にいじっていました(コードを実行する場所をかえたりなども)

103 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 17:33:02 ]
>>98-102
WMV: 各サンプルにタイムコードあり
AVI: 各サンプルにタイムコードなし

とかこのあたりの問題はOK?



104 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 17:42:49 ]
AVI→mp4の変換がうまくいかなかずに調べていて自分で出力済みのAVIを
いじるのは無理と判断しまして、Directshowで出力前設定をいじれば勝手に
それをはさんでくれるのではないかと思いまして(Grapheditではうまくいったので)

動画関係をいじりはじめたのがつい最近なので色々調べはしましたが
細かいところはよくわかっていないと思います

105 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 17:46:28 ]
「AVI→mp4の変換がうまくいかなかずに」

「AVI→mp4の変換がうまくいかずに」
が誤字なのとそのあとの調べたものを書きそこねました
自分で無理だと判断↓原因がタイムコードです


106 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 19:56:38 ]
GraphEditではどんなフィルタ構成になった?

107 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 19:57:30 ]
>>97 ソースをWEBカメラになるように明示的に指定すればいいんじゃね?

108 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 20:26:13 ]
>107
そういうのって、どこかで指定できましたっけ?
接続してるカメラを列挙してるから
カメラ以外は入ってこないと思ってたんですが。

109 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 22:20:47 ]
なんかフレームの持続時間が意識されていないような気がするけどどうだろう。
>>103氏の懸念していることに近いけど。

入力のWMVと出力されたAVIの総フレーム数は一致しているだろうか。
また、それぞれのフレームレートはどうなっているのかな?
その辺の具体的な数値があった方が状況を確認しやすいと思う。

110 名前:98 mailto:sage [2006/12/12(火) 10:44:27 ]
GraphEditでは
WMVファイル →WMAudioDecoderDMO          →AVIMux →FileWriter
       →WMVideoDecoderDMO →AVIDecompresser→
となっています

変換結果は
フレームレートは両方30fpsなのですが、
出力されたAVIのフレーム数は1723です(WMVのほうは調べ方がちょっとわからなかったです)
再生時間がWMV時点で28.7秒でAVIにすると57.4秒で丁度綺麗に2倍になる感じです
フレームの持続時間のほうはフレームレートの調整程度しか意識していませんでしたので
また少し自分でも調べてみようと思います。

111 名前:98 mailto:sage [2006/12/12(火) 10:55:08 ]
出力済みAVIファイルは下のようにヘッダを書き換えればAVI状態ではうまく再生できたのですが
mp4に変換するとファイルによって色々な症状がでて3個ほどサンプルを試した内では
ひとつもまともに再生できませんでした。

dwAudioTime = (double)dwAudioLength * dwAudioScale / dwAudioRate;

dwMicroSecPerFrame = dwAudioTime / dwVideoLength * 1000000.0+0.5;

dwVideoRate = 1000000L;
dwVideoScale = dwMicroSecPerFrame;

112 名前:98 mailto:sage [2006/12/12(火) 11:05:27 ]
3連続で書いてすいません。
書き換えた部分はstrhヘッダ(ストリームタイプがvids)の
rateとscale、avihヘッダのmicrosecperframeです

113 名前:デフォルトの名無しさん mailto:sage [2006/12/12(火) 11:10:40 ]
>>110
>フレームレートは両方30fpsなのですが、 出力されたAVIのフレーム数は1723です
30fpsで1723フレームなら、57秒ちょっとで合ってるじゃないですか。

GraphEdit で WMV ファイルを再生して、ビデオレンダラのプロパティで再生フレーム数を見れば
おおむねのフレーム数がわかると思います。それでフレーム数を確認してみてください。

それから、WMV はフレーム毎にタイムスタンプが付いていますから(≒フレームの時間的間隔が
一定ではない)、デコードして AVIMux で結合という簡単な処理では決して正しい AVI ファイルは
出来ないということも理解する必要があります。





114 名前:98 mailto:sage [2006/12/12(火) 13:05:01 ]
指示いただいた通りGraphEditでフレーム数確認したところ861フレームでした

WMV(変換元ファイル)のほうは28秒ちょっとなので57秒でフレームが丁度2倍になっている感じですね

>それから、WMV はフレーム毎にタイムスタンプが付いていますから(≒フレームの時間的間隔が
>一定ではない)、デコードして AVIMux で結合という簡単な処理では決して正しい AVI ファイルは
>出来ない

やはりちょっとヘッダー部などをいじった程度だと無理でしたか
Directshowのフィルターがその辺の処理をやってくれるのではないかと
甘く見ていました

115 名前:98 mailto:sage [2006/12/12(火) 13:17:20 ]
あと、AVIDecompressorのあとにビデオレンダラにつなげるとその時点では
まともに再生されるのですが、AVIMuxでファイル保存できるようにするときに
タイムスタンプが抜かれてしまうのでしょうか?

116 名前:デフォルトの名無しさん mailto:sage [2006/12/12(火) 16:42:29 ]
>>115
AVI 形式のファイルは、メディアフォーマットで指定された同一持続時間の
サンプルがずらーっと並ぶだけというようなフォーマット。
なので正しいフレームレートでかつ1フレームの欠落もないデータじゃないと
正常に再生できない。

変換元ファイルを走査して、真のフレームレートを計算してWMV側で落ちている
フレームも捏造して自分でmuxするとかやり方はあるような気がするけれども、
絵と音がずれないAVIファイルを作るのはとても難しいです。

117 名前:98 mailto:sage [2006/12/12(火) 19:17:37 ]
やはり、自分でやるしかないとなると相当むずかしいみたいですね
とりあえずWMVファイルを調べてその最小公倍数分のフレームレートをAVIファイルに設定、
フレームの余計な部分に空フレーム挿入などで試してみようと思います。

途中で挫けそうですが、もしうまくいったら報告だけでもさせていただきます。
…WMVとかに使っているコーデックで圧縮かかってるとその別ソフトが読み込んでくれないから大変です...orz

色々教えていただいてありがとうございました。

118 名前:デフォルトの名無しさん [2006/12/21(木) 21:42:10 ]
ボコノン教授
どこみても質問に回答してる。
ネ申ですか?それともM$の中の人ですか?

119 名前:デフォルトの名無しさん mailto:sage [2006/12/22(金) 00:43:59 ]
教徒だろw

120 名前:デフォルトの名無しさん mailto:sage [2006/12/22(金) 08:57:53 ]
>>119
教徒と言う事は宗教団体さんみたいなもんなんすね。
DirectShow究めるためにボコノン教に入ってみたいかも

121 名前:デフォルトの名無しさん [2006/12/23(土) 17:14:46 ]
パーサー(スプリッタ)フィルタを自作したいのですが、
参考になるサンプルなどありますか?
情報が少なくて困っています。
変換フィルタはいくつか作成したことがあります。

122 名前:いつでもどこでも名無しさん mailto:age [2006/12/23(土) 23:31:06 ]
YUY2の16bit列をRGB16bit列に変換したいのですが、便利な関数またはフィルタありませんか?

123 名前:デフォルトの名無しさん mailto:sage [2006/12/27(水) 00:00:48 ]
>>121
ソースがプルなのかプッシュなのかによりスプリッタの挙動が大きく異なるわさ
プッシュなら来たサンプルバラして後方にポンポコ投げろや
プルなら入力ピン繋がった時点でソース先読みして各種情報提供してやるとか色々とアレ
年末ゆえ酒飲んでて上手く得ないけど、まあ察しろ
出力ピンに関してはINFTeeのサンプルが参考になるよ

>>122
変換式ならググればゴロゴロみつかるし、後は自分でやってもたいしたことないだろ がんばれー



124 名前:デフォルトの名無しさん mailto:sage [2006/12/27(水) 00:01:47 ]
上手く得ないけど → 上手く言えない タイプミスうぜー

125 名前:デフォルトの名無しさん [2006/12/27(水) 20:37:01 ]
>>123
変換を自作したがいちピクセル単位でやると遅くてつかいものにならんかったよ。
そこで私は
趣味→オーブンしーぶい(ただだけど配布できない)仕事→あいぴーぴー(よっしゃでかえるレベル)
を使った。一個関数呼ぶだけだった


126 名前:122 mailto:age [2006/12/28(木) 02:18:06 ]
>>123
変換式は見つかりました。でもSSE命令とか使いたいところです。
アセンブラ画像処理プログラミング って本買ってきたので頑張ります

>>125
OpenCVやIPPの場合、どんな関数使えばいいですか?
正にIplImageが欲しいです

127 名前:122 mailto:age [2006/12/28(木) 02:23:55 ]
>>125
OpenCVって配布できないんですか?

journal.mycom.co.jp/news/2006/11/08/360.html
e-words.jp/w/BSDE383A9E382A4E382BBE383B3E382B9.html

BSDライセンスってことですが

128 名前:122 mailto:age [2006/12/28(木) 02:57:28 ]
IPPの関数は見つかりました。しかしOpenCVのcvHoughLines2が使いたいので
OpenCVで変換する関数を是非教えて下さい

129 名前:122 [2006/12/28(木) 09:22:06 ]
>>123
アドバイスありがとうございます。
ソースフィルタはFile Source(Async)です。
とりあえず、空の変換フィルタ(CTransformFilter)を作成し、
ソース→空フィルタと接続して解析しようと思ったのですが、
「同じトランスポートをサポートしていない為、ピンを接続できません。0x80040266」
というエラーが起こり、接続することすらできません…

130 名前:121 [2006/12/28(木) 09:23:06 ]
↑121でした。

131 名前:デフォルトの名無しさん mailto:sage [2006/12/28(木) 12:47:29 ]
>>129
FileSource にTransformFilterがそのまま接続可能(かも)と思う時点で
知識が少なすぎて説明とか不可能なレベル。
SDK の DirectShow のドキュメントを先頭からちゃんと読むべし
(大した分量じゃないでそ)。

132 名前:デフォルトの名無しさん [2006/12/30(土) 08:42:31 ]
#define D3D_DEBUG_INFO
が定義されているとムービー再生時に
VMR9のRenderlessが無視されてActiveMovie Windowが
ポップアップで出てくるんだけど、これ抑制させる方法ないでしょうか?


133 名前:デフォルトの名無しさん mailto:sage [2006/12/30(土) 18:38:31 ]
どこの何の話?



134 名前:デフォルトの名無しさん [2007/01/05(金) 01:08:09 ]
お、スレッド落ちてたの直ったのか。
>>127>>128
オープンしーぶいの話し少し待ってもらってもいいか?
仕事始まれば家に帰るからさ

ライセンスの話は多分私が間違えていると思う。
ただインターネットの書き込みで気になるのがあった
それを張り付けますよ〜。

135 名前:デフォルトの名無しさん mailto:sage [2007/01/06(土) 11:16:08 ]
落ちてたんじゃなくてサーバ移転しただけじゃないのかな

136 名前:デフォルトの名無しさん [2007/01/09(火) 19:46:03 ]
[MSDN Online 更新情報] December 2006 DirectX SDK が公開されました。 [DirectX] (2006-12-22 09:00)
www.microsoft.com/japan/msdn/directx/downloads.aspx

137 名前:デフォルトの名無しさん mailto:sage [2007/01/09(火) 20:55:30 ]
かなり前にインスコ済みなんだが

138 名前:デフォルトの名無しさん mailto:sage [2007/01/09(火) 21:07:56 ]
December 2006 DirectX SDK
DirectShow関係で何か変わってます?

139 名前:デフォルトの名無しさん [2007/01/10(水) 00:15:22 ]
VMRってWin2KではDirectX9.0およびビデオカードがサポートしていればサポートするよ、
見たいな事言ってるけど実際Win2Kではどうですか?
ぶっちゃけウインドレスモードが欲しいだけなんですが。
オーバーレイとかDirect3Dで描画なんたらとかじゃなく


140 名前:デフォルトの名無しさん [2007/01/10(水) 07:56:14 ]
【ネガティブ派遣根性チェック】

3つ以上、思い当たる点があればアナタの性格はひん曲がっており、ネガティブ負け組人生を歩んでいます。

□派遣先の社員の意見にはたとえ間違っていても反対しない
□派遣先から「いつまでもここで仕事してくださいね」と言われるようになりたい
□自社に仕事を持ち帰れるように言われるとムカつく
□自社で仕事なんてできるわけがない
□派遣/受託の差異を指摘する人間はムカつく
□派遣先には仕事だけでなく自分のプライベートについても指示して欲しい
□自分の月額金額を知らない
□派遣先社員より自分の生涯収入が低いのは当然だ
□派遣先に尻尾を振り、いつまでも一緒に仕事をすることが大切だ
□今のプロジェクトが終わっても同じ派遣先に常駐したい


141 名前:デフォルトの名無しさん [2007/01/12(金) 02:18:08 ]
ネガティブ派遣社員(σ´Д`)σゲッツ!!
正社員なんだが仕事の為なら派遣さんにも尻尾ふりますよ。寧ろ俺が最下層。

OctoberではVC6のサポートしていたんだが、December 2006 DirectX SDK は打ち切ったようだね。
「.dws」と言うプロジェクトファイルがなくなっとる

142 名前:デフォルトの名無しさん [2007/01/12(金) 02:48:15 ]
正社員は「自分の仕事のため」に尻尾ふり

派遣は「切られないため」に尻尾ふり

143 名前:デフォルトの名無しさん [2007/01/15(月) 03:19:51 ]
変換フィルタの自作しているんですけど、
上流フィルタの出力pinにたとえばVGAの解像度を優先接続して欲しいん
ですが、そんなことって可能でしょうか?

msdn.microsoft.com/library/ja/default.asp?url=/library/ja/dnwmt/htm/grabbersample.asp
このページをみながら「EnumMediaType」と「GetMediaType」はオーバーライド
したんですが、
まだ接続しきっていないせいか上流フィルタの出力pinに解像度の情報が乗っていない。。

できないのかな?



144 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 13:44:33 ]
>>143
GetMediaType で解像度入れたメディアタイプを返せばいいんじゃない?

145 名前:デフォルトの名無しさん [2007/01/15(月) 16:31:10 ]
>>144
回答ありがとうございます。
そのあたりを嗜好錯誤してかつできませんでした。
解像度を返すにはCMediaType->Formatのポインタが必要ですがそこが
空になっているんです。







[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<216KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef