DOSコマンドで copy /b a.mpg+b.mpg c.mpg
とバイナリモードでコピーすると
動画の連結(a+b=c.mpg)ができるらしいです。
そこで、以下のようなコンソールアプリでも
同様(c.mpgを作らずにa+b=a.mpg)なことが
できないか検討しています。
メモリーの追加コピー?の作法が
全くもってわかりません。
どなたかご教授お願い致します。
program addmpg;
{$APPTYPE CONSOLE}
uses
SysUtils,Classes;
var
I_EX_FILE:ansistring;
msa,msb:TMemorystream;
begin
{ TODO -oUser -cConsole Main : ここにコードを記述してください }
msa:=TMemoryStream.Create;
msb:=TMemoryStream.Create;
try
msa.LoadFromFile('c:\a.mpg');
msb.LoadFromFile('c:\b.mpg');
//msa.seek(0,soFromEnd); //この辺りが??最後に移動?
//msa.CopyFrom(msb,??); //追加コピー??
msa.SaveToFile('c:\a.mpg'); //上書きしたい。
FInally
msa.Free;
msb.Free;
end;
end.
TFileStreamですな。
一回の書き込みバッファサイズを小さくすると、省メモリ
大きくすると高速化が期待できます。
ちなみにこれは省メモリ版です。
procedure TForm1.Button1Click(Sender: TObject);
var
aFS1,aFS2:TFileStream;
aBuf:Byte;
begin
aFS1:=TFileStream.Create('a.txt',fmOpenReadWrite);
aFS2:=TFileStream.Create('b.txt',fmOpenReadWrite);
aFS1.Position:=aFS1.Size;
repeat
aFS2.Read(aBuf,SizeOf(aBuf));
aFS1.Write(aBuf,SizeOf(aBuf));
until aFS2.Position = aFS2.Size;
aFS1.Free;
aFS2.Free;
end;
もにゃ様。
ありがとうございました。
無事連結できました。
ここからは余談ですが
MPEGヘッダがa.mpgのままの為か
サイズ的には連結されましたが
メディアプレーヤによっては
a.mpgだけしか再生されませんでした。
シークバーも正しくありませんでした。
そもそもcopy /b でも同じだと
思いますがご参考まで。
もはや、delphiに関係なくなりましたが、
フリーソフトのmpgtx.exeを使えば
上記のような問題も出ずに結合できました。
mpgtx.exe -j "c:\a.mpg" "c:\b.mpg" -o "c:\c.mpg"
参考になればと思いメモを残しておきます。
ツイート | ![]() |