Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
11-1142320949
Barloggg
2006-03-14 10:22
2006.12.24
А запись Pcx есть?


15-1164875898
Храмой
2006-11-30 11:38
2006.12.24
Глупый но вайжный для меня вопрос


15-1165237556
Рамиль
2006-12-04 16:05
2006.12.24
Альтернатива Enterprise Manager для MS SQL Express


15-1164755613
Real
2006-11-29 02:13
2006.12.24
Ссылка на папку вида - file://10.0.0.200/folder


2-1165237693
Steep
2006-12-04 16:08
2006.12.24
Opengl





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский