モケモケ
2009-10-01 10:27:43 ( ID:fjinm2vpggo )
[ 削除 / 引用して返信 ]
バッチエンコをしていると
この操作を完了するのに十分な記憶域がありません。(エラーコード 0x8007000E)
途中終了してしまいます。
原因はどこにあるのか教えれいただけませんか?
OS win7
CPU i7
グラボ gtx285
mem 12g
仮想メモリー無し
タスクマネージャーで見ていると処理が進むにつれパフォーマンスの物理メモリのキャッシュ済みが増えていき空メモリがなくなっていきます。
ちなみに処理は、1G程のMPGを100程MPG4にエンコです。
蒼史朗
2009-10-03 08:16:19 ( ID:wjzcnwh5gvc )
[ 削除 / 引用して返信 ]
1.ソフトがWin7に対応していない。(いくらVistaのマイナーヴァージョンUP版でも基本的には未知の新OS)
2.ソフトが64bitOSに正式対応していないからメモリーが12GBあっても4GB以上は正常に扱えない可能性がある。
3.連続でエンコードさせるファイル数が多すぎる。つまりひとつのファイル処理が終わっても、そのキャッシュデータを抱えたまま次の処理を始めて、あっという間にメインメモリを使いきってしまうのかも知れない。
4.メモリ不足なのに仮想メモリがないから処理を継続出来なくなる。
さらっと考えてもこれだけ浮かびます。詳しい方が考えれば更に浮かぶでしょう。取りあえず仮想メモリーを有効にしてみては?
モケモケ
2009-10-03 09:30:52 ( ID:fjinm2vpggo )
[ 削除 / 引用して返信 ]
回答ありがとうございます。
ご指摘のように色々やってみました。
仮想メモリー有効
連続エンコードの数を減らす
メモリー開放をやってみる
それで解ったことが、処理するファイルの再生時間が10時間を越えたあたりで、エラーが発生するということです。
これはエンコードのファイル数は関係なく、30分のファイルだと20本過ぎたあたりで、2時間のファイルだと、5本を過ぎたあたりでエラーが発生いたします。
バッチエンコードの方法って2種類ありますよね、一度のまとめてバッチに登録する方法と、個別に登録する方法ですが、これって、内部的に処理の方法違うのでしょうか?
M2
2009-10-06 14:19:14 ( ID:yiut9lstn7c )
[ 削除 / 引用して返信 ]
ProcessExprolerや、メモリ監視ソフトで見てると、メモリのフラグメンテーションによる影響がありそうです。エラーのメモリを見ても、実メモリは余ってそうです。
特に、ハイデフ動画等をエンコードする場合で、MPEG4/AVC2パスの場合で、1パス終了後で実エンコードに入る時、大きなメモリブロック(連続アドレス)の確保(malloc)を行おうとして、失敗しているような雰囲気です。バッチエンコードする場合において、後のエンコードになればなるほど、大きなメモリブロック確保が困難になっていきます。同じソースのバッチ処理でも、WMVだと発生しないという事もあり、mp4関係のライブラリ内部でのエラーだとは思いますが。
この問題は、実メモリが足りない場合ではなくて、仮想メモリアドレスが足りない為起きる可能性が高く(実メモリ不足だけなら、スワッピングで回避される)、ユーザーレベルでの回避(メモリクリーナーみたいなソフトもあるが、あれはアドレス整理はできない)は不可能に近く、64bit化や、サブプロセス化(たとえばbatch.exeがencode.exeを間接的に操作)しての仮想メモリアドレスの1エンコードごとのクリア等、抜本的な所からの改修を行わないと厳しいと思います。
ちなみに、ハイデフ動画4つほど、バッチエンコに登録せず直接エンコしてみましたがこの場合は問題ありませんでした。
もし、TMPGEnc 5を計画されているのであれば、このような改修がされている事を期待したいです。
ねもねも
2009-12-19 14:19:55 ( ID:0ocx1uid8ln )
[ 削除 / 引用して返信 ]
>この操作を完了するのに十分な記憶域がありません。(エラーコード 0x8007000E)
HELPファイルの「ファイル読み込みキャッシュを使用する」に似たような状況の説明があります。
上記のオプションがONになっている場合、OFFでバッチ処理を実行してみては?
|