본문으로 바로 가기
SubtitleMatrix

동영상에서 자막 추출

미디어동영상 속 자막

처음 실행하면 자막 엔진을 내려받습니다. 약 31 MB이고 이 사이트가 제공하며 이후에는 브라우저가 캐시합니다. 동영상 자체는 이 탭을 떠나지 않습니다.

이 페이지는 영상 파일을 받아 그 안에 이미 들어 있는 자막 트랙을 트랙마다 파일 하나로 돌려줍니다. 파일 이름은 트랙의 언어를 따릅니다. 영어 SDH 트랙, 중국어 트랙, PGS 그림 트랙이 든 Matroska 파일은 .srt, 또 다른 .srt, .sup 세 파일로 나옵니다. 컨테이너를 다시 인코딩하지 않고 디먹스하므로, 텍스트 트랙은 파일에 이미 있던 바이트 그대로 복사됩니다. 화면에서 다시 타이핑하지도, 시각을 다시 맞추지도 않습니다.

작업은 탭 안에서 합니다. 영상은 이 사이트가 직접 제공하는 WebAssembly 빌드 ffmpeg가 읽고, 네트워크 요청은 그 엔진뿐입니다. 처음 사용할 때 약 31MB이고 이후 브라우저가 캐시합니다. 영상 자체는 어디에도 전송되지 않습니다. 여기의 다른 모든 페이지가 따르는 규칙이고, 기기 밖으로 나가면 안 되는 자료에 이 페이지를 쓸 수 있는 이유입니다.

그림에 구워진 자막은 추출할 수 없고 어떤 도구도 할 수 없습니다. 읽을 트랙이 없기 때문입니다. 그 단어들은 픽셀입니다. 파일에 자막 스트림이 전혀 없으면 이 페이지는 빈 파일을 만드는 대신 그렇게 말하며, 구워진 경우도 포함합니다. 자막이 보이는데 자막 트랙이 없는 영상은 뽑아낼 것이 없다고 보고됩니다.

페이지는 무엇이든 쓰기 전에 찾은 모든 자막 스트림을 나열합니다. 인덱스, 코덱, 언어, 제목, 기본 또는 강제 표시 여부입니다. 이미 자기 컨테이너가 있는 트랙은 형식을 유지합니다. ASS는 ASS로, WebVTT는 WebVTT로 남습니다. 여기서 SRT로 바꾸면 스타일을 조용히 버리게 되고, 요청받지 않은 스타일 삭제는 이 사이트가 하지 않는 일이기 때문입니다. 독립 컨테이너가 없는 코덱의 트랙, 예를 들어 MP4 안의 mov_text 트랙은 SRT로 다시 인코딩하며, 결과 카드가 복사본인 척하지 않고 그렇게 말합니다.

비트맵 트랙은 텍스트가 아니라 그림으로 나옵니다. PGS 스트림은 .sup가 되고 DVD 스트림은 .sub가 됩니다. 의도적입니다. 그림이 파일에 있던 것이고, 그 텍스트를 추측하는 일은 자기 페이지와 자기 언어 질문을 가진 별개의 작업입니다. 텍스트가 필요하면 .sup를 PGS 페이지로 가져가세요.

자주 묻는 질문

어떤 영상 컨테이너를 넣을 수 있나요?

MKV, MP4, M4V, AVI, MOV, TS, WebM, WMV, FLV, MPG, OGV입니다. 이 목록은 실제로는 영상 코덱 목록이 아니라 함께 들어 있는 ffmpeg 빌드가 가진 디먹서 목록입니다. 컨테이너 안에 무엇이 있든 자막 트랙은 같은 종류의 스트림이기 때문입니다. 확장자는 특이하지만 본체가 평범한 Matroska인 파일은 대개 여전히 동작합니다. 디먹서가 이름이 아니라 헤더를 읽기 때문입니다. 조각났거나 불완전하게 내려받은 파일은 종종 동작하지 않습니다. 훑을 인덱스가 없기 때문입니다.

영상을 읽는 동안 영상이 컴퓨터를 떠나나요?

아니요. 내려받는 것은 이 사이트가 제공하고 첫 사용 뒤 브라우저가 캐시하는 ffmpeg 엔진 약 31MB뿐입니다. 영상은 탭 안에서 엔진의 가상 파일 시스템에 마운트되어 거기서 읽히고, 요청 본문에 쓰이지 않습니다. 네트워크 패널에서 확인할 수 있습니다. 파일을 처리하는 동안 그것을 실어 나르는 요청은 없습니다. 이 성질이 페이지가 존재하는 이유입니다. 대부분의 추출기는 먼저 업로드하고, 법률이나 의료상 보류 중인 자료는 업로드할 수 없습니다.

왜 .srt가 아니라 .sup 파일이 나왔나요?

그 트랙이 텍스트가 아니라 그림으로 저장되어 있기 때문입니다. PGS 스트림은 hdmv_pgs_subtitle 코덱의 이미지 연속이고, 이미지 스트림을 정직하게 추출하면 이미지 스트림, 즉 .sup가 됩니다. 플레이어와 자막 편집기가 기대하는 바로 그 형식입니다. 텍스트로 바꾸려면 그림마다 글자를 인식해야 하고, 그것은 언어 질문과 교정 단계가 있는 다른 페이지입니다. 추출기는 읽지 않은 텍스트를 지어내지 않습니다.

독립 파일 형식이 없는 트랙은 도구가 어떻게 처리하나요?

그 트랙 하나를 SRT로 다시 인코딩하고 결과를 재인코딩으로 표시합니다. 흔한 경우는 MP4 안에 사는 자막 코덱 mov_text입니다. 자기 파일 형식이 없어 스트림을 그대로 복사하면 아무것도 열 수 없는 바이트가 나옵니다. 재인코딩은 무손실이 아닙니다. mov_text가 담을 수 있는 스타일과 위치가 살아남지 않으므로, 결과 카드는 컨테이너에 있던 것의 손대지 않은 복사본으로 제시하는 대신 손실로 나열합니다.

트랙이 여러 개일 때 출력 파일 이름은 어떻게 정해지나요?

영상 자체의 이름과 트랙의 언어 코드를 따릅니다. documentary.mkv에 영어 트랙이 있으면 documentary.eng.srt가 됩니다. 두 트랙이 같은 언어를 공유하면, 흔히 일반 영어 트랙과 영어 SDH 트랙이 그렇습니다, 두 번째는 첫 번째를 덮어쓰지 않고 documentary.eng-2.srt가 됩니다. 언어 태그가 없는 트랙은 스트림 인덱스로 돌아가므로 여전히 구별됩니다. 파일이 둘 이상이면 페이지가 하나의 zip으로 제공합니다. 브라우저가 한 페이지에서 여러 다운로드를 동시에 시작하는 것을 막기 때문입니다.

첫 실행이 두 번째보다 오래 걸리는 이유는 무엇인가요?

첫 실행이 약 31MB의 ffmpeg 엔진을 내려받기 때문입니다. 진행 줄은 그 다운로드와 이어지는 추출 자체를 모두 다룹니다. 브라우저가 엔진을 캐시하므로 같은 페이지의 이후 실행은 거의 즉시 시작합니다. 캐시가 지워지지 않았다면 새로 고친 뒤에도 마찬가지입니다. 호스팅 플랫폼이 25MiB를 넘는 개별 파일을 거부해 엔진을 네 조각으로 제공하고, 페이지가 시작 전에 메모리에서 다시 합칩니다. 그 재조립도 같은 첫 실행 대기의 일부입니다.

너무 오래 걸리는 실행을 취소할 수 있나요?

네. 취소 버튼은 실행 중인 추출을 멈추고 그것을 하는 워커를 종료하므로, 기다리지 않기로 한 뒤에도 큰 파일이 코어를 붙잡고 있지 않습니다. 취소는 오류가 아닙니다. 항목은 다시 시도할 수 있는 상태로 돌아가고 다음 실행은 새 워커로 시작합니다. 부분 결과를 다운로드로 제공하지 않습니다. 완성된 것처럼 보이는 반쯤 쓰인 자막 파일은 파일이 없는 것보다 나쁘기 때문입니다.

관련 도구