Jak odczytać informacje o filmie?

0

Pytanie z tematu. A potrzebne mi informacje to: długość filmu, rozdzielczość, FPS, rozmiar pliku w MB z dokładnością do 1 miejsca po przecinku. Piszę program w Delphi 7, który by te informacje odczytywał z filmów (.avi, .mpg, itp.). Znalazłem DLL'a MediaInfo.dll (http://mediainfo.sourceforge.net) jednak na stronie tego projektu nic nie pisze o nazwach procedur, które ta biblioteka "eksportuje" na zewnątrz. Nie wiem więc jak jej użyć. Proszę o pomoc. Nie musicie pisać jak obsłużyć tą bibliotekę, jeśli znacie inny sposób jak wyciągnąć te informacje z filmu; wtedy napiszcie ten inny sposób. Będę bardzo wdzięczny.

0

Rozmiar po przecinku (np.: 10,2MB)

var
 SR: TSearchRec;
begin
 FindFirst('C:\plik.exe', faAnyFile, SR);
 ShowMessage('Rozmiar: ' + FloatToStrf(SR.Size / 1024000,ffFixed,100,1 {Zmień na 2 jeśli dwa miejsca po przecinku}) + ' MB');
 FindClose(SR);
end;

Pozostałe: trochę jest tu

0

1MB=10241024 B =1048576B a nie 1024000=10241000.

0

Rzeczywiście, Opi się pomylił przy obliczaniu rozmiaru pliku.
No cóż, chłopaki, co do wyciągania informacji z filmów to już sobie poradziłem. Bez MediaInfo.dll i innych zewnętrznych bibliotek. Poszukałem odpowiednią kontrolkę ActiveX. Plik EXE urosnął od tego o ok. 50 kb ale wszystko jest w jednym pliku (zresztą z zewnętrznym dll'em to by było więcej niż dodatkowe 50 kb). Nie będę tu już nikogo męczył :) Ale dzięki za to co napisaliście. Pozdrawiam.

0

Weź pod uwagę, że kontrolka ActiveX musi być zarejestrowana w komputerze, na którym chcesz używać tego programu - przy jego dystrybucji musisz dostarczyć użytkownikowi plik z tą kontrolką i ją zarejestrować.

0

brodny - mam do ciebie może banalne pytanie: jak zarejestrować kontrolkę ActiveX w systemie? Kontrolka, której użyłem została u mnie zainstalowana w systemie wraz z programem VIDEOzilla i nosi nazwę NCTVideoPlayer 1.0. Albo bez instalacji dodatkowych kontrolek: jak przy użyciu kontrolki TMediaPlayer odczytać z filmu jego FPS i długość [GGSS]? Bo jeśli chodzi o rozdzielczość to Opi już przedstawił na to sposób.

0

Dobra, jużsobie poradziłem :) Najpierw otwieram plik z filmem w MediaPlayerze, później ustawiam TimeFormat na tfMilliseconds. Z tego odcztuję czas filmu (żeby uzyskać go w sekundach mnożę wartość przez 1000). Później zamieniam TimeFormat na tsFrames i odczytuję długość filmu w klatkach. Żeby uzyskać FPS filmu dzielę długość filmu przez ilość klatek (albo odwrotnie, teraz już nie pamiętam:)). No a zamiana długośći filmu z sekund na format GGSS też nie jest trudna. Co do pozostałych rzeczy, które potrzebowałem to opisał je Opi.

Pozdrawiam

0
Mike L napisał(a)

żeby uzyskać go w sekundach mnożę wartość przez 1000

Chyba dzielisz? :>

0

Tak... dzielę.

No ale mam kolejny problem. Do pobierania informacji o filmie używam standardowego komponentu TMediaPlayer a jak testowałem program u kolego to przy próbie otwarcia pliku z filmem przez mój program wyskakuje błąd "File acces denited." Może znowu zadaję banalne pytanie, ale co robię nie tak? Dlaczego mój program nie może uzyskać dostępu do pliku? Pomocy! Gdyby ta informacja była pomocna to kolega nie ma zainstalowanego delphi.

0

Dodam jeszcze, że otwieranego pliku nie używa żaden inny program (przynajmniej nie jest on otwarty w żadnym odtwarzaczu i w odtwarzaczu otwiera się bez problemów).

0

A teraz zauważyłem, że niektóre filmy się otwierają. Te co się nie otwierają mają rozszerzenie .avi i jest w nich użyty kodek XviD lub DivX. Ale niektóre filmy z tymi kodekami się otwierają. To nie wina kodeków. Dziwna sprawa...

0

Rozwiązałem już mój problem. Nie otwierały się pliki z atrybutem tylko do odczytu bo zapomniałem ustawić tryb otwarcia pliku (FileMode) na tylko do odczytu (fmOpenRead). Domyślnie wartość ta wynosi fmOpenReadWrite (czyli plik otwierany jest zarówno do odczytu jak i zapisu) i przy plikach z atrybutem tylko do odczytu występował błąd.

Teraz 2 razy pomyślę czy nie jestem w stanie sam rozwiązać problemu zanim gdzieś napiszę.

1 użytkowników online, w tym zalogowanych: 0, gości: 1