Jak usunąć ścieżkę audio z pliku wideo MP4?

94

Mam plik wideo MP4 z wieloma ścieżkami audio. Chciałbym usunąć resztę utworów i zatrzymać tylko jeden. Jak mam to zrobic?

tshepang
źródło
powiązane: stackoverflow.com/questions/38161697/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Odpowiedzi:

110

Najpierw uruchom, ffmpeg -i file.mp4aby zobaczyć, które strumienie istnieją w twoim pliku. Powinieneś zobaczyć coś takiego:

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

Następnie uruchom, ffmpeg -i file.mp4 -map 0:0 -map 0:2 -acodec copy -vcodec copy new_file.mp4aby skopiować strumień wideo i drugi strumień audio do new_file.mp4.

gelraen
źródło
3
W systemie Windows to polecenie dało błąd 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.: aby to naprawić, po prostu zmień odpowiednio kolejność argumentów:ffmpeg -i file.mp4 -map 0:0 -map 0:2 -acodec copy -vcodec copy new_file.mp4
MrLore,
Ten sam błąd, co @MrLore w systemie OS X.
Oskar Persson
1
Tak samo jest w Ubuntu!
Tommaso,
Działa również w formacie MKV
użytkownik3405291
1
Można skorzystać z opcji bardziej ogólny -c copymieć identyczne strumienie audio, wideo, ale także napisy: ffmpeg -i input.mp4 -map 0:0 -map 0:2 -c copy output.mp4.
Futal
96

Powiązany problem - usunięcie wszystkich ścieżek audio z pliku mp4 można wykonać w ten sposób:

ffmpeg -i input_file.mp4 -vcodec copy -an output_file.mp4
Greg Marks
źródło
1
To daje mi błąd. The encoder 'aac' is experimental but experimental codecs are not enabled, add '-strict -2' if you want to use it.Ale dodałem te flagi i nadal są takie same ...?
poshaughnessy 24.04.17
Zobacz także: superuser.com/questions/268985/...
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
Komentarz do poshaughnessy: wydaje się, że jest tu trochę informacji: stackoverflow.com/questions/32931685/ ... Dyskusja sugeruje, że najnowsze wersje ffmpeg nie mają problemu z „eksperymentalnym aac”. Zasadniczo pomaga zdiagnozować problem, podając wersję używanego oprogramowania i dokładną składnię polecenia (po dodaniu flag), które dało błąd (por. Odpowiedź freeseek, loc. Cit. ). W tym konkretnym przypadku pomocne mogą być również informacje wideo z pliku wejściowego.
Greg Marks
8

Zidentyfikuj numery strumieni:

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

Użyj, -map _file_:_stream_aby wybrać strumienie do przetworzenia i wyjścia

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

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

jgr
źródło
4

Możesz spróbować, avidemuxktóry obsługuje tylko jeden plik audio wewnętrznie (i dlatego zmusza cię do wybrania jednej konkretnej ścieżki). Nigdy nie próbowałem tego z .mp4, ale działa z innymi formatami.

machać
źródło
Nie działa tak dobrze. Być może jest to błąd, ale dźwięk wraca zniekształcony, choć wykonuje to zadanie (usuwa resztę ścieżek audio).
tshepang
3

Użyłem Avidemux (GUI) kilka razy i ffmpeg (konsola).

W Avidemux wybierasz „Audio” -> „Wybierz ścieżki” w menu głównym; następnie zapisz wideo jako nowy plik.

Co ciekawe, w niektórych przypadkach Avidemux produkował „lepszą” wydajność niż ffmpeg.

na wszelki wypadek Avidemux i ffmpeg znajdują się w standardowym repozytorium Linux Fedory. (Jestem pewien, że są one również standardem w innych wersjach Linuksa).

Maksyma
źródło
1

-vnlub -anusunie wszystkie ścieżki wideo lub audio. Dostarczenie -vn -acodec copyusunie wideo; -an -vcodec copyusunie cały dźwięk.

-vcodec copyokreśla, że ​​ffmpeg powinien wykonać prostą kopię istniejącej ścieżki wideo (i nie przetwarzać jej / kodować). Jeśli go nie określisz, nadal będzie działać, ale ffmpeg może ponownie zakodować istniejącą ścieżkę wideo, a operacja zużyje więcej procesora i może potrwać znacznie dłużej.

dużo chipsów
źródło
0

Korzystanie z avidemux w wierszu poleceń.

(W Avidemux GUI, jak opisano w https://unix.stackexchange.com/a/85834/4319 powyżej, po prostu zaznacz / odznacz ścieżki audio i zapisz plik. (Wszystko jest kopiowane do nowego AVI.))

Sprawdziłem, jakie projekty są zapisywane jako projekcje SpiderMonkey lub TinyPy dla moich działań, i okazało się, że projekt SpiderMonkey (JavaScript) nie ma akcji wyboru ścieżki audio, których potrzebowałem, ale projekt TinyPy (Python) miał im.

Usunąłem wszystko, co nie było ze sobą powiązane (kilkanaście niepotrzebnych linii), i oto, co mam w swoim some_series.py:

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

adm = Avidemux()

adm.audioClearTracks()
adm.audioAddTrack(1)

Opuszcza ścieżkę 1, ale upuszcza ścieżkę 0.

Następnie uruchomiłem konwersję wsadową wielu plików za pomocą polecenia takiego jak ten:

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

Kopiuje wszystko, ale upuszcza wszystko oprócz potrzebnej ścieżki audio.

Sposób uruchamiania avidemux z wiersza poleceń nauczyłem się od https://www.avidemux.org/admWiki/doku.php?id=tutorial:batch_processing , chociaż nie wspominają o skryptach Python, tylko JS ( co nie działało dla mnie).

imz - Ivan Zakharyaschev
źródło
-1

Jeśli nie masz nic przeciwko temu, że program jest GUI, dzięki edytorowi wideo Blendera możesz to zrobić i wiele więcej.

YoMismo
źródło
-2

ffmpegProgram został zastąpiony avconv. avconvma bardzo podobne użycie do ffmpeg, dlatego wszystkie polecenia w tym poście mogą wyglądać następująco:

avconv <old ffpmeg command line options>

Kliknij ten link, aby zainstalować, avconvjeśli korzystasz z systemu Ubuntu.

SmallChess
źródło
-3

FFMPEG może być dla Ciebie pomocnym rozwiązaniem.

$ man ffmpeg
koolhead17
źródło
Spojrzałem krótko i jest dość gęsty. Szukałem „audio” i „ścieżki audio” i nic nie wydawało się oczywiste.
tshepang 25.01.11
@ Tshepang, „ścieżka” jest dwuznaczna i prawdopodobnie dlatego FFmpeg preferuje bardziej precyzyjną terminologię. FFmpeg uważa, że ​​dźwięk wchodzi w „strumienie”, z których każdy zawiera jeden lub więcej „kanałów”. AFAICT, każdy kanał jest monofoniczny, ze strumieniem opisującym, do którego wyjścia należy wysłać (przesuwać) domyślnie. Np. Strumień stereo składa się z dwóch kanałów, z których jeden jest domyślnie wysyłany do lewego wyjścia karty dźwiękowej, a drugi do domyślnego wyjścia prawego karty dźwiękowej.
sampablokuper