バイナリファイル変更処理の高速化を教えてください


TAMA  2007-10-18 19:05:58  No: 99586

動画ファイルをバイナリとして読み込んで、ある値が出て来た以降を変更する
ロジックを作っています。

①読込み動画f1を読み込む
②作成動画f2を開く
③動画f1を最初からループさせて、検索しながらf2にput

'読込み動画
Open f1 For Binary As #2
   s2 = LOF(2)     'ファイルのサイズを変数sに読み込み
   ReDim b2(s2)    '配列の大きさをs(ファイルサイズ)に変更
   Get #2, , b2()  '配列b()に読み込み
Close #2

'作成動画
Open f2 For Binary As #3

    For i = 0 To s2 - 1
        t$ = t$ & Right$("0" + Hex$(b2(i)), 2)
            
        If Len(t$) > 8 Then
            t$ = Right$(t$, 8)
        End If

        If t$ = "000001E0"  Then
             条件以降の下位〇〇ビットの値を変更  
             そしてPUT       
        Else
              それ以外は、そのままスライド
             a = b2(i)
             Put #3, , a
        End If
   Next

close #3

上記のロジックだと、動画ファイルサイズが大きいと
時間がかかりすぎます。

時間短縮できる方法があれば教えてください。
宜しくお願します。


あん  2007-10-18 20:07:20  No: 99587

f1を読み込みつつf2に書き込むロジックに変えてください。
f1をいっきに読み込むのではなく
ある程度の大きさのサイズのバッファを準備して読み込んでください。
f2も1バイトずつ書き込むのではなく
ある程度の大きさのサイズのバッファを準備して
書き込む回数を減らしてください。
バッファのサイズは適度のサイズを試行錯誤して決めてください。


GOD  2007-10-18 22:44:59  No: 99588

t$ の部分を文字列ではなく数値として扱うようにすれば速度向上するかも。

        t = CCur(CCur(t Mod &H1000000) * 256) + i
        If t > &H7FFFFFFF Then
            t = t - 4294967296#
        End If
        If i > 3 Then
            If t = &H1E0 Then
                '条件以降の下位〇〇ビットの値を変更
            Else
                'それ以外は、そのままスライド
            End If
        End If

#下位〇〇ビットが0〜7の間で、1Byteのみ Put しているのならバッファの変更をして For〜Next 終了後に一気に Put すれば早くなりそうだけど。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加