Selam klasör içindeki bir videonun süresini nasıl alabilirim
http://r1311.hizliresim.com/1h/s/uuu6d.png
Video süre
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Video süre
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
Re: Video süre
Merhaba...
- Dikkat edersen klasörde sadece AVI dosya boyutlarını gösterir. Başka tiplileri değil. Çünkü RIFF serisi dosya tipleri ( Wav, AVI vb. )Microsoft tarafından native (yerleşik) desteklenir.
- Ayrıca dosya bozuk ise bu bilgiyi de göremez olursun.
- Ben sana sadece bunlarla sınırlı kalmaman için kendi projemden derleyip çıkardığım örneği veriyorum. Bu Link ile indirip deneyebilirsin...
Fonksiyondan çoklu bilgi dönüşü için Type tanımı :
Kullanımı Vereyim :
Bu da Fonksiyon :
Başarılar. 
- Dikkat edersen klasörde sadece AVI dosya boyutlarını gösterir. Başka tiplileri değil. Çünkü RIFF serisi dosya tipleri ( Wav, AVI vb. )Microsoft tarafından native (yerleşik) desteklenir.
- Ayrıca dosya bozuk ise bu bilgiyi de göremez olursun.
- Ben sana sadece bunlarla sınırlı kalmaman için kendi projemden derleyip çıkardığım örneği veriyorum. Bu Link ile indirip deneyebilirsin...
Fonksiyondan çoklu bilgi dönüşü için Type tanımı :
Kod: Tümünü seç
Type tAVIBilgileri = Record
dAVISize : double;
strVidLength : string;
strVidCodec : string;
dVidBitrate : double;
iVidWidth : integer;
iVidHeight : integer;
dFps : double;
dLengthSaniye: double;
strAudCodec : string;
strAudBitrate: string;
end;
Kod: Tümünü seç
procedure TForm1.BitBtn1Click(Sender: TObject);
Var
Bilgiler : tAVIBilgileri;
begin
With TOpenDialog.Create(Nil) do
begin
Filter := 'AVI Dosyaları *.AVI|*.AVI';
FilterIndex := 1;
if Execute then
begin
Bilgiler := AVIBilgileri( FileName );
Memo1.Lines.Clear;
Memo1.Lines.Add('AVI Genel Bilgileri');
Memo1.Lines.Add('Dosya Adı : ' + FileName);
Memo1.lines.Add('Boyut : ' + FormatFloat('#.## MB', Bilgiler.dAVISize));
Memo1.Lines.Add('Uzunluk : ' + Bilgiler.strVidLength);
Memo1.Lines.Add('');
Memo1.Lines.Add('AVI''nin VIDEO Bilgileri');
Memo1.Lines.Add('AVI Codec : ' + Bilgiler.strVidCodec);
Memo1.Lines.Add('AVI Bitrate : ' + FormatFloat('# Kbit/s', Bilgiler.dVidBitrate));
Memo1.lines.Add('Width : ' + IntToStr(Bilgiler.iVidWidth) + ' pixel');
Memo1.lines.Add('Height : ' + IntToStr(Bilgiler.iVidHeight) + ' pixel');
Memo1.Lines.Add('FPS(kare/sn) : ' + FormatFloat('#.##', Bilgiler.dFps));
Memo1.Lines.Add('');
Memo1.Lines.Add('AVI''ni AUDIO Bilgileri');
Memo1.Lines.Add('AUDIO Codec : ' + Bilgiler.strAudCodec);
Memo1.Lines.Add('AUDIO Bitrate: ' + Bilgiler.strAudBitrate);
end;
Free;
end;
end;
Kod: Tümünü seç
Function AVIBilgileri( strDosyaAdi : string ): tAVIBilgileri;
Function SureHesapla( dFrameRate, dDuration : Double ) : String;
Var
FPS : Double;
Sa, Dk, Sn, Fr : Integer;
begin
Try
Sa := 0;
Dk := 0;
Sn := 0;
FPS := dFrameRate;
Fr := Trunc(dDuration * FPS); // Toplam Kare Sayısı
if Fr > FPS then
begin
Sn := Trunc(Fr / FPS); // Tam bölünen kısmını aldık...
Fr := Fr - Trunc( Sn * FPS );
end;
if Sn > 60 then
begin
Dk := Sn div 60; // Tam bölünen kısmını aldık...
Sn := Sn - ( Dk * 60 );
end;
if Dk > 60 then
begin
Sa := Dk div 60; // Tam bölünen kısmını aldık...
Dk := Dk - ( Sa * 60 );
end;
Result := Format( '%.2d:%.2d:%.2d,%d', [Sa, Dk, Sn, Trunc(Fr)]);
Except
End;
end;
var
iDosyaHandle : Integer;
iAviHeaderSize : integer;
iVidHeaderSize : integer;
iAviHeaderBas : integer;
iVidHeaderBas : integer;
iAudHeaderBas : integer;
iAudStreamSize : integer;
strGeciciTest : string[5];
iGeciciSize : Integer;
strGeciciVcodec : string[5];
iGeciciAcodec : integer;
iGeciciMicrosec : integer;
iGeciciLengthInFrames: integer;
iGeciciAchannels : integer;
iGeciciAsamplerate : integer;
iGeciciAbitrate : integer;
begin
ZeroMemory(@Result, Sizeof(Result));
iDosyaHandle := FileOpen(strDosyaAdi, fmOpenRead);
// AVI dosya kontrolü
FileSeek(iDosyaHandle, 7, 0);
FileRead(iDosyaHandle, strGeciciTest, 5);
if copy(strGeciciTest, 0, 4) <> 'AVI ' then
begin
MessageDlg( '"' + strDosyaAdi + '" dosyası açılamadı. Geçerli bir AVI dosyası olmayabilir.', mtError, [mbOk], 0);
Exit;
end;
// File dAVISize
FileSeek(iDosyaHandle, 4, 0);
FileRead(iDosyaHandle, iGeciciSize, 4);
// Avi header dAVISize (AUDIO kısmını tespit etmek için kullanıcaz)
FileSeek(iDosyaHandle, 28, 0);
FileRead(iDosyaHandle, iAviHeaderSize, 4);
// Avi header start (VIDEO kısmını tespit etmek için kullanıcaz)
iAviHeaderBas := 32;
// Microseconds (1000000 / iGeciciMicrosec = dFps)
FileSeek(iDosyaHandle, iAviHeaderBas, 0);
FileRead(iDosyaHandle, iGeciciMicrosec, 4);
// Kare sayısı olarak VIDEO'nun uzunluğu // strVidLength
FileSeek(iDosyaHandle, iAviHeaderBas + 16, 0);
FileRead(iDosyaHandle, iGeciciLengthInFrames, 4);
// VIDEO Width
FileSeek(iDosyaHandle, iAviHeaderBas + 32, 0);
FileRead(iDosyaHandle, Result.iVidWidth, 4);
// VIDEO Height
FileSeek(iDosyaHandle, iAviHeaderBas + 36, 0);
FileRead(iDosyaHandle, Result.iVidHeight, 4);
FileSeek(iDosyaHandle, iAviHeaderBas + iAviHeaderSize + 4, 0);
FileRead(iDosyaHandle, iVidHeaderSize, 4);
iVidHeaderBas := iAviHeaderBas + iAviHeaderSize + 20;
// VIDEO codec
FileSeek(iDosyaHandle, iVidHeaderBas + 3, 0);
FileRead(iDosyaHandle, strGeciciVcodec, 5);
iAudHeaderBas := iVidHeaderBas + iVidHeaderSize + 8;
FileSeek(iDosyaHandle, iAudHeaderBas - 4, 0);
FileRead(iDosyaHandle, iAudStreamSize, 5);
// AUDIO codec
FileSeek(iDosyaHandle, iAudHeaderBas + iAudStreamSize + 8, 0);
FileRead(iDosyaHandle, iGeciciAcodec, 2);
// AUDIO channels (1 = mono, 2 = stereo)
FileSeek(iDosyaHandle, iAudHeaderBas + iAudStreamSize + 10, 0);
FileRead(iDosyaHandle, iGeciciAchannels, 2);
// AUDIO samplerate
FileSeek(iDosyaHandle, iAudHeaderBas + iAudStreamSize + 12, 0);
FileRead(iDosyaHandle, iGeciciAsamplerate, 4);
// AUDIO bitrate
FileSeek(iDosyaHandle, iAudHeaderBas + iAudStreamSize + 16, 0);
FileRead(iDosyaHandle, iGeciciAbitrate, 4);
// Bitti...
FileClose(iDosyaHandle);
// VIDEO Codec Karşılıkları, bildiklerini daha sonra da ekleyebilirsin.
Result.strVidCodec := copy(strGeciciVcodec, 0, 4);
if Result.strVidCodec = 'div2' then
Result.strVidCodec := 'MS MPEG4 v2'
else if Result.strVidCodec = 'DIV2' then
Result.strVidCodec := 'MS MPEG4 v2'
else if Result.strVidCodec = 'div3' then
Result.strVidCodec := 'DivX;-) MPEG4 v3'
else if Result.strVidCodec = 'DIV3' then
Result.strVidCodec := 'DivX;-) MPEG4 v3'
else if Result.strVidCodec = 'div4' then
Result.strVidCodec := 'DivX;-) MPEG4 v4'
else if Result.strVidCodec = 'DIV4' then
Result.strVidCodec := 'DivX;-) MPEG4 v4'
else if Result.strVidCodec = 'div5' then
Result.strVidCodec := 'DivX;-) MPEG4 v5'
else if Result.strVidCodec = 'DIV5' then
Result.strVidCodec := 'DivX;-) MPEG4 v5'
else if Result.strVidCodec = 'divx' then
Result.strVidCodec := 'DivX 4'
else if Result.strVidCodec = 'mp43' then
Result.strVidCodec := 'Microcrap MPEG4 v3';
// AUDIO Codec Karşılıkları
case iGeciciAcodec of
0: Result.strAudCodec := 'PCM';
1: Result.strAudCodec := 'PCM';
85: Result.strAudCodec := 'MPEG Layer 3';
353: Result.strAudCodec := 'DivX;-) Audio';
8192: Result.strAudCodec := 'AC3-Digital';
else
Result.strAudCodec := 'Bilemedim (' + IntToStr(iGeciciAcodec) + ')';
end;
case (Trunc(iGeciciAbitrate / 1024 * 8)) of
246..260: Result.strAudBitrate := '128 Kbit/s';
216..228: Result.strAudBitrate := '128 Kbit/s';
187..196: Result.strAudBitrate := '128 Kbit/s';
156..164: Result.strAudBitrate := '128 Kbit/s';
124..132: Result.strAudBitrate := '128 Kbit/s';
108..116: Result.strAudBitrate := '128 Kbit/s';
092..100: Result.strAudBitrate := '128 Kbit/s';
060..068: Result.strAudBitrate := '128 Kbit/s';
else
Result.strAudBitrate := FormatFloat('# Kbit/s', iGeciciAbitrate / 1024 * 8);
end;
// Result için Hesaplamalar
Result.dAVISize := iGeciciSize / 1024 / 1024;
Result.dFps := 1000000 / iGeciciMicrosec; // dFps
Result.dLengthSaniye := iGeciciLengthInFrames / Result.dFps; // strVidLength sn. cinsinden
Result.strVidLength := SureHesapla( Result.dFps, Result.dLengthSaniye );
Result.dVidBitrate := (iGeciciSize / Result.dLengthSaniye - iGeciciAbitrate) / 1024 * 8;
end;
