Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2007.12.09;
Скачать: [xml.tar.bz2];

Вниз

Как узнать имя кодека, которым сжат видеофайл   Найти похожие ветки 

 
Master_ ©   (2007-02-05 16:18) [0]

Доброго времени суток, Мастера.
Писал на раздел форума MEDIA, но успехов нету в моем вопросе((
САБЖ, а именно интересует компонент или пример кода, для просмотра информации о видеокодеке и аудио кодеке, как это сделано например в Лайт Алой медиаплейере.


 
Плохиш ©   (2007-02-05 16:19) [1]


> Писал на раздел форума MEDIA

Вообще-то здесь за спамские сообщения не отвечают, а убивают быстрее...


 
Master_ ©   (2007-02-05 16:23) [2]

Просто мне кажется здесь поактивнее отвечают чем там, пускай иногда и не в тему.


 
Правильный Вася   (2007-02-05 16:36) [3]

тебе только кодек или медиаконтейнер тоже?


 
Master_ ©   (2007-02-05 16:46) [4]


> Правильный Вася

Достаточно только имя кодека Видео и Аудио


 
Rouse_ ©   (2007-02-05 20:27) [5]

Ня:

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   Memo1: TMemo;
   OpenDialog1: TOpenDialog;
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 public
   procedure ReadAviInfo(FileName: string);
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ReadAviInfo(FileName: string);
var
 iFileHandle: Integer; // хэндл файла

 // Для позмционирования в AVI файле
 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);

 // Размер хедера (needed to locate the audio part)
 FileSeek(iFileHandle,28,0);
 FileRead(iFileHandle, Aviheadersize, 4);

 // старт хедера  (needed to locate the video part)
 Aviheaderstart := 32;

 // Милисекунды (1000000 / TempMicrosec = fps)
 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);

 // Audio каналы (1 = mono, 2 = stereo)
 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.


 
Master_ ©   (2007-02-05 21:26) [6]


> Rouse_

Спасибо большое за пример, есть все что надо мне, а то эксперимнтировал с модулем WFV.pas . По мне - слишком навернутый модуль. А тут все - и одной процедурой - самое то !!!


 
Nostradamus ©   (2007-02-06 15:27) [7]

Слушай Rouse, а по другим контейнерам у тебя что нибудь есть? Может хотя юы ссылка, где подробно всё описано?


 
Rouse_ ©   (2007-02-06 15:45) [8]


> Nostradamus ©   (06.02.07 15:27) [7]

По каким другим?
Вообще описание большинства форматов доступно в интернете...


 
Nostradamus ©   (2007-02-06 16:18) [9]


> По каким другим?

Ну скажем divx, matroska и т.д.


> Вообще описание большинства форматов доступно в интернете.
> ..

Да я вот всё ищу, но пока не удалось найти достаточно полную по всем (или хотя бы) большинству контейнеров


 
Правильный Вася   (2007-02-06 16:34) [10]

 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";

и че, везде одинаковый битрейт?


 
Rouse_ ©   (2007-02-06 16:34) [11]

Не, я про matroska вообще первый раз слышу :)


 
Rouse_ ©   (2007-02-06 16:35) [12]


> и че, везде одинаковый битрейт?

понятия не имею - модуль не мой :)



Страницы: 1 вся ветка

Форум: "Media";
Текущий архив: 2007.12.09;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.049 c
2-1194873045
allucard
2007-11-12 16:10
2007.12.09
Проблема с кодировкой


6-1175513188
Digo
2007-04-02 15:26
2007.12.09
Трансляция видео через lan


15-1193856158
Petr V. Abramov
2007-10-31 21:42
2007.12.09
Про википедию


3-1185870320
align
2007-07-31 12:25
2007.12.09
Fast Report 4


15-1194793273
Kick
2007-11-11 18:01
2007.12.09
В моем классе не видно...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский