Làm cách nào để loại bỏ luồng âm thanh từ tệp MKV?


16

Tôi đã cố gắng loại bỏ các luồng âm thanh không cần thiết khỏi tệp MKV (Matroska). Lý do tại sao tôi muốn làm điều này là để tránh phải chọn thủ công luồng mong muốn trong Windows Media Player.

Tệp đầu vào cung cấp thông tin ffmpeg sau:

Stream #0.0: Video: mpeg4, yuv420p, 704x396 [PAR 1:1 DAR 16:9], 29.98 tbr, 1k tbn, 29.98 tbc
Stream #0.1(eng): Audio: aac, 24000 Hz, 5.1, s16
Stream #0.2(jpn): Audio: aac, 24000 Hz, 5.1, s16
Stream #0.3(eng): Subtitle: 0x0000
Stream #0.4(eng): Subtitle: 0x0000
Stream #0.5: Attachment: 0x0000
Stream #0.6: Attachment: 0x0000

Vì tôi muốn các luồng 0, 1 và 3 (phụ), lệnh ffmpeg của tôi trông như thế này:

ffmpeg -i input.mkv -map 0:0 -map 0:1 -map 0:3 -vcodec copy -acodec libmp3lame -newsubtitle test.mkv

Điều kỳ lạ đưa ra lỗi:

At least one output file must be specified

Xóa phụ đề:

ffmpeg -i input.mkv -map 0:0 -map 0:1 -vcodec copy -acodec libmp3lame test.mkv

đưa tôi cái này:

Number of stream maps must match number of output streams

Tôi dường như không thực sự hiểu cách thức hoạt động của tùy chọn "bản đồ". Ai đó sẽ giúp tôi tìm ra nó?

Câu trả lời:


25

Nếu tất cả những gì bạn muốn làm là xóa một luồng, không mã hóa lại, có lẽ bạn muốn làm điều này với gói MKVtoolnix (xem trang của videohelp.com ).

Có một vài GUI có thể giúp bạn (kiểm tra xung quanh liên kết videohelp). Tôi không chắc mkvmergedòng lệnh chính xác có thể là gì, nhưng tôi nghĩ một cái gì đó như thế này sẽ hoạt động:

# first, get audio track info so we know which one to keep
mkvmerge -i input.mkv
File 'input.mkv': container: Matroska
Track ID 1: video (V_MPEG4/ISO/AVC)
Track ID 2: audio (A_AAC)
Track ID 3: audio (A_AAC)        <----------- for example, let's keep this one
Track ID 4: audio (A_AAC)

mkvmerge -o output.mkv --atracks 3 input.mkv

Đó nên làm các trick (Tôi không có một tập tin có ích để thử nghiệm, xin lỗi). Các --atrackstùy chọn kể mkvmergeđể sao chép chỉ liệt kê các bài hát âm thanh vào file mới. Nếu bạn muốn giữ 2 & 3 nhưng không phải 4, bạn có thể sử dụng --atracks 2,3.

mkvmergecó rất nhiều tùy chọn khác để đặt tiêu đề, thêm độ trễ để đồng bộ hóa âm thanh, v.v., vì vậy hãy kiểm tra trang chủ để biết chi tiết.


5
Có vẻ như --atrackstùy chọn không còn tồn tại nữa, thay vào đó người ta nên sử dụng --audio-trackshoặc --video-tracks.
malat

0

Cố gắng -fép định dạng đã chỉ định:

ffmpeg -i input.mkv -map 0: 0 -map 0: 1 -map 0: 3 -vcodec sao chép -acodec libmp3lame -newsubtitle -f mkv test.mkv

Điều này kỳ lạ mang đến cho tôi lỗi: "Ít nhất một tệp đầu ra phải được chỉ định"
StackedCrooking

hãy thử sử dụng một đường dẫn đầy đủ, tức là: C: \ path \ to \ output.mkv (Tôi giả sử bạn đang ở trên cửa sổ bởi tham chiếu trình phát đa phương tiện)
John T

@ John T: sử dụng đường dẫn đầy đủ (có hoặc không có dấu ngoặc kép) vẫn cung cấp cho tôi thông báo lỗi "Ít nhất một tệp đầu ra phải được chỉ định".
StackedCrooking

0

Thực sự có hai vấn đề riêng biệt ở đây:

  1. Trong dòng lệnh đầu tiên, thứ tự của các tham số có thể sai. Tôi nghĩ rằng công -newaudiotắc cần phải ở cuối, sau tên tệp đầu ra.

  2. Dòng lệnh thứ hai, "Xóa phụ đề", vì tệp đầu vào có phụ đề, bạn cần sử dụng công -sntắc để xóa chúng. Mặt khác, có vẻ như FFmpeg muốn ít nhất một chỉ định trong -mapdanh sách.


0

Trong lệnh đầu tiên của bạn, bạn đã không chỉ định rằng test.mkv là tệp đầu ra của bạn. Có vẻ như bạn cần thay đổi phần đó thành một cái gì đó giống ... -c copy test.mkvhoặc chỉ định codec như thế nào ... -c:s copy test.mkv.

Và không chắc -newsubtitlelá cờ đó đang làm gì ở đó. Nhưng nếu bạn có một tệp phụ đề mà bạn muốn thêm vào, bạn sẽ có thể thực hiện một cờ đầu vào khác -i input.srt. Xem liên kết này cho điều đó.

Trong lệnh thứ hai của bạn, tôi nghĩ có vẻ như bạn đang cố gắng ánh xạ luồng video và cố gắng sao chép nó. Vì vậy, bạn có thể muốn thử loại bỏ -vcodec copyhướng dẫn và nó sẽ hoạt động. :)


1
Không có bộ l xác định luồng .
llogan
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.