
Nhiệm vụ xử lý seri phim 200 tập. Mỗi file phim có 2 luồng audio, cần bỏ đi 1 luồng audio tiêng Anh để khi tải lên Drive sẽ xem online được với tiếng Việt.
Công cụ được sử dụng là MKVToolNix, môi trường VPS Linux 22.04 LTS của Linode, tạo 1 volumes 500GB để lưu dữ liệu (/mnt/ngoc).
Sử dụng Transmission để tải torrent về VPS.
Tạo 1 thư mục tổng để xử lý hàng loạt cho nhanh và di chuyển toàn bộ file qua đó:
cd /mnt/ngoc
mkdir main
mv *.mkv main
MỤC LỤC
MKVTOOLNIX
Dòng lệnh để cài đặt:
sudo apt update
sudo apt install mkvtoolnix
Để xem thông tin các luồng trong tập tin mkv ta dùng lệnh, vòng lặp for sẽ chạy lần lượt tất cả các file mkv trong thư mục, ta có thể dùng for f in *S01* (các file có tên chứa S01) để xử lý các file của từng season:
for f in *.mkv; do mkvmerge -i "$f"; done
Để xem chi tiết các luồng trong tập tin mkv ta dùng lệnh:
for f in *.mkv; do mkvmerge -J "$f"; done
Lệnh mkvmerge có dạng:
mkvmerge -o <đích> <tham số> <nguồn>
Các tham số cần quan tâm:
-D loại bỏ video
-A loại bỏ audio
-S loại bỏ sub
-T loại bỏ tag
-M loại bỏ attachment
--no-chapters loại bỏ chapters
-A -S -T -M --no-chapters loại bỏ hết chỉ lấy video
-a vie -s vi,en chỉ giữ lại audio vi và sub vi, en (und chỉ các track không được xác định ngôn ngữ)
Ví dụ để loại bỏ luồng âm thanh có id số 1, ta chạy lệnh:
for f in *.mkv; do mkvmerge -o "output/$f" -a 3,4,5 "$f"; done
Tham số -a 3,4,5 sẽ chỉ lấy các luồng âm thanh có id là 3, 4, 5 (nếu id đó không phải là âm thanh sẽ tự động được bỏ qua).
Ta cũng có thể chỉ đích danh các luồng âm thanh theo ngôn ngữ, dòng lệnh dưới đây sẽ chỉ lấy audio ngôn ngữ là tiếng Việt và sub tiếng Việt hoặc tiếng Anh:
for f in *.mkv; do mkvmerge -o "output/$f" -a vie -s vie,eng "$f"; done
Để remuxing 2 file lại ta dùng lệnh:
mkvmerge -o <đích> <file1> <file2>
MKVPROPEDIT
mkvpropedit là công cụ giúp chỉnh sửa các thuộc tính của file và các track, câu lệnh dưới đây sẽ đặt các thuộc tính của track 1 làm mặc định:
# Điều chỉnh cách track
for f in *.mkv; do mkvpropedit \
--edit track:1 \
--set name="" \
--set language="vi" \
--set flag-default=1 \
--set flag-enabled=1 \
--set flag-forced=1 \
"$f"; done
Hoặc loại bỏ tiêu đề của tập tin:
for f in *.mkv; do mkvpropedit -d title "$f"; done
BÀI TẬP TÌNH HUỐNG
Game of Thrones/
├─ S01E01/
│ ├─ S01E01.mp4
│ ├─ vi.srt
│ ├─ en.srt
├─ S01E02/
│ ├─ S01E02.mp4
│ ├─ vi.srt
│ ├─ en.srt
├─ .../
Minh họa ta có thư mục phim gồm rất nhiều các tập, mỗi tập là một thư mục với tập tin mp4, phụ đề tiếng Việt vi.srt và tiếng Anh en.srt. Ta cần dùng mkvmerge để mux chúng lại thành 1 tập tin .mkv và đưa ra thư mục chính.
Việc dùng lệnh rất đơn giản thay vì hàng loạt các thao tác kéo thả chọn tập tin trên GUI:
cd .../"Game of Thrones"
for f in *; do \
mkvmerge -o $f.mkv $f/*.mp4 \
--default-track 0:yes --forced-display-flag 0:yes --language 0:vi $f/vi.srt \
--default-track 0:no --language 0:en $f/en.srt ; done
* ở đây là đại diện cho tên thư mục.
Mở rộng trong trường hợp bạn mux nhiều thành phần audio, sub:
!for f in *; do mkvmerge -o $f.mkv $f/*.mp4 \
--default-track 0:yes --forced-display-flag 0:yes --language 0:vi $f/vi.mkv \
--default-track 0:no --language 0:en $f/en.m4a \
--default-track 0:yes --forced-display-flag 0:yes --language 0:vi $f/vi.srt \
--default-track 0:no --language 0:en $f/en.srt; done
CUT VÀ NỐI VIDEO VỚI MKVTOOLNIX
Đây là một trong những thứ đầy “ma thuật”. Cut nối video sẽ đi kèm cả phụ đề và các kênh âm thanh. Việc này sẽ không bao gồm việc recode lại video nên tốc độ khá nhanh, bù lại có thể mất một vài khung hình.
Câu lệnh tương đối đơn giản, sau khi chạy bạn sẽ thu được 1 file gồm các phân đoạn có thời gian liệt kê.
mkvmerge -o <tập tin đích> --split parts:00:15:23-00:18:51,+01:32:48-01:45:05 <tập tin nguồn>
Nối các file video cùng thông số:
$ mkvmerge -o full.mkv file1.mkv +file2.mkv
LỆNH RENAME BỎ KÝ TỰ SAU –
Lệnh này thường xử lý để đổi tên phim dạng “Silo S01E01 – Freedom Day.mkv” thành “Silo S01E01.mkv”
for file in *; do
ext=.${file##*.}
[ "$ext" = ".$file" ] && ext=""
nostr=${file%% -*}
mv "$file" "$nostr$ext"
done
Tham khảo thêm về mkvtoolnix tại đây.








