|
Вопрос # 771/ вопрос открыт / |
|
Уважаемые эксперты, как можно зная только путь к картинки или айви файлу изнать его разрешение (например 800х600) вообще мне надо узнать разрешение swf ролика но я думаю пример с айви сюда подойдёт.
 |
Вопрос задал: Аксион (статус: 4-ый класс)
Вопрос отправлен: 20 июля 2007, 10:05
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Вадим К
Здравствуйте, Матвеев Мефодий Олегович!
Всё как раз на оборот. SWF - это закрытый формат. И ковырять его надо. а с ави - всё просто. в приложении вы найдёте пример, который с ави файла вычитывает много интересной инфы. Не забудьте на форму положить Memo1: TMemo, Button1: TButton, OpenDialog1: TOpenDialog;
Приложение: Переключить в обычный режим- unit Unit1;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls;
-
- type
- TForm1 = class(TForm)
- Memo1: TMemo;
- Button1: TButton;
- OpenDialog1: TOpenDialog;
- procedure Button1Click(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- procedure ReadAviInfo(FileName: string);
- end;
-
- var
- Form1: TForm1;
-
- implementation
-
- {$R *.dfm}
-
- { TForm1 }
-
- procedure TForm1.ReadAviInfo(FileName: string);
- var
-
-
-
- Aviheadersize: integer;
- Vheadersize: integer;
- Aviheaderstart: integer;
- Vheaderstart: integer;
- Aheaderstart: integer;
- Astrhsize: integer;
-
-
- TempTest: String[5];
- TempSize: Integer;
- TempVcodec: String[5];
- TempAcodec: integer;
- TempMicrosec: integer;
- TempLengthInFrames: integer;
- TempAchannels: integer;
- TempAsamplerate: integer;
- TempAbitrate: integer;
-
-
- Size: double;
- Length: string;
- Vcodec: string;
- Vbitrate: double;
- VWidth: integer;
- VHeight: integer;
- Fps: double;
-
- LengthInSec: double;
- Acodec: string;
- Abitrate: string;
- begin
-
- iFileHandle := FileOpen(FileName, fmOpenRead);
-
-
- FileSeek(iFileHandle, 7, 0);
- FileRead(iFileHandle, TempTest, 5);
- if copy(TempTest, 0, 4) <> 'AVI ' then
- begin
- MessageDlg('Could not open ' + FileName + ' because it is not a valid video file', mtError,
[mbOk], 0);
- Exit;
- end;
-
-
- FileSeek(iFileHandle,4,0);
- FileRead(iFileHandle, TempSize, 4);
-
-
- FileSeek(iFileHandle,28,0);
- FileRead(iFileHandle, Aviheadersize, 4);
-
-
- Aviheaderstart := 32;
-
-
- FileSeek(iFileHandle,Aviheaderstart,0);
- FileRead(iFileHandle, TempMicrosec, 4);
-
-
- FileSeek(iFileHandle,Aviheaderstart + 16,0);
- FileRead(iFileHandle, TempLengthInFrames, 4);
-
-
- FileSeek(iFileHandle,Aviheaderstart + 32,0);
- FileRead(iFileHandle, VWidth, 4);
-
-
- FileSeek(iFileHandle,Aviheaderstart + 36,0);
- FileRead(iFileHandle, VHeight, 4);
-
- FileSeek(iFileHandle,Aviheaderstart + Aviheadersize + 4,0);
- FileRead(iFileHandle, Vheadersize, 4);
-
- Vheaderstart := Aviheaderstart + Aviheadersize + 20;
-
-
- FileSeek(iFileHandle,Vheaderstart + 3,0);
- FileRead(iFileHandle, TempVCodec, 5);
-
- Aheaderstart := Vheaderstart + Vheadersize + 8;
-
- FileSeek(iFileHandle,Aheaderstart - 4,0);
- FileRead(iFileHandle, Astrhsize, 5);
-
- // Audio codec
- FileSeek(iFileHandle,Aheaderstart + Astrhsize + 8,0);
- FileRead(iFileHandle, TempACodec, 2);
-
-
- FileSeek(iFileHandle,Aheaderstart + Astrhsize + 10,0);
- FileRead(iFileHandle, TempAchannels, 2);
-
- // Audio samplerate
- FileSeek(iFileHandle,Aheaderstart + Astrhsize + 12,0);
- FileRead(iFileHandle, TempAsamplerate, 4);
-
- // Audio bitrate
- FileSeek(iFileHandle,Aheaderstart + Astrhsize + 16,0);
- FileRead(iFileHandle, TempAbitrate, 4);
-
-
- FileClose(iFileHandle);
-
-
- Vcodec := copy(TempVcodec, 0, 4);
- if Vcodec = 'div2' then Vcodec := 'MS MPEG4 v2'
- else if Vcodec = 'DIV2' then Vcodec := 'MS MPEG4 v2'
- else if Vcodec = 'div3' then Vcodec := 'DivX;-) MPEG4 v3'
- else if Vcodec = 'DIV3' then Vcodec := 'DivX;-) MPEG4 v3'
- else if Vcodec = 'div4' then Vcodec := 'DivX;-) MPEG4 v4'
- else if Vcodec = 'DIV4' then Vcodec := 'DivX;-) MPEG4 v4'
- else if Vcodec = 'div5' then Vcodec := 'DivX;-) MPEG4 v5'
- else if Vcodec = 'DIV5' then Vcodec := 'DivX;-) MPEG4 v5'
- else if Vcodec = 'divx' then Vcodec := 'DivX 4'
- else if Vcodec = 'mp43' then Vcodec := 'Microcrap MPEG4 v3';
-
-
- case TempAcodec of
- 0: Acodec := 'PCM';
- 1: Acodec := 'PCM';
- 85: Acodec := 'MPEG Layer 3';
- 353: Acodec := 'DivX;-) Audio';
- 8192: Acodec := 'AC3-Digital';
- else
- Acodec := 'Unknown (' + IntToStr(TempAcodec) + ')';
- end;
-
- case (Trunc(TempAbitrate / 1024 * 8)) of
- 246..260: Abitrate := '128 Kbit/s';
- 216..228: Abitrate := '128 Kbit/s';
- 187..196: Abitrate := '128 Kbit/s';
- 156..164: Abitrate := '128 Kbit/s';
- 124..132: Abitrate := '128 Kbit/s';
- 108..116: Abitrate := '128 Kbit/s';
- 92..100: Abitrate := '128 Kbit/s';
- 60..68: Abitrate := '128 Kbit/s';
- else
- Abitrate := FormatFloat('# Kbit/s', TempAbitrate / 1024 * 8);
- end;
-
-
- Size := TempSize / 1024 / 1024;
- Fps := 1000000 / TempMicrosec; // FPS
- LengthInSec := TempLengthInFrames / fps; // Length in seconds
- Length := FormatFloat('# min', Int(LengthInSec / 60)) + FormatFloat(' # sec',
- Round(LengthInSec - (Int(LengthInSec / 60) * 60)));
- Vbitrate := (TempSize / LengthInSec - TempABitrate) / 1024 * 8;
-
-
- Memo1.Lines.Add('AVI INFORMATION');
- Memo1.lines.Add('Size: ' + FormatFloat('#.## MB',Size));
- Memo1.Lines.Add('Length: ' + Length);
- Memo1.Lines.Add('');
- Memo1.Lines.Add('VIDEO INFORMATION');
- Memo1.Lines.Add('Codec: ' + Vcodec);
- Memo1.Lines.Add('Bitrate: ' + FormatFloat('# Kbit/s', Vbitrate));
- Memo1.lines.Add('Width: ' + IntToStr(VWidth) + ' px');
- Memo1.lines.Add('Height: ' + IntToStr(VHeight) + ' px');
- Memo1.Lines.Add('FPS: ' + FormatFloat('#.##', fps));
- Memo1.Lines.Add('');
- Memo1.Lines.Add('AUDIO INFORMATION');
- Memo1.Lines.Add('Codec: ' + Acodec);
- Memo1.Lines.Add('Bitrate: ' + Abitrate);
- end;
-
- procedure TForm1.Button1Click(Sender: TObject);
- begin
- if OpenDialog1.Execute then ReadAviInfo(OpenDialog1.FileName);
- end;
-
- end.
-
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 20 июля 2007, 12:02
Оценка за ответ: 5
Комментарий к оценке: А как получить разрешение swf ролика?
|
Мини-форум вопроса
Всего сообщений: 2; последнее сообщение — 20 июля 2007, 19:06; участников в обсуждении: 2.
|
Вадим К (статус: Академик), 20 июля 2007, 15:33 [#1]:
Сам немного ковырял. но вытянуть удалось только некоторые данные. к тому же, для swf роликов не всегда корректно говорить о длине, так как это как бы программа, а не видео. Тоесть, вы можете нажать на кнопку в каком-то фрейме, и видео будет длинее.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Аксион (статус: 4-ый класс), 20 июля 2007, 19:06 [#2]:
Меня не интересует длина, мне надо сколько высота и ширина у ролика, тоесть как у картинки width heigh, МНЕ НАДО ЧТОБЫ РАЗМЕР ФОРМЫ БЫЛ РАВЕН РАЗМЕРУ РОЛИКА.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|