2016-07-02 43 views
8

Ffmpeg kullanarak video dosyası kapsayıcısından (.vob veya .mkv) sadece bir parça (tümü değil) nasıl kaldırılır?Ffmpeg kullanarak video dosyasından bir parça nasıl kaldırılır?

Biliyorum, videoyu (-c:v copy -an) ve belirli bir ses parçasını iki ayrılmış dosyaya kopyalayabilir ve sonra bunlara katılabilirim.

Ama daha kolay bir yolu var mı? Belirli ses kaydını kapsayıcıdan çıkarabilir miyim? ffmpeg komutu?

cevap

13

Kullanım negative mapping belirli bir akış (lar) dışlamak için.

+0

Wow, negatif haritalama işlevi hakkında bilmiyordum, harika! – v010dya

+0

Çıktı dosyası .vob ('ffmpeg -i" in.vob "-map 0 -map -0: a: 1 -c copy" out.vob "'): çıktı akışı için geçersiz ortam türü verileri olduğunda bir sorunum var # 0_ ve _Bir çıkış dosyası # 0 için başlık yazılmamış (yanlış kodek parametreleri?): Geçersiz argüman_ ama out.vob öğesini out.ts olarak değiştirirsem "ffmpeg -i" in.vob "-map 0 -map - çalışır 0: a: 1 -c copy "out.ts" ' – user25

+0

@ user25 Komple konsol çıktısını komutadan görmem gerek. Bir pastebin sitesi kullanabilir ve bağlantıyı sağlayabilirsiniz. – LordNeckbeard

2

-map ürününü incelemektesiniz.

avconv'u kullanmayı değiştirdim, ancak yaklaşık olarak aynı olmalıdır.

Tek bir video ve iki ses parçasıyla "input.vob" adlı bir dosyanız olduğunu varsayalım; ve video ve son ses ile "output.vob" sahibi olmak istersiniz.

Sen yapacağını:

avconv -i input.vob -map 0:0 -c:v copy -map 0:2 -c:a copy output.vob 

Sen fark olmalıdır:

  1. Ben -map 0:1
  2. ben yapmak gerek yoktu kopya etmedi, ses parçaları var çünkü. Ancak, hiç ses parçası yoksa, böyle bir özelliği kullanmanız gerekebilir.
  3. Bazen akışlar tanımladığım şekilde numaralandırılmaz, örneğin ses videodan önce gelebilir.
  4. Burada altyazı akışları varsa, bunlarla nasıl başa çıkılacağını da anlamanız gerekir.

"Yerinde" dosyalarda çalışamazsınız, başka bir dosyaya kaydetmeniz gerekir.

P.S. Bir dahaki sefere video.stackexchange.com numaralı telefondan soru sormak isteyebilirsiniz. Bu örnek ikinci ses akışı dışında her şeyi eşler

ffmpeg -i input -map 0 -map -0:a:1 -c copy output 

: