Bir mp4 video dosyasından ses parçası nasıl kaldırılır?


Yanıtlar:


110

İlk ffmpeg -i file.mp4önce dosyanızda hangi akışların bulunduğunu görmek için çalıştırın . Böyle bir şey görmelisin:

Stream #0.0: Video: mpeg4, yuv420p, 720x304 [PAR 1:1 DAR 45:19], 23.98 tbr, 23.98 tbn, 23.98 tbc
Stream #0.1: Audio: ac3, 48000 Hz, 5.1, s16, 384 kb/s
Stream #0.2: Audio: ac3, 48000 Hz, 5.1, s16, 384 kb/s

Sonra ffmpeg -i file.mp4 -map 0:0 -map 0:2 -acodec copy -vcodec copy new_file.mp4video akışı ve 2. ses akışını kopyalamak için çalıştırın new_file.mp4.


3
Windows'ta bu komut şu hatayı verdi Option map (set input stream mapping) cannot be applied to input file file.mp4 new_file.mp4 -- you are trying to apply an input option to an output file or vice versa. Move this option before the file it belongs to.: düzeltmek için argümanların sırasını değiştirerek basitçe:ffmpeg -i file.mp4 -map 0:0 -map 0:2 -acodec copy -vcodec copy new_file.mp4
MrLore

OS X’deki @MrLore ile aynı hata
Oskar Persson

1
Ubuntu'da aynı!
Tommaso

MKV formatı için de çalışıyor
user3405291

1
-c copySes, video ve aynı zamanda altyazılar için aynı akışa sahip olmak için daha genel olan seçeneği kullanabilirsiniz ffmpeg -i input.mp4 -map 0:0 -map 0:2 -c copy output.mp4.
Futal

97

İlgili sorun — tüm ses parçalarının bir mp4 dosyasından çıkarılması bu şekilde yapılabilir:

ffmpeg -i input_file.mp4 -vcodec copy -an output_file.mp4

1
Bu bana hata veriyor The encoder 'aac' is experimental but experimental codecs are not enabled, add '-strict -2' if you want to use it.Ama bu bayrakları ekledim ve hala aynı ...?
poshaughnessy


Poshaughnessy'nin yorumu: burada bazı bilgiler var gibi görünüyor: stackoverflow.com/questions/32931685/… Tartışma, ffmpeg'in son sürümlerinin "aac deneysel" sorunu yaşamadığını gösteriyor. Genel bir kural olarak, kullandığınız yazılımın sürümünü ve komutun tam sözdizimini (bayrakları ekledikten sonra) hatayı (cf. freeseek'in cevap yeri. ). Bu özel durumda, giriş dosyasındaki video bilgileri de yararlı olabilir.
Greg Marks,

8

Akış numaralarını tanımlayın:

$ ffmpeg -i in.mp4
   ...
   Stream #0:0: Video: ...
   Stream #0:1: Audio: ...
   Stream #0:2: Audio: ...

-map _file_:_stream_Hangi akışların işleneceğini ve çıktı alınacağını seçmek için kullanın

$ ffmpeg -i in.mp4 -map 0:0 -map 0:2 -vcodec copy -acodec copy out.mp4

bakınız: https://ffmpeg.org/ffmpeg.html#Advanced-options


4

avidemuxHangisinin yalnızca bir ses dosyasını dahili olarak işleyebileceğini deneyebilirsiniz (bu nedenle sizi belirli bir parça seçmeye zorlar). .Mp4 ile hiç denemedim ama diğer biçimlerde de çalışıyor.


Çok iyi çalışmıyor. Belki de bir hatadır, ancak işi yapmasına rağmen ses geri dönmeye başlar (ses parçalarının kalanını kaldırın).
tshepang

3

Ben kullanılan Avidemux'u (GUI) birkaç kez ve ffmpeg (konsol).

Avidemux'da, ana menüden "Ses" -> "Parça seç" i seçersiniz; sonra videonuzu yeni bir dosya olarak kaydedin.

İlginçtir ki, bazı durumlarda Avidemux ffmpeg'den "daha iyi" çıktı üretti.

tam da Avidemux ve ffmpeg standart Fedora Linux deposundalar. (Diğer Linux lezzetlerinde de standart olduklarından eminim.)


1

-vnveya -antüm video veya ses parçalarını kaldıracak. Tedarik -vn -acodec copy, videoyu kaldıracak; -an -vcodec copytüm sesleri kaldıracak.

-vcodec copyffmpeg'in mevcut video parçasını düz bir şekilde kopyalaması gerektiğini (ve bunun hiçbir işlem / kodlamasını yapmamasını) belirtir. Bunu belirtmezseniz, o zaman çalışmaya devam eder, ancak ffmpeg varolan video parçasını yeniden kodlayabilir ve işlem daha fazla CPU kullanır ve çok daha uzun sürebilir.


0

Komut satırında avidemux kullanımı.

(Avidemux GUI'de, yukarıda https://unix.stackexchange.com/a/85834/4319 adresinde açıklandığı gibi, ses parçalarını seçmeniz / seçmeniz ve dosyayı kaydetmeniz yeterlidir. (Her şey yeni AVI'ye kopyalanır.))

Eylemlerim için ne tür projelerin SpiderMonkey veya TinyPy projeksiyonları olarak kaydedildiğine baktım ve SpiderMonkey (JavaScript) projesinin ihtiyaç duyduğum ses kaydı seçim eylemlerinden yoksun olduğu, ancak TinyPy (Python) projesinin sahip olmadığı ortaya çıktı. onlar.

İlgisiz olan her şeyi kaldırdım (bir düzine gereksiz hat) ve işte bu da some_series.py:

#PY  <- Needed to identify #
#--automatically built--

adm = Avidemux()

adm.audioClearTracks()
adm.audioAddTrack(1)

İz 1'den ayrılır, fakat iz 0'dan düşer.

Sonra bunun gibi bir komutla birçok dosyanın toplu dönüştürmesini yaptım:

for f in *.avi; do avidemux3_cli --nogui --load "$f" --run ../some_series.py --save ../some_series/"${f%%.rus.eng.avi}".eng.avi --quit; done

Her şeyi kopyalar, ancak gerekli ses parçasından başka hepsini bırakır.

Avidemux'u komut satırından çalıştırma yolu, benim tarafımdan https://www.avidemux.org/admWiki/doku.php?id=tutorial:batch_processing adresinden öğrenildi , ancak Python komut dosyalarından bahsetmese de, sadece JS olanlar ( bu benim için işe yaramadı).


-1

Programın GUI olmasına aldırış etmiyorsanız, Blender'ın video editörü ile bunu ve çok daha fazlasını yapabilirsiniz.


-2

ffmpegProgram ile değiştirilmiştir avconv. avconvbuna çok benzer bir kullanımı vardır ffmpeg, bu nedenle bu yazıdaki tüm komutlar şöyle olabilir:

avconv <old ffpmeg command line options>

Ubuntu'daysanız yüklemek için bu bağlantıyı takip edin avconv.


-3

FFMPEG sizin için yararlı bir çözüm olabilir.

$ man ffmpeg

Kısa bir baktım ve oldukça yoğundu. "Ses" ve "ses parçası" kelimelerini aradım ve hiçbir şey bariz görünmedi.
tshepang

@Tshepang, "track" belirsiz, bu yüzden FFmpeg daha kesin bir terminoloji tercih ediyor. FFmpeg, sesi her biri bir veya daha fazla "kanal" içeren "akış" olarak kabul eder. AFAICT, her kanal mono olup, varsayılan olarak hangi çıkışlara gönderileceğini (panlandıracağını) açıklayan akışla birliktedir. Örneğin, bir stereo akışı, biri varsayılan olarak ses kartının sol çıkışına, diğeri varsayılan olarak ses kartının sağ çıkışına gönderilen iki kanaldan oluşur.
sampablokuper
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.