안녕하세요 크로네입니다.
오늘은 NodeJS 에서 srt(자막파일) 을 JSON 으로 파싱하고,
수정하고, 다시 저장하는 방법에 대해 알아보겠습니다.
1. 모듈
일단 NPM 에 들어가서 필요한 모듈을 검색해 봅시다.
저는 srt-parser 라고 검색했는데요,
기능이 마음에 안들어서 그냥 제가 직접 만들었습니다.
srt-parse-to 를 검색해 보세요.
https://github.com/KR-onae/srt-parse-to
번역하신후에 읽어보셔도 되고, 이 글을 읽으셔도 됩니다.
(참고로 이 글이 올라왔을때에는 사용법이 다를 수 있습니다. 글이 올라갈때의 버전은 2.1.0 버전임을 참고해주세요)
일단 오른쪽 위에 설치 방법이 적혀있습니다.
npm i srt-parse-to
클릭해서 복사후에 CMD 에서 실행하시면 됩니다.
(윈도우 + R → cmd 로 CMD를 켭니다)
2. 실습 - 1
먼저 모듈을 require 합니다.
const srt = require("srt-parse-to");
그 다음 srt 파일의 코드를 적어줍니다.
var srtFileSource = `1
00:00:00,500 --> 00:00:03,400
Hello!
2
00:00:03,500 --> 00:00:06,200
World!`;
fs 모듈을 이용해서 파일을 읽을 수도 있습니다.
const fs = require("fs");
var file = fs.readFileSync("test.srt").toString(); // toString 은 제외가능. Buffer 를 String 으로 바꾸기 위함.
위의 코드는 test.srt 파일에서 내용을 읽어 srtFileSource 에 저장하는 코드입니다.
그럼 이제 srt 를 JSON 으로 파싱해야겠죠?
아래의 코드를 사용해 보세요.
console.log(srt.toJSON(file));
이 코드를 줄여서 다음의 코드를 사용해도 됩니다.
console.log(file.srtToJSON(file));
이제 실행해봅시다.
이곳에서 시작과 끝을 모두 100 ms 만큼 늘리려면 어떻게 해야 할까요?
바로 startAdd 와 endAdd 를 사용하면 됩니다.
일단 json 이라는 변수에 변환된 JSON 을 저장합니다.
var json = file.srtToJSON();
이제 start 와 end에 시간을 100 ms 씩 늘려주어야합니다.
다음과 같은 방법으로 시간을 늘려줄 수 있습니다.
for(var i = 0; i < json.length; i++) {
json[i].startAdd(100);
json[i].endAdd(100);
}
그 다음 출력해보면...
console.log(json);
이런 값을 얻을 수 있습니다.
이전 출력과는 다르게 100 ms 씩 늘었습니다.
하지만 이 함수는 단점이 있습니다.
바로 ms 단위로만 해야한다는겁니다.
간단한 식만 있으면 해결될 문제지만,
다른 방법이 필요해보입니다.
그래서 원하는곳을 원하는 만큼 늘리는 방법에 대해 알려드리겠습니다.
2. 실습 - 2
일단 먼저 for문을 돌며 원하는 값만큼 늘립니다.
for(var i = 0; i < json.length; i++) {
json[i].start.milisecond += 1250;
json[i].start.minute += 2;
json[i].end.milisecond += 1250;
json[i].end.minute += 2;
}
그 다음 출력하면
이런 값이 나옵니다.
하지만 문제가 있습니다.
1000ms 는 1s 인데 올림되지 않았습니다.
"그럼 어떻하죠....?"
다 방법이 있습니다.
바로 data.prototype.check() 을 이용하면 됩니다.
for(var i = 0; i < json.length; i++) {
json[i].start.milisecond += 1250;
json[i].start.minute += 2;
json[i].end.milisecond += 1250;
json[i].end.minute += 2;
json[i].check();
}
위와 같이 for문을 돌며 check 해주면, 더해서 문제가 생길때 바로 올림해줍니다.
결과를 볼까요?
와우! 이제 완벽해 보입니다.
하지만, 아직 이 JSON 을 다시 Srt 로 변환하지는 못했습니다.
그래야 저장을 할 수 있을텐데 말이죠.
2편에 계속.......
'코딩' 카테고리의 다른 글
[코딩] JSON? 그게 뭐지? (0) | 2022.12.08 |
---|---|
[코딩] 프로토타입? 그게 뭐죠? (0) | 2022.12.08 |
[JS] 쿼리스트링을 가져와서 JSON 으로 바꾸기 (0) | 2022.12.06 |
[Node.js] 데이터베이스 직접 만들기 2편 (0) | 2022.11.06 |
[웹] 세로선 가로선 만들기 (0) | 2022.11.06 |
댓글