본문으로 바로 가기
SubtitleMatrix

PGS 자막을 SRT로 변환

미디어비트맵 자막 (PGS / VobSub)

처음 실행하면 문자 인식기를 내려받습니다. 약 4 MB에 언어 모델이 더해지고, 이 사이트가 제공하며 이후에는 브라우저가 캐시합니다. 업로드되는 것은 없고 결과는 기계가 읽은 것이므로, 의존하기 전에 교정하세요.

옵션

비트맵 자막은 글자의 그림이라, 말을 다시 읽어 내야 합니다. 인식기에게 자막이 실제로 쓰인 언어를 알려 주세요. 목록에는 이 사이트가 제공하는 모든 언어가 있습니다. 러시아어 자막을 영어 모델로 읽으면 러시아어가 아니라 잡음이 나옵니다. 고른 모델만 내려받고(다른 것은 절대 받지 않습니다), 언어를 바꾸면 언어당 한 번 내려받은 뒤 캐시됩니다.

.sup 파일은 PGS 스트림입니다. Blu-ray 디스크가 쓰는 그림 자막 형식이고, 그 안에 글자는 한 자도 없습니다. 자막마다 팔레트와 함께 비트맵으로 저장되고, 나타나야 할 순간이 따로 적히며, 플레이어가 영상 위에 합성합니다. 그러니 여기서 글자를 얻는다는 것은 그림마다 글자를 읽는 일입니다. 이 페이지는 사이트가 직접 제공하는 문자 인식(OCR) 엔진으로 그 일을 탭 안에서 하고 결과를 .srt 파일로 씁니다.

형식은 세그먼트의 연속입니다. 세그먼트마다 90kHz 단위의 표시 시각, 종류, 길이를 담은 13바이트 헤더가 붙습니다. 중요한 종류는 넷입니다. 팔레트 정의(PDS)는 인덱스 값을 YCbCr을 거쳐 완전한 RGB로 대응시키고, 객체 정의(ODS)는 런렝스로 부호화한 비트맵 하나를 담고, 표시 구성(PCS)은 어떤 객체가 프레임 어디에 앉는지 말하며, 이들을 쌓는 표시 집합(display set)이 있습니다. 자막 블록의 시작은 그것을 보여 주는 표시 집합의 시각입니다. PGS 스트림에는 끝 시각이 전혀 없습니다. 다음 표시 집합이 교체할 때까지 화면에 남으므로, 여기서는 각 블록의 끝을 다음 블록의 시작으로 잡습니다. 플레이어가 실제로 하는 일과 같습니다.

모든 블록을 기계가 읽으므로 글자는 전사가 아니라 읽기입니다. 작은 크기의 세리프 서체, 특이한 글꼴, 두꺼운 외곽선은 한 글자를 다른 글자로 바꿔 놓을 수 있습니다. 결과를 믿기 전에 파일을 교정하세요. 이 주의는 상투적인 문구가 아닙니다. 이 사이트에서 출력이 파일이 말한 것에서 나오지 않는 유일한 자리이고, 페이지는 결과를 정확한 것처럼 제시하지 않고 그렇게 밝힙니다.

자막이 실제로 쓰인 언어를 고르세요. 목록에는 이 사이트가 제공하는 모든 언어가 있고, 각 모델은 자기 문자를 읽습니다. 영어 모델로 일본어 자막을 돌리면 나쁜 번역이 아니라 소음이 나옵니다. 인식기가 거기에 없는 모양을 찾기 때문입니다. 고른 모델만 내려받고 이후에는 캐시됩니다.

그림이 글자를 전혀 내지 못한 블록, 즉 페이드 프레임, 로고, 검은 블록은 빈 줄로 쓰지 않고 건너뛰며 손실 목록에 셉니다. 이미지였던 것은 정신적으로도 이미지로 남습니다. 서체, 색, 외곽선, 화면 위치는 .srt에 없고, 손실 목록이 파일 전체에 대해 한 번 그렇게 말합니다.

자주 묻는 질문

.sup 파일 안에 무엇이 있어서 SRT 변환이 인식 작업이 되나요?

글자가 아니라 세그먼트가 있기 때문입니다. PGS 스트림의 자막은 모두 객체입니다. 팔레트 인덱스로 이루어진 런렝스 비트맵과, 그 인덱스를 RGB로 바꾸는 팔레트 정의가 한 쌍입니다. 파일에서 글자처럼 보이는 값은 표시 시각뿐이고, 그것도 사람이 읽는 문자열이 아니라 90kHz 정수입니다. SRT로 바꾸려면 비트맵마다 캔버스에 올려 글자를 인식해야 하고, 그래서 결과를 교정해야 하며 페이지가 자막 언어를 묻는 것입니다.

출력의 마지막 자막이 원래보다 몇 초 늦게 끝나는 이유는 무엇인가요?

PGS가 자막이 언제 끝나는지 말하지 않기 때문입니다. 플레이어는 다음 구성이 도착하거나 스트림이 지워질 때까지 현재 구성을 보여 주므로, 파일에 존재하는 유일한 끝 시각은 '다음 것의 시작'입니다. 마지막 블록에는 다음 것이 없어 이 페이지가 2초를 주고 그 선택을 손실 목록에 기록합니다. 디스크가 정말 마지막 대사를 10초 동안 남겼다면 정직한 수정은 변환기에 숨은 추측이 아니라 이동이나 표시 시간 편집입니다.

일본어와 영어가 섞인 자막에는 어떤 언어 모델을 골라야 하나요?

대사 대부분이 쓰인 언어를 고르세요. PGS 프레임은 한 줄 안에서 문자 체계를 섞을 수 있습니다. 일본어 문장에 영어 외래어가 라틴 글자로 박혀 있는 일은 흔합니다. 그러나 인식기는 한 번에 모델 하나로 돌고, 한 문자 체계로 학습한 모델은 다른 체계를 쓰레기로 읽습니다. 파일이 정말 두 체계를 번갈아 쓴다면 언어별로 두 번 돌리고 각 회차가 맞게 읽은 줄만 남기세요. 출력이 일반 .srt이므로 두 결과를 합치는 일은 재내보내기가 아니라 비교 작업입니다.

자막의 색이 SRT로 넘어오나요?

아니요, 넘어올 수 없습니다. .sup는 색을 세 겹으로 부호화합니다. 팔레트에는 블록마다 알파 채널이 있는 YCbCr로, 구성에는 1920×1080 프레임 위 비트맵의 위치로, 그리고 비트맵 자체에 그려진 외곽선과 그림자로 들어 있습니다. SRT에는 그 자리가 하나도 없습니다. 이 페이지는 픽셀의 휘도를 읽어 무엇이 글자이고 무엇이 배경인지 판단하며, 문자 인식에 필요한 것은 그뿐입니다. 손실 목록은 색이 살아남은 척하지 않고 파일 전체에 대해 스타일을 한 번 보고합니다.

어떤 블록이 비었거나 빠졌습니다. 그 블록들은 어떻게 된 건가요?

글자를 내지 못한 그림은 빈 자막으로 쓰지 않고 버렸습니다. 페이드 인과 페이드 아웃 프레임, 로고나 기호만 있는 블록, 인식기가 구분할 수 있는 크기보다 작은 글자에서 그런 일이 생깁니다. 하나하나 손실 목록에 세므로 받은 파일이 넣은 파일보다 조용히 짧아지는 일은 없습니다. 개수가 많다면 흔한 원인은 잘못된 언어 모델이거나 비트맵이 유난히 작은 스트림입니다.

.sup 파일이나 그 그림이 어디론가 업로드되나요?

아니요. 인식기는 탭에서 돌고, 그 워커와 WebAssembly 코어와 언어 모델은 모두 이 사이트가 제공하며 브라우저가 캐시합니다. 페이지가 만드는 요청은 그 파일들뿐입니다. 텍스트 페이지보다 여기서 더 중요한 이유가 있습니다. 디스크에서 추출한 PGS 스트림은 스튜디오나 변호사가 제3자에게 가장 맡기기 꺼리는 자료인 경우가 많고, 이 페이지의 요점은 그럴 필요가 없다는 것입니다.

관련 도구