it-swarm-tr.com

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

Birden fazla ses parçası olan bir mp4 video dosyam var. Parçaların geri kalanını çıkarmak ve sadece bir tane tutmak istiyorum. Bunu nasıl yaparım?

107
tshepang

İlk çalıştırma ffmpeg -i file.mp4 dosyanızda hangi akışların olduğunu görmek için. Bunun gibi 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

O zaman koş ffmpeg -i file.mp4 -map 0:0 -map 0:2 -acodec copy -vcodec copy new_file.mp4 video akışını ve 2. ses akışını new_file.mp4.

122
gelraen

İlgili sorun — kaldırılıyor herşey bir mp4 dosyasından ses parçaları şu şekilde yapılabilir:

ffmpeg -i input_file.mp4 -vcodec copy -an output_file.mp4
106
Greg Marks

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

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

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

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

bkz .: https://ffmpeg.org/ffmpeg.html#Advanced-options

8
jgr

Dahili olarak yalnızca bir ses dosyasını işleyen avidemux öğesini deneyebilirsiniz (ve bu nedenle sizi belirli bir parçayı seçmeye zorlar). Ben asla .mp4 ile denedim ama diğer formatlarla çalışır.

4
wag

Avidemux (GUI) birkaç kez ve ffmpeg (konsol) kullandım.

Avidemux'da ana menüde "Ses" -> "Parça seç" i seçersiniz; ardından videoyu yeni bir dosya olarak kaydedin.

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

her ihtimale karşı Avidemux ve ffmpeg standart Fedora Linux deposundadır. (Eminim diğer Linux lezzetlerinde de standarttır.)

3
Maxim

-vn veya -an tüm video veya ses parçalarını silecektir. Tedarik -vn -acodec copy videoyu kaldıracak; -an -vcodec copy tüm sesleri kaldıracak.

-vcodec copy, ffmpeg'in mevcut video parçasını düz bir şekilde kopyalaması (ve herhangi bir işlem/kodlaması yapmaması) belirtir. Belirtmezseniz, yine de çalışır, ancak ffmpeg mevcut video parçasını yeniden kodlayabilir ve işlem daha fazla CPU kullanır ve çok daha uzun sürebilir.

1
lots of crisps

ffmpeg programının yerine avconv getirildi. avconv, ffmpeg ile çok benzer bir kullanıma sahiptir, bu nedenle bu yayındaki tüm komutlar aşağıdaki gibi olabilir:

avconv <old ffpmeg command line options>

Ubuntu'daysanız avconv kurmak için bu bağlantı öğesini takip edin.

0
SmallChess

Komut satırında avidemux kullanma.

(Yukarıdaki Avidemux GUI'de https://unix.stackexchange.com/a/85834/4319 bölümünde belirtildiği gibi, ses parçalarını seçer/seçimini kaldırır ve dosyayı kaydedersiniz. (Her şey kopyalanır yeni AVI'ya.))

Eylemlerim için ne tür projelerin SpiderMonkey veya TinyPy projetcs olarak kaydedildiğine baktım ve SpiderMonkey (JavaScript) projesinde ihtiyacım olan ses parçası seçim eylemlerinden yoksun olduğu ortaya çıktı, ancak TinyPy (Python) projesi onlar.

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

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

adm = Avidemux()

adm.audioClearTracks()
adm.audioAddTrack(1)

Parça 1'den ayrılır, ancak parça 0'ı düşürür.

Sonra böyle bir komutla birçok dosyanın toplu dönüştürme koştu:

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ı hariç 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 öğrenilmiş olsa da, = Python betikler, sadece JS olanlar (benim için çalışmadı).