Форум: "Media";
Текущий архив: 2006.12.24;
Скачать: [xml.tar.bz2];
Внизобъединение WMV-файлов Найти похожие ветки
← →
QuickFinder (2006-04-22 11:36) [0]Как склеить (объединить) несколько WMV-файлов?
← →
Wm.DIGGER © (2006-05-03 13:49) [1]если они в формате PCM нет ничего проще ...
читаешь заголовок файла, заголовок блока данных ...
потом идут сами данные ... это и есть сэмплы ...
просто добавляешь данные одного файла в конец другого и переписывашь заголовок соответственно ... если нужно могу кодом кинуть ...
← →
QuickFinder (2006-05-04 16:38) [2]
> Wm.DIGGER © (03.05.06 13:49) [1]
Написал на мыло, ответьте, плиз.
← →
Wm.DIGGER © (2006-05-04 17:06) [3]ну вот ... набросал ... должно работать ...
hWAVEHeader = record
idRiff:array[0..3] of Char;
RiffLen:LongInt;
idWave:array[0..3] of Char;
idFmt:array[0..3] of Char;
InfoLen:LongInt;
WaveType:SmallInt;
Channels:SmallInt;
Freq:LongInt;
BytesPerSec:LongInt;
Align:SmallInt;
Bits:SmallInt;
end;
hWAVEDATAHeader = record
idData:array[0..3] of Char;
DataLen:LongInt;
end;
function SetWAVEHeader(Ch,Freq,BPS:integer; RealTime:real):hWAVEHeader;
var SampleCount,DataLength:integer;
begin
SampleCount := Round(RealTime * Freq); //STime - i?iaie?eoaeuiinou a naeoiaao
DataLength := SampleCount * (BPS div 8) * Ch;
Result.idRiff := "RIFF";
Result.RiffLen := DataLength + 38;
Result.idWave := "WAVE";
Result.idFmt := "fmt ";
Result.InfoLen := 16;
Result.WaveType := WAVE_FORMAT_PCM;
Result.Channels := Ch;
Result.Freq := Freq;
Result.BytesPerSec := Freq * (BPS div 8) * Ch;
Result.Align := (BPS div 8) * Ch;
Result.Bits := BPS;
end;
function SetWAVEDATAHeader(WAVEHeader:hWAVEHeader):hWAVEDATAHeader;
begin
Result.idData := "data";
Result.DataLen := WAVEHeader.RiffLen - 38;
end;
procedure WAVEAppand(BFN,AFN:string);
var WF,AWF:TFileStream;
WH1,WH2:hWAVEHeader;
DH1,DH2:hWAVEDATAHeader;
NewDataLength,BufSize:integer;
NewTime:Real;
Buf:array[0..1023] of SmallInt;
begin
WF := TFileStream.Create(BFN,fmOpenReadWrite);
WF.ReadBuffer(WH1,SizeOF(WH1));
WF.ReadBuffer(DH1,SizeOF(DH1));
WF.Position := WF.Position + DH1.DataLen;
AWF := TFileStream.Create(AFN,fmOpenReadWrite);
AWF.ReadBuffer(WH2,SizeOF(WH2));
AWF.ReadBuffer(DH2,SizeOF(DH2));
NewDataLength := DH1.DataLen + DH2.DataLen;
NewTime := NewDataLength / WH1.Align / WH1.Freq;
while AWF.Position < DH2.DataLen do
begin
if (AWF.Position + SizeOF(Buf)) < DH2.DataLen then BufSize := SizeOF(Buf)
else BufSize := DH2.DataLen - AWF.Position;
AWF.Read(Buf,BufSize);
WF.Write(Buf,BufSize);
end;
WH1 := SetWAVEHeader(WH1.Channels,WH1.Freq,WH1.Bits,NewTime);
DH1 := SetWAVEDATAHeader(WH1);
WF.Position := 0;
WF.WriteBuffer(WH1,SizeOF(WH1));
WF.WriteBuffer(DH1,SizeOF(DH1));
AWF.Free;
WF.Free;
end;
← →
QuickFinder (2006-05-04 22:23) [4]Спасибо за пример.
Столкнулся со следующей проблемой.
У меня для файла clip01.wmv (размером всего 1 290 810 bytes, то есть чуть больше мегабайта) DH1.DataLen вернула какую-то жуткую величину:
1 590 272 000
Как такое может быть?
Вот все заголовки файла:
idRiff: 0&Іu
RiffLen: 298804878
idWave: ¦Щ
idFmt:
InfoLen: 5340
WaveType: 0
Channels: 0
Freq: 7
BytesPerSec: -1539309055
Align: -11568
Bits: -7417
idData: Т—р
DataLen: 1590272000
← →
Wm.DIGGER © (2006-05-05 04:31) [5]clip01.wmv ? алгоритм только для PCM ... - WAV ...
скорее всего у этого формата просто заголовок другой и он не корректно читается ...
BytesPerSec: -1539309055
Align: -11568
Bits: -7417
это не может быть отрицательным ...
Bits - биты на семпл ... 16 бит обычно ...
Align - размер семпла Bits div 8 * Channels
BytesPerSec - байт в секнду ... Align * Freq ...
хотя тип - WaveType: 0 - вроде нормально PCM ...
но всё равно - PCM это "кодировка" а заголовок у формата WMV явно другой ...
← →
Wm.DIGGER © (2006-05-05 04:33) [6]короче, тебе нужно найти как читать заголовок WMV ...
я честно говоря когда писать не обратил внимания, что это не WAV ... :)
← →
QuickFinder (2006-05-05 14:05) [7]Так это для WAV-файлов? Сорри, не понял...
Еще мелькнула мысль: откуда у человека описание формата WMV, его вроде нигде не найти, Мелкософт прячет хорошо...
← →
Анонимщики © (2006-05-06 11:12) [8]Microsoft Media SDK.
Но тебе этого, на самом деле, не нужно.
Проще пойти путем построения каких-то графов.
← →
Jeer © (2006-05-06 13:22) [9]QuickFinder (05.05.06 14:05) [7]
> откуда у человека описание формата WMV
говорит, да.
По делу:
WMV-Windows Medio Video.
WMA-Windows Medio Audio
Что нужно-то ?
Сложить несколько wma или сложить несколько sound-track, вытащенных из wmv ?
В любом случае, задачку лучше (меньше проблем и времени) решать внешними конверторами из сабжа в доступный формат.
← →
QuickFinder (2006-05-06 14:04) [10]
> Jeer © (06.05.06 13:22) [9]
> QuickFinder (05.05.06 14:05) [7]
> Что нужно-то ?
> Сложить несколько wma или сложить несколько sound-track,
> вытащенных из wmv ?
Имеется набор клипов WMV из одного фильма, нужно объединить эти клипы в один файл (типа того, как просто делается для MPG простым copy)
← →
Jeer © (2006-05-06 14:06) [11]Тогда ищи такие фичи в софте для видеомонтажа.
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2006.12.24;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.039 c