如何合併兩個avi檔 |
尚未結案
|
regwei
一般會員 發表:4 回覆:3 積分:1 註冊:2003-06-13 發送簡訊給我 |
|
lovejingtao
一般會員 發表:10 回覆:33 積分:13 註冊:2003-04-16 發送簡訊給我 |
了解AVI的文件结构即可
先重新组合索引
然后拷贝数据 const bufsize:integer=1024;
delaytime:integer=10; LEAST_FRAME:integer=50;//cut at least ??? frame in each single file
var
Mark:Bool=False;//检测新的TMP文件发送与否
_srcFileName:Pchar;
naListOffset:array[0..5] of integer;//save LIST offset (0:start, 1:movi, 2:idx1, 3:JUNK, 4:tmp_idx1, 5:tmp_movi)
//use inFP, outFP to be file pointer
caBufChar:array[0..4] of char;
nBufInt:integer;
//==arche changed==
nFileCount:integer=0; //use this file count to check tmp file is ready or not
//start from 1,not 0
nSendFileCount:integer=1;//start from 1
//above two variable is for check not R/W the same file together
chopaviOK:integer=0; //check choapavi is ok or not
//===Timer variable=========
TimerFlag:integer=0; //1-finish 0-none
interval:integer=0; //timer 's time {$R *.dfm} procedure chopavi(dymmy:Pointer);
var
inFP:TFileStream;
begin
inFP:=TFileStream.Create(_srcFileName,fmOpenRead or fmShareDenyNone);
inFP.Read(caBufChar,4);
caBufChar[4]:=#0;
if StrComp(caBufChar,'RIFF')<>0 then
begin
ShowMessage('error: not an avi file');
Exit;
end;
//========================save LIST offset====================
naListOffset[0]:= 0;//start offset //=======save movi LIST offset
inFP.seek(16,soFromBeginning );
inFP.read({(char *)&nBufInt}nBufInt, sizeof(integer));//get header LIST size
inFP.seek(nBufInt 4,soFromCurrent);//goto next, JUNK CHUNK
inFP.read({(char *)&nBufInt}nBufInt, sizeof(integer));//get JUNK CHUNK size
inFP.seek(nBufInt, soFromCurrent);//goto next, movi LIST
naListOffset[1] := inFP.Position; //=======save idx1 offset
inFP.seek(4, soFromCurrent);
inFP.read({(char *)&nBufInt}nBufInt, sizeof(integer));//get movi LIST size
inFP.seek(nBufInt, soFromCurrent);//goto next, idx1
naListOffset[2] := inFP.Position; //=======save last JUNK offset
inFP.seek(4, soFromCurrent);
inFP.read({(char *)&nBufInt}nBufInt, sizeof(integer));//get idx1 size
inFP.seek(nBufInt, soFromCurrent);//goto next, idx1
naListOffset[3]:= inFP.Position;
//end=======================save LIST offset=================== inFP.Free; //fnChopAvi(_srcFileName);//call fnChopAvi, avi filename as para.
end; function fnChopAvi(filename:Pchar):Boolean;
var 冷静的思考问题
充满激情的工作
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |