# C# Frames nach hh:mm:ss:frame



## doghma (24. März 2011)

Hi,

ich suche ne möglichst saubere Methode um Frames (Film) nach hh:mm:ss:frame umzurechnen.

Bisher habe ich:

                int temp_stunden = temp_minuten / 60;
                int temp_restminuten = temp_minuten - (temp_stunden * 60);
                float temp_minuten_float = Convert.ToSingle(Convert.ToSingle(Filmheaderdaten[4]) / Convert.ToSingle(Filmheaderdaten[25]) / 60);
                int temp_restsekunden = Convert.ToInt32((Convert.ToSingle(temp_minuten_float * 100) - Convert.ToSingle(temp_minuten * 100)) / 100 * 60);
                if (temp_restsekunden < 10)
                {
                    if (temp_restminuten < 10)
                    {
                        header = temp_stunden + ":0" + temp_restminuten.ToString() + ":0" + temp_restsekunden.ToString();
                    }
                    else
                    {
                        header = temp_stunden + ":" + temp_restminuten.ToString() + ":0" + temp_restsekunden.ToString();
                    }
                }
                else
                {
                    if (temp_restminuten < 10)
                    {
                        header = temp_stunden + ":0" + temp_restminuten.ToString() + ":" + temp_restsekunden.ToString();
                    }
                    else
                    {
                        header = temp_stunden + ":" + temp_restminuten.ToString() + ":" + temp_restsekunden.ToString();
                    }
                }

Das scheint mir alles aber etwas umständlich.
Schonmal danke für etwaige Hilfe


----------



## Fragile Heart (24. März 2011)

Sorry, ich verstehe gerade nicht was du genau möchtest. 

Du hast Minuten? und möchtest das in das von dir angegeben Format darstellen?


----------



## doghma (24. März 2011)

Das ist der Code den ich schon habe, oben fehlt allerdings eine zeile ... nicht weiter schlimm.
Also, ich lese ein AVI über einen BinaryReader ein. An Offset 16 habe ich die Frameanzahl, diese möchte umrechnen in:

Stunden:Minuten:Sekunden:Frame

Das ganze möglichst elegant. (Framerate hab ich)

z.B.:
168491 Frames sind 1:52:19:x bei 25fps
168491 / fps / 60 / 60 = 1,872122222

Eine Umrechnung davon, also 1,872122222, ins Zeitformat?

Problem gelöst:

double seconds = Convert.ToDouble(AVI_Header_Duration) / Convert.ToDouble(AVI_Header_Framerate);
string Laenge = TimeSpan.FromSeconds(seconds).ToString().Substring(0,(TimeSpan.FromSeconds(seconds).ToString().LastIndexOf(".")));


----------



## Fragile Heart (24. März 2011)

Achso! Gut, da stand ich dann wohl was auf den Schlauch ... 

Also du hast den *totalCount* und *frameRate* dann wäre:

frameCount = totalCount % frameRate;
second = ((totalCount - frameCount) % (frameRate * 60)) / frameRate;
minute = ((totalCount - second * frameCount - frameCount) % (frameRate * 60 * 60)) / (frameRate * 60);
hour = totalCount / (frameRate * 60 * 60);

Angaben ohne Pistole


----------



## doghma (24. März 2011)

Danke Dir. Aber sei mir nicht böse  ,mit TimeSpan.FromSeconds(sekunden) gehts doch einfacher ... aber erstmal finden ....

Werds mir trotzdem notieren, man weiß ja nie ...


----------



## Fragile Heart (24. März 2011)

Ja nee ist klar! Hätte ich mir ja denken können das in den Tiefen des .net Frameworks wieder eine Funktion dafür vorhanden ist. 

Hauptsache du bist ans Ziel gekommen.


----------

