Làm cách nào để thêm và xóa phụ đề trong tệp MKV?


28

Tôi có một tệp MKV chất lượng tốt có một số tùy chọn phụ đề. Tôi muốn thêm một tập tin phụ đề vào danh sách. Tôi đang sử dụng OSX.

Một số tìm kiếm trực tuyến đã khiến tôi sử dụng các trình chuyển đổi video và về cơ bản mã hóa lại bộ phim thành một tệp mới. Điều đó dường như thực sự quá mức với tôi. Ngoài ra, tôi có thể mất phụ đề trước đó và một số chất lượng hình ảnh trên đường đi.

Câu trả lời:


41

Xóa phụ đề:

mkvmerge -o output.mkv input.mkv -S # remove all subtitle tracks
mkvmerge -o output.mkv input.mkv -s 3,4 # remove tracks 3 and 4
mkvmerge -o output.mkv input.mkv -s '!3' # remove all subtitle tracks except 3
mkvmerge -i input.mkv # show track numbers

Thêm phụ đề:

mkvmerge -o output.mkv input.mkv subs.srt
mkvmerge -o output.mkv input.mkv --language 0:ger --track-name 0:German subs.srt

Trích xuất phụ đề:

mkvextract tracks input.mkv 3:subs.srt
for f in *.mkv; do
  sub=$(mkvmerge -i "$f" | awk '$4=="subtitles"{print;exit}')
  [[ $sub ]] || continue
  [[ $sub =~ S_TEXT/ASS ]] && ext=ass || ext=srt
  track=$(awk -F '[ :]' '{print $3}' <<< "$sub")
  mkvextract tracks "$f" "$track:${f%mkv}$ext"
done

mkvmerge và mkvextract có thể được cài đặt với brew install mkvtoolnix.


2
MKVMerge GUI đã có sẵn trên Mac OS X, tuy nhiên, đây là cách tốt để dành cho người hâm mộ giao diện điều khiển.
Bora

Lưu ý rằng các lệnh ở trên để thêm phụ đề cũng đặt phụ đề là Kích hoạt theo mặc định, khi bật tệp. (Cờ này có thể được xác nhận bằng GUI MKVMerge.) Để tránh điều này, hãy sử dụng --default-track '0:0'.
Mathias Bynens

4

Có hai cách cơ bản để hiển thị phụ đề. Bạn có thể mã hóa các pixel vào video. Điều này được gọi là "hardsubbing". Ưu điểm ở đây là sự đơn giản cho trình phát video, nó chỉ là một luồng video. Nhược điểm là bạn phải mã hóa lại video, mất thời gian và mất một số độ trung thực. Nếu bạn có bản dịch tốt hơn, thì đó là pixel trong video. Và bạn chỉ có thể có một ngôn ngữ.

Điều có phần tốt hơn là "softsubbing", đó là có một tệp văn bản ở một nơi nào đó, tách biệt với luồng video. Có nhiều định dạng khác nhau của các tệp phụ đề, nhưng tại cơ sở của chúng, tất cả chúng đều có "văn bản, bắt đầu thời gian nào, loại bỏ thời gian nào" ở cốt lõi của chúng. Một số có các tính năng bổ sung như màu sắc và định hướng trên màn hình. Ưu điểm của việc này là bạn có thể có nhiều ngôn ngữ (nghĩ về DVD, bạn có sẵn nhiều ngôn ngữ) và bạn có thể sửa lỗi chính tả và như vậy trong tệp. Và nếu bạn không cần phụ đề, bạn chỉ cần tắt chúng đi.

Softsub có thể là các tệp riêng biệt - hầu hết người chơi sẽ tự động tìm phụ đề có cùng tên (phần mở rộng khác nhau) làm video chính. Hoặc các định dạng tệp chứa nhất định (như MKV) có thể có chúng được nhúng bên trong. Kiểm tra MKVtoolnix (có cổng mac) để biết các công cụ tệp MKV. Điều này sẽ cho phép bạn nhúng softsub mà không cần mã hóa lại.

Lưu ý rằng không phải tất cả người chơi có thể hỗ trợ tất cả các định dạng. Kinh nghiệm của tôi là XBMC có vấn đề với các tệp SSA, nhưng các tệp SRT đơn giản hơn nhiều là ổn. VLC sẽ chơi mọi thứ, nếu nó được hỗ trợ trên nền tảng của bạn.


1
Câu trả lời tốt, mặc dù cần lưu ý rằng một số phụ đề mềm - đặc biệt là phụ đề DVD - là dựa trên bitmap, thay vì dựa trên văn bản. Tác dụng chính của nó là làm cho chúng gần như không thể chỉnh sửa -_-
evilsoup

@evilsoup cảm ơn, không biết điều đó.
Rich Homolka

1
Đúng, IDX + SUB VOBsub , trong đó IDX là tệp văn bản nhưng SUB chứa bitmap.
Karan

thay đổi liên kết đến trang tải xuống trực tiếp.
Bora

0

Tôi nhận ra đây là một câu hỏi cũ và user495470câu trả lời đã được chấp nhận vào năm 2013, nhưng vì một phần của câu hỏi là về việc thêm phụ đề vào tệp, tôi muốn thêm phần bổ sung mới này.

Về cơ bản, tôi cần hợp nhất hàng tá .assphụ đề vào các tệp MKV có tên tương tự, do đó, thực hiện lệnh này tại một thời điểm không phải là cắt nó. Vì vậy, tôi đã tạo ra tập lệnh Bash đơn giản này sẽ tìm kiếm thư mục hiện tại mà nó chạy từ .asscác tệp và sau đó hợp nhất chúng như mong đợi.

find -E . -maxdepth 1 -type f -iregex '.*\.(ASS|SRT)$' |\
  while read FILEPATH
  do
    DIRNAME=$(dirname "${FILEPATH}");
    BASENAME=$(basename "${FILEPATH}");
    FILENAME="${BASENAME%.*}";
    EXTENSION="${BASENAME##*.}"
    mkvmerge -o "/Users/jake/${FILENAME}"-NEW.mkv "${FILENAME}".mp4 --language 0:eng --track-name 0:English "${FILENAME}"."${EXTENSION}"
  done

Tất nhiên, tập lệnh đơn giản này giả định rằng phụ đề là tiếng Anh và hợp nhất chúng như vậy, nhưng điều đó có thể được điều chỉnh thủ công cho mỗi nhu cầu sử dụng; vấn đề lớn của việc tự động hợp nhất phụ đề với MKV được giải quyết bằng một tập lệnh đơn giản như thế này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.