avi länge bestimmen
-
Hey Leute,
das ist mein erster Beitrag hier zudem bin ich noch neu in der Welt des Programmierens, also bitte steinigt mich nicht falls dies der falsche Ort für meine Frage ist.
Ich möchte in C gerne die Dauer, in Minuten, eines .avi Videos ermitteln und diese in einer Variable speichern.
Über eine genauere Beschreibung, ob diese in der Datei steht oder anhand der größe der Datei berechnet werden kann, würde ich mich freuen.
Ich nutze Bloodshed Dev C++ Version 4.9.9.2 unter windows Xp.
Dank und Grüße Shinigami!
-
Du hast die alte Version des DEV.
Hier gibt es aktuelle neuere Versionen:
http://orwellengine.blogspot.com/2011_09_01_archive.htmlZum AVI-Format - Programme gibt es schon:
http://avi-file-info.soft-ware.net/download.aspMfG f.-th.
-
Hi,
vllt. hilft dir das hier ein Stück weit: http://www.fastgraph.com/help/avi_header_format.html
Allerdings sind die Angaben da noch recht dürftig, was die Länge angeht. Vllt. reicht dir das ja aber auch schon.
Edit: number of video frames * time delay between frames in microseconds / 1000 = millisekunden
Das ist die Formel, die jemand in seinem Programm aus einem anderen Forum benutzt hat.
-
Wenn du was fertiges suchst, dann schau dir libavformat an (ist Teil von FFmpeg)
-
Super, danke habs hinbekommen. Hier die fertige Funktion.
#include <cstdlib> #include <iostream> #include <fcntl.h> #include <io.h> #include <sys\stat.h> using namespace std; int main(int argc, char *argv[]) { int fh = open( "C:\\Test.avi", O_RDONLY, O_BINARY); int time_betwen; int number_frames; int milisec; int sekunden; int minuten; lseek(fh, 32L, SEEK_CUR); read( fh, &time_betwen , sizeof(int)); lseek(fh, 12L, SEEK_CUR); read( fh, &number_frames , sizeof(int)); time_betwen = time_betwen / 1000; milisec = number_frames * time_betwen; sekunden = milisec / 1000; minuten = sekunden / 60; sekunden = sekunden % 60; printf( "%d Minuten %d Sekunden\n\n", minuten, sekunden ); system("PAUSE"); return EXIT_SUCCESS; }