Bir MKV dosyasından ses akışları nasıl şeritlenir?


16

Bir MKV (Matroska) dosyasından gereksiz ses akışlarını kaldırmaya çalışıyorum. Bunu yapmak istememin nedeni, Windows Media Player'da istenen akışı el ile seçmek zorunda kalmamaktır.

Girdi dosyası aşağıdaki ffmpeg bilgilerini verir:

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

Akışları 0, 1 ve 3 (alt) istediğimden, ffmpeg komutum şöyle görünür:

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

hangi garip bir hata veriyor:

At least one output file must be specified

Altyazıları kaldırma:

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

bana bunu verir:

Number of stream maps must match number of output streams

Görünüşe göre "harita" seçeneğinin nasıl çalıştığını anlamıyorum. Birisi anlamama yardım eder mi?

Yanıtlar:


25

Tüm yapmak istediğiniz akışı yeniden kodlamak değil, bir akışı kaldırmaksa, bunu muhtemelen MKVtoolnix paketiyle yapmak istersiniz (bkz. Videohelp.com sayfası ).

Size yardımcı olabilecek birkaç GUI vardır (videohelp bağlantısını kontrol edin). Tam mkvmergekomut satırının ne olabileceğinden emin değilim , ancak böyle bir şeyin işe yarayacağını düşünüyorum:

# 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

Yani gerektiğini hile (Özür, test için kullanışlı bir dosya yok) yapmak. Bu --atracksseçenek yalnızca listelenen ses parçalarını yeni dosyaya mkvmergekopyalamayı söyler . Eğer 2 ve 3 tutmak istiyor ama 4 değil, kullanabilirsiniz .--atracks 2,3

mkvmergebaşlık ayarlamak, ses senkronizasyonu için gecikme eklemek vb. için birçok başka seçeneğe sahiptir, bu nedenle ayrıntılar için manuel sayfaya bakın.


5
Görünüşe göre --atracksseçenek artık mevcut değil, ya --audio-tracksda birini kullanmalı --video-tracks.
malat

0

-fBelirtilen biçimi zorlamaya çalışın :

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

Bu garip bir şekilde bana hata veriyor: "En az bir çıktı dosyası belirtilmelidir"
StackedCrooked

tam bir yol kullanmayı deneyin, yani: C: \ path \ to \ output.mkv (Medya oynatıcı başvurusu ile pencerelerde olduğunuzu varsayıyorum)
John T

@John T: Tam yolu (tırnaklı veya tırnaksız) kullanmak bana hala "En az bir çıktı dosyası belirtilmelidir" hata iletisini veriyor.
StackedCrooked

0

Burada gerçekten iki ayrı sorun var:

  1. İlk komut satırında, parametrelerin sırası yanlış olabilir. Bence -newaudioçıktı dosyasının adından sonra anahtarın sonunda olması gerekiyor.

  2. İkinci komut satırı "Altyazıları kaldırma", giriş dosyasında altyazı bulunduğundan, -snbunları kaldırmak için anahtarı kullanmanız gerekir. Aksi takdirde, FFmpeg -maplistede en az bir tane belirtmek istiyor gibi görünüyor .


0

İlk komutunuzda test.mkv dosyasının çıktı dosyanız olduğunu belirtmediniz. Görünüşe göre bu parçayı benzer bir şey olarak değiştirmeniz ... -c copy test.mkvveya kodek gibi belirtmeniz gerekiyor ... -c:s copy test.mkv.

Ve o -newsubtitlebayrağın orada ne yaptığından emin değilim . Ancak eklemek istediğiniz bir altyazı dosyanız varsa, başka bir giriş bayrağı da yapabilmeniz gerekir -i input.srt. Bunun için bu bağlantıya bakın .

İkinci komutunuzda, video akışını eşlemeye ve kopyalamaya çalıştığınızı düşünüyorum. Bu yüzden -vcodec copytalimatı kaldırmayı denemek isteyebilirsiniz ve sadece çalışmalıdır. :)


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.