PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LigH's Chap2Cue Reverse


katjarella
13. May 2005, 14:22
Hallo LigH und andere die sowas können...

Ich brauche DRINGENDst ein Tool, was mir aus ein Audio.cue eine Kapitel-Liste auf Framebassis ausspuckt.

Es sollte können:
* Anpassung an die Framerate ( PAL,NTSC,NTSC-Film, 44.1kHz, 48kHz etc)
* Cue-Format (Single oder Multi Wave)
* die Pausen berücksichtigen ( meine damit zwischen Lied1 <> Pause <> Lied2, das das Frame entweder beim Anfang der Pause, die Hälfte der Pause, Anfang des Liedes oder mehrere Kapitel (Pause,Lied) erstellt )

Muß heut noch so gegen 17Uhr wech, also habt Ihr dann so bis 19Uhr Zeit dafür. :ani_lol:

Danke schön.

katjarella
19. May 2005, 13:16
naja eigentlich dachte ich HEUTE bezieht sich auf den 13. Mai 2005. Jetzt ist schon der 19. Mai 2005 und nix ist zu sehen. :(

Könnte mir dann wenigstens einer das mal erklären?

Die Zeitangabe erfolgt in Minuten (mm), Sekunden (ss) und Frames (ff), wobei jede Sekunde in 75 Frames unterteilt wird.
TRACK 01 AUDIO
INDEX 01 00:00:00
TRACK 02 AUDIO
INDEX 01 03:26:26

soll heißen, das Track1 also 03:26:26 lang ist wie komm ich nun auf eine richtige Zeit?

MediaInfo: 00:03:26.347 (möchte ich aber nicht verwenden!)
ffmpeg: 00:03:26.3

zisoft
19. May 2005, 13:49
Die letzte Zifferngruppe gibt die Anzahl der Frames an, wobei jede Sekunde in 75 Frames unterteilt wird.

26/75 = 0,347 sek.

Irgendwie habe ich jetzt noch nicht verstanden, wo genau das Problem liegt.

[EDIT:] Hatten wir nicht schon mal sowas ähnliches: http://forum.gleitz.info/showthread.php?t=10312

katjarella
19. May 2005, 15:03
och bin ich blöde :)
Naja Mathe ist nicht mehr so mein Ding. Irgendwie ist meine Schul 1 aus dem Hirn verschwunden.

Ich hoffe, jetzt kommen nicht nur noch Spot-Beiträge. Bitte verkneifen.

katjarella
19. May 2005, 15:47
könnt Ihr mir weiterhelfen? Hier mal ein Beispiel...


EACBegin · EACLänge · IFO/PAL · Frames

00:00:00 · 03:26.26 · 03:26.09 · 5159 · [Pos: 00:03:26.09] [Frames: 5159]
03:26:26 · 06:35.55 · 06:35.19 · 9894 · [Pos: 00:10:02.03] [Frames: 15053]
10:02:06 · 03:08.58 · 03:08.20 · 4720 · [Pos: 00:13:10.23] [Frames: 19773]
13:10:64 · 05:30.30 · 05:30.10 · 8260 · [Pos: 00:18:41.08] [Frames: 28033]
18:41:19
22:10:00
26:06:51
29:58:49
32:09:34
35:26:59
39:37:33
41:52:18 · 01:30.20

wie könnte ich den Rest berechnen? Irgendwie ist mir das zu hoch. Aber dem lieben zisoft nicht.... ;)

LigH
19. May 2005, 16:12
Der übliche Trick bei so etwas ist: Alles erst mal auf den kleinsten gemeinsamen Nenner bringen. In deinem Fall: CD-Sektoren (Frames).

Sektor = (Minute*60+Sekunde)*75+Frame

Die Kleinigkeit, dass am Anfang jeder CD erst mal 2 Sekunden Pause sind (Pre-Gap), lassen wir erst mal außen vor.

Jetzt hast du eine Darstellung, in der du alles als Ganzzahlen hast. Damit kannst du die Position vom Anfang, und als Differenzen somit auch die Dauer, einfach als Ganzzahlen ausdrücken.

Um daraus wieder eine Darstellung in Sekunden zu bekommen, dividierst du den CD-Sektor durch 75. Willst du die PAL-Frames ermitteln, wird der gebrochene Anteil (nach dem Komma) mit 25 multipliziert und gerundet.

Oder schneller: Ganzzahldivision durch 75 mit Rest, und den Rest durch 3 teilen, denn 75/3 = 25.

Und wenn du die Sekunden noch in "Minute:Sekunde" teilen willst: Ganzzahldivision durch 60 mit Rest.
__

Oder du sparst dir den ganzen Müll, und teilst einfach nur die Frame-Nummer durch 3, um von CD-Sektoren auf PAL-Frames zu kommen!

75 / 3 = 25 :D

zisoft
19. May 2005, 16:14
Wenn Dir perl genehm ist, könnte ich Dir dafür morgen ein kurzes Script schreiben. Sag' mir, was Dein Input-Parameter ist und was als Ausgabe erfolgen soll.
--
EDIT: Aber nicht für das simple Teilen durch 3 ! :D

katjarella
19. May 2005, 16:37
Danke Hr. LigH,
für die zahlreichen Informationen. Aber ich steh jetzt hier am Bahnhof und der Zug war schon wech, als der Schaffner In deinem Fall: CD-Sektoren (Frames) rief.

Danke zisoft,
eigentlich brauche ich vier Scripte (oder ein per Parameter) :)
meine Wünsche:
* Übergabe: EACLänge
* Übergabe: EACBegin EACEnde (03:26:26 10:02:06)
* Übergabe: echte Länge mit Millisec.
* Übergabe: Frames

* Ausgabe: echte Länge mit Millisec. // IFOZeit in PAL // Frames

LigH
19. May 2005, 18:30
Gut, rechnen wir ein Beispiel:

22:10.00 - 18:41.19:

(22 * 60 + 10) * 75 + 00 = Sektor Nr. 99750 (+ 150 eigentlich, aber die fallen wieder raus)
(18 * 60 + 41) * 75 + 19 = Sektor Nr. 84094

99750 - 84094 = 15656 Sektoren Länge, 1 Sektor dauert 1/75 Sekunde

15656 / 75 = 208,746~ Sekunden, oder 15656 \ 75 = 208 + 56/75 Sekunden
208 \ 60 = 3:28 ==> 3:28,746~ {min:s,ms} oder 3:28.56 {min:s.f}

15656 Sektoren * 25 fps(PAL) / 75 fps(CD) = 15656 / 3 = 5218,6~ PAL-Frames

Und noch die Dauer in PAL-Frames (25 fps) statt in CD-Sektoren (75 fps):
Die 3:28 bleiben gleich, 56 CD-Sektoren / 3 = 18,6~ PAL-Frames: 3:28.19 {min:s.f}

katjarella
19. May 2005, 22:32
Gut, rechnen wir ein Beispiel:

22:10.00 - 18:41.19:

(22 * 60 + 10) * 75 + 00 = Sektor Nr. 99750 (+ 150 eigentlich, aber die fallen wieder raus)
(18 * 60 + 41) * 75 + 19 = Sektor Nr. 84094

99750 - 84094 = 15656 Sektoren Länge, 1 Sektor dauert 1/75 Sekunde

15656 / 75 = 208,746~ Sekunden, oder 15656 \ 75 = 208 + 56/75 Sekunden
208 \ 60 = 3:28 ==> 3:28,476~ {min:s,ms} oder 3:28.56 {min:s.f}

15656 Sektoren * 25 fps(PAL) / 75 fps(CD) = 15656 / 3 = 5218,6~ PAL-Frames

Und noch die Dauer in PAL-Frames (25 fps) statt in CD-Sektoren (75 fps):
Die 3:28 bleiben gleich, 56 CD-Sektoren / 3 = 18,6~ PAL-Frames: 3:28.19 {min:s.f}

vielen vielen vielen Dank.
Aber wie kommst Du von diesen 3:28,476~ {min:s,ms} auf 3:28.56 {min:s.f} ???

Im Moment bin ich bei:
var EAC = "03:28:56"
var tmp = EAC.split(":");

var CDMinuten = parseInt(tmp[0]);
var CDSekunden = parseInt(tmp[1]);
var CDMillisek = parseInt(tmp[2]);

var CDSector = ((CDMinuten*60)+CDSekunden)*75+CDMillisek
var PALFrames=Math.round((CDSector*25)/75);
var relSekunden = CDSector/75;
var absSekunden = parseInt(relSekunden)%60;
var absMinuten = Math.abs(Math.round((parseInt(relSekunden)-30)/60));


CDSector = 15656
PALFrames = 5219
relSekunden = 208,746666666667
absMinuten = 3
absSekunden = 28
absMillisek = müßten dann 747 sein

jetzt fehlen nur diese IFOFrames und IFOMillisek. Begreife das nicht, wie Du von 208,746~ auf 3:28,476~ kommst.

LigH
19. May 2005, 22:39
Aber wie kommst Du von diesen 3:28,476~ {min:s,ms} auf 3:28.56 {min:s.f} ???
Sorry - nicht 0,476~, sondern 0,746~

0,74666666... * 75 = 56

208 \ 60 = 3 Rest 28 (208 = 3 * 60 + 28)

Oder ausführlicher:

208 / 60 = 3,46~; 0,46~ * 60 = 28

ashyak
19. May 2005, 23:17
Hi,

folgender Link könnte interessant sein:
http://mitglied.lycos.de/big_sleepy/cuesheet.htm

dort wird die CUEsheet Datei sehr genau erklärt.


...cya

katjarella
19. May 2005, 23:35
Danke ashyak für den Link.
habe auch einen: http://www.arvex.de/index.php?showtopic=23

Danke LigH.
Langsam glaube ich, das ich es habe... Folgendes Beispiel ist in JavaScript....
WshShell = new ActiveXObject("WScript.Shell");

//PlayTime : 208746.938
//PlayTime : 3mn 28s 747ms
//PlayTime : 3mn 28s
//PlayTime : 00:03:28.747
var EAC = "03:28:56"
var tmp = EAC.split(":");

var CDMinuten = parseInt(tmp[0]);
var CDSekunden = parseInt(tmp[1]);
var CDMillisek = parseInt(tmp[2]);

var CDSector = ((CDMinuten*60)+CDSekunden)*75+CDMillisek

var PALFrames=Math.round((CDSector*25)/75);
var relSekunden = CDSector/75;
var absSekunden = parseInt(relSekunden)%60;
var absMinuten = Math.abs(Math.round((parseInt(relSekunden)-30)/60));
var absMillisek = Math.round((relSekunden-parseInt(relSekunden))*1000);
var IFOFF = Math.round(((absMillisek/1000)*75)/3);
WshShell.Popup("EAC: "+EAC+"\nSectoren: "+CDSector+"\nAbs Zeit: "+absMinuten+":"+absSekunden+"."+absMillisek+"\nFrames: "+PALFrames+"\nIFO: "+absMinuten+":"+absSekunden+"."+IFOFF);
Raus kommt...
EAC: 03:28:56
Sectoren: 15656
Abs Zeit: 3:28.747
Frames: 5219
IFO: 3:28.19

gleichmal ein bissl testen.

zisoft
20. May 2005, 08:43
Sieht doch schon gar nicht übel aus. Dann kann ich mich ja faulenzend zurücklehnen, oder soll ich jetzt doch noch was in perl schreiben?

katjarella
20. May 2005, 10:16
wie jetzt? noch nicht angefangen? Ja bitte schreibe Du mal was, denn ich habe im Moment noch nen Fehler drin.

zisoft
20. May 2005, 12:16
Ich habe jetzt mal 4 Perl-Scripte zusammengestrickt, spiel' mal damit rum. Alle Scripte produzieren identische Outputs. Sollte alles gut lesbar sein.

katjarella
20. May 2005, 13:04
Danke schön zisoft. Gleich mal anschaun + testen :)