動画ファイルをバイナリとして読み込んで、ある値が出て来た以降を変更する
ロジックを作っています。
①読込み動画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
上記のロジックだと、動画ファイルサイズが大きいと
時間がかかりすぎます。
時間短縮できる方法があれば教えてください。
宜しくお願します。
f1を読み込みつつf2に書き込むロジックに変えてください。
f1をいっきに読み込むのではなく
ある程度の大きさのサイズのバッファを準備して読み込んでください。
f2も1バイトずつ書き込むのではなく
ある程度の大きさのサイズのバッファを準備して
書き込む回数を減らしてください。
バッファのサイズは適度のサイズを試行錯誤して決めてください。
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 すれば早くなりそうだけど。
ツイート | ![]() |