타임코드 계산법

function TimeCode(config){ var timecodeObject = { frame : config.frame || null, timecode : config.timecode || '00:00:00;00', frameRate : config.frameRate || 29.97, dropFrame: true, timecodes : ['00','00','00','00'], initialize: function(){ if(this.isTimecode()){ this.makeTimecodeArray(); } this.checkDropFrame(); }, makeTimecodeArray : function(){ var h = parseInt(this.timecode.substring(0,2)); var m = parseInt(this.timecode.substring(3,5)); var s = parseInt(this.timecode.substring(6,8)); var f = parseInt(this.timecode.substring(9,11)); this.timecodes = [h,m,s,f]; }, checkDropFrame : function(){ var dropFrameArray = [ 29.976, 29.97, 59.94 ]; var df = false; if(dropFrameArray.indexOf(this.getFrameRate()) != -1){ df = true; }; this.dropFrame = df; }, getConfig : function(config){ return this[config]; }, getFrameRate : function(){ return this.getConfig('frameRate'); }, getTimecode: function(){ return this.getConfig('timecode'); }, isDropFrame: function(){ return this.getConfig('dropFrame'); }, isTimecode: function(){ var timecodeRegex = /^(\d)(\d):(\d)(\d):(\d)(\d)[:|;](\d)(\d)$/g; return timecodeRegex.test(this.getTimecode()); }, frameToTimecode: function(){ }, timecodeToFrame: function(){ if(this.getFrameRate() == 29.97){ return this.timecodeToFrameBy29_97FrameRate(); } }, timecodeToSecond: function(){ return this.timecodeToFrame() / this.getFrameRate(); }, timecodeToFrameBy29_97FrameRate: function(){ /** * 30프레임 레이트로 계산법 * 1. 29.97 프레임레이산로 계산시에 30프레임레이트 보다 초당 0.03 씩 차이가 난다 * 2. 01:01:30:20 타임코드일시에 초로 변환하면 3600 + 60 +30 / 20frame * 3. 60초 마다 1.8 프레임 차이가 나지만 2프레임으로 계산하여 1분마다 -2프레임 으로 계산 한다 * 4. -2 프레임씩 하여 0.2 씩 비는 값는 매 십분에 드랍 프레임 생략 하여 오차를 없애준다 * * 계산법 * 1. (s * 30 프레임 으로 총 프레임 계산 + 프레임 단위 ) * 2. 1번 공식 - ((시간 *60 + 분) - (10 으로 나누어 매 십분 갯수 ) ) * 2프레임 */ var frame = 0; frame += (this.getConfig('timecodes')[3]); var totalFrame = 0; totalFrame += (this.getConfig('timecodes')[0] * 3600); totalFrame += (this.getConfig('timecodes')[1] * 60); totalFrame += (this.getConfig('timecodes')[2]); frame += (totalFrame*30); var dropFrame = 0; dropFrame += (((this.getConfig('timecodes')[0] * 60) + (this.getConfig('timecodes')[1])) - parseInt((((this.getConfig('timecodes')[0] * 60) + (this.getConfig('timecodes')[1])) / 10))); frame -= (dropFrame * 2); return frame; } }; timecodeObject.initialize(); return timecodeObject; } var b = TimeCode({ frame: 78, frameRate : 29.97, timecode : '00:01:43;23' }); // console.log('c',c); console.log('b',b.timecodeToFrame()); // console.log('a',a);
댓글 0

등록된 댓글이 하나도 없습니다...😢