Yanıtlar:
İ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.mp4
video akışı ve 2. ses akışını kopyalamak için çalıştırın new_file.mp4
.
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
-c copy
Ses, 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
.
İ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
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ı ...?
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
avidemux
Hangisinin 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.
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.)
-vn
veya -an
tüm video veya ses parçalarını kaldıracak. 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ı 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.
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ı).
ffmpeg
Program ile değiştirilmiştir avconv
. avconv
buna ç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
.
FFMPEG sizin için yararlı bir çözüm olabilir.
$ man ffmpeg