Chuyển đến nội dung chính
SubtitleMatrix

Trích phụ đề từ video

Đầu vào mediaPhụ đề bên trong video

Lần chạy đầu tiên tải bộ máy phụ đề — khoảng 31 MB, do trang này phục vụ và được trình duyệt lưu đệm sau đó. Bản thân video không bao giờ rời khỏi thẻ này.

Trang này nhận một tệp video và trả lại những track phụ đề đã nằm sẵn trong đó, mỗi track một tệp, đặt tên theo ngôn ngữ của track. Một tệp Matroska có track SDH tiếng Anh, một track tiếng Trung và một track ảnh PGS cho ra ba tệp: một .srt, một .srt nữa và một .sup. Container được demux chứ không mã hóa lại, nên track văn bản được sao ra đúng các byte đã có trong tệp — không chép lại từ màn hình, không canh lại thời gian. Video được đọc cục bộ bằng ffmpeg biên dịch sang WebAssembly do site tự phục vụ, và không byte video nào được tải lên.

Phụ đề cháy thẳng vào hình thì không trích được, và không công cụ nào làm được, vì không có track để đọc — những chữ đó là điểm ảnh. Nếu tệp không có luồng phụ đề nào, trang nói vậy thay vì tạo tệp rỗng, kể cả trường hợp cháy hình: video có phụ đề hiện trên hình mà không có track phụ đề sẽ được báo là không có gì để trích. Trang liệt kê mọi luồng phụ đề trước khi ghi bất cứ thứ gì: chỉ số, codec, ngôn ngữ, tiêu đề, và việc luồng được đánh dấu default hay forced.

Track đã nằm trong container riêng thì giữ nguyên định dạng — ASS vẫn là ASS, WebVTT vẫn là WebVTT — vì chuyển sang SRT ở đây sẽ lặng lẽ làm rơi kiểu hiển thị, mà làm rơi kiểu khi không ai yêu cầu là điều site này không làm. Track có codec không có container độc lập (như mov_text trong MP4) được mã hóa lại sang SRT, và thẻ kết quả nói rõ thay vì để nó đi qua như một bản sao. Track dạng hình ra dưới dạng hình chứ không phải chữ: luồng PGS thành .sup, luồng DVD thành .sub — ảnh chính là thứ có trong tệp, và đoán chữ từ nó là việc riêng của trang khác. Nếu bạn hủy giữa chừng, worker đang trích bị dừng ngay lập tức; còn lần tải ffmpeg khoảng 31 MB ở lần dùng đầu cũng hủy được.

Câu hỏi thường gặp

Tôi thả được những container video nào?

MKV, MP4, M4V, AVI, MOV, TS, WebM, WMV, FLV, MPG và OGV. Danh sách này thật ra là danh sách demuxer mà bản ffmpeg đi kèm có, không phải danh sách codec video: bất kể bên trong container là gì, các track phụ đề vẫn là cùng loại luồng. Tệp có phần mở rộng lạ nhưng thân là Matroska bình thường thường vẫn chạy, vì demuxer đọc phần đầu chứ không đọc tên; một bản tải về bị phân mảnh hoặc thiếu thì thường không, vì không có index để đi.

Video có rời khỏi máy tôi trong lúc được đọc không?

Không. Thứ duy nhất được tải xuống là chính lõi ffmpeg, khoảng 31 MB, do site này phục vụ và được trình duyệt lưu đệm sau lần đầu. Video của bạn được gắn vào hệ thống tệp ảo của lõi ngay trong tab và đọc từ đó; nó không bao giờ được ghi vào thân một yêu cầu. Bạn xác nhận được điều này trong bảng Network: khi một tệp đang được xử lý, không có yêu cầu nào mang theo nó. Chính tính chất đó là lý do trang này tồn tại — phần lớn công cụ trích xuất tải lên trước, mà tài liệu đang bị giữ vì lý do pháp lý hay y tế thì không tải lên được.

Vì sao tôi nhận tệp .sup thay vì .srt?

Vì track đó được lưu dưới dạng hình, không phải chữ. Luồng PGS (codec hdmv_pgs_subtitle) là một chuỗi ảnh, và cách trích trung thực một luồng ảnh là một luồng ảnh: tệp .sup, đúng thứ trình phát và trình biên tập phụ đề chờ đợi. Biến nó thành chữ nghĩa là nhận dạng chữ cái trong từng ảnh, một trang khác có câu hỏi ngôn ngữ và bước đọc soát. Công cụ trích không bao giờ bịa ra chữ nó chưa đọc.

Công cụ làm gì với một track có định dạng không có tệp độc lập?

Nó mã hóa lại riêng track đó sang SRT và đánh dấu kết quả là đã mã hóa lại. Trường hợp phổ biến là mov_text, codec phụ đề nằm trong MP4: nó không có định dạng tệp riêng, nên sao luồng ra sẽ tạo ra byte không gì mở được. Mã hóa lại không phải không mất mát — kiểu hiển thị và vị trí mà mov_text có thể mang không sống sót — nên thẻ kết quả liệt kê đó là mất mát thay vì trình bày tệp như một bản sao nguyên vẹn của thứ trong container.

Tên các tệp đầu ra được đặt thế nào khi có nhiều track?

Theo tên của video và mã ngôn ngữ của track: một tệp tên documentary.mkv với track tiếng Anh cho documentary.eng.srt. Khi hai track cùng ngôn ngữ — một track tiếng Anh thường và một track SDH tiếng Anh, chuyện rất phổ biến — track thứ hai thành documentary.eng-2.srt thay vì ghi đè track đầu. Track không có thẻ ngôn ngữ dùng chỉ số luồng của nó, nên vẫn phân biệt được. Nếu bạn nhận nhiều hơn một tệp, trang đưa chúng thành một zip, vì trình duyệt chặn một trang khởi nhiều lượt tải cùng lúc.

Vì sao lần chạy đầu lâu hơn lần sau?

Lần đầu tải lõi ffmpeg, khoảng 31 MB. Dòng tiến trình bao gồm lần tải đó rồi tới việc trích xuất. Trình duyệt lưu đệm lõi, nên các lần chạy sau trên cùng trang gần như bắt đầu ngay; điều tương tự đúng sau khi tải lại nếu bộ đệm chưa bị xóa. Lõi được phục vụ thành bốn mảnh vì nền tảng lưu trữ từ chối tệp đơn trên 25 MiB, và trang ghép chúng trong bộ nhớ trước khi bắt đầu — việc ghép đó cũng nằm trong thời gian chờ của lần chạy đầu.

Tôi có hủy được một lượt chạy mất quá lâu không?

Được. Nút hủy dừng việc trích đang chạy và kết thúc worker đang làm việc đó ngay lập tức, nên một tệp lớn không giữ một nhân máy bận sau khi bạn đã quyết định không chờ. Hủy không phải lỗi: mục đó trở về trạng thái bạn thử lại được, và lượt sau khởi động worker mới. Không có phần dở dang nào được đưa ra tải xuống, vì một tệp phụ đề viết dở mà trông hoàn chỉnh còn tệ hơn không có tệp. Riêng lần tải lõi ffmpeg cũng hủy được giữa chừng.

Công cụ liên quan