![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как узнать время bitrate... [D6, WinXP]
Unitay © (2006-03-10 10:36:00)Как узнать время, количество кадров и др. параметры таких видео-файлов как *.ogg *.ogm *.mkv средствами Delphi?
PS Как узнать количество аудио-потоков(количество звуковых дорожек) обычного avi файла?
AbrosimovA (2006-03-10 15:44:00) [1]
uses ..., MMSystem, VFW;
................................
var
hFile : PAVIFile;
nameFile : array[0..254] of Char;
infoFile : TAVIFileInfo;
infoVStream, infoAStream : TAVIStreamInfo;
VideoStream, AudioStream : PAVIStream;
Res: HResult;
tStream: string;
AudioFormat: TWAVEFORMATEX;
AudioSize: DWord;
begin
if OpenDialog1.Execute then begin
StrPCopy(nameFile,OpenDialog1.FileName);
{---------------------Получение данных файла--------------------}
AVIFileInit; // иниц. API
Res:=AVIFileOpen (hFile, nameFile, OF_READ, nil); // открытие файла
if Res<>S_OK then Exit;
AVIFileInfo (hFile, @infoFile, SizeOf(infoFile)); // получение инфы файла
with ListBox1.Items, infoFile do
begin
Clear;
Add('Файл: ' + nameFile);
Add('');
Add('Число потоков: ' + IntToStr(dwStreams));
end;
{------------------Получение данных видеопотока-----------------}
AVIStreamInit;
Res:=AVIFileGetStream(hFile, VideoStream, streamtypeVIDEO, OF_READ);
if Res<>S_OK then Exit;
AVIStreamInfo(VideoStream, @infoVStream, SizeOf(infoVStream));
{---------------------------------------------------------------}
with ListBox1.Items, infoVStream do
begin
case fccType of
STREAMTYPEVIDEO: tStream:='Видео (vids)';
end;
Add('');
Add('Тип потока: ' + tStream);
Add('Ширина: '+IntToStr(rcFrame.Right)+' точек');
Add('Высота: '+IntToStr(rcFrame.Bottom)+' точек');
Add('Частота кадров: ' + IntToStr(Round(dwRate/dwScale)) + ' кадров/сек');
Add('');
end;
{------------------Получение данных аудиопотока------------------}
Res:=AVIFileGetStream(hFile, AudioStream, streamtypeAUDIO, OF_READ);
if Res<>S_OK then Exit;
AVIStreamInfo(AudioStream, @infoAStream, SizeOf(infoAStream));
{----------------------------------------------------------------}
with ListBox1.Items, infoAStream do
begin
case fccType of
streamtypeAUDIO: tStream:='Аудио (auds)';
end;
Add('');
Add('Тип потока: ' + tStream);
Add('Длительность: ' + TimeToStr(dwLength/(dwRate/dwScale) /
SecsPerDay));
end;
{----------------Дополнительные данные аудиопотока---------------}
AVIStreamFormatSize(AudioStream,0,@AudioSize);
AVIStreamReadFormat(AudioStream,0,@AudioFormat,@AudioSize);
with ListBox1.Items, AudioFormat do
begin
case nChannels of
1: Add('Канал звука: Моно');
2: Add('Канал звука: Стерео');
end;
Add('Частота: '+IntToStr(nSamplesPerSec div 1000)+' кГц');
Add('BPS: '+IntToStr(nAvgBytesPerSec div 1000));
Add('');
end;
AVIStreamRelease(VideoStream);
AVIStreamExit;
AVIFileRelease (hFile); // закрытие файла
AVIFileExit; // закрытие API
end;
antonn (2006-03-10 11:48:00) [2]поищи в поисковике Audio Tools Library, найдешь архив с классами, организующих работу с этими форматами (и даже больше). Под Delphi7 мог бы дать компонент, собраный на этих классах, упрощающий применение.