Odpowiedzi:
Najpierw uruchom, ffmpeg -i file.mp4
aby 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.mp4
aby skopiować strumień wideo i drugi strumień audio do 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.
: 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
-c copy
mieć identyczne strumienie audio, wideo, ale także napisy: ffmpeg -i input.mp4 -map 0:0 -map 0:2 -c copy output.mp4
.
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
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 ...?
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
Możesz spróbować, avidemux
któ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.
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).
-vn
lub -an
usunie wszystkie ścieżki wideo lub audio. Dostarczenie -vn -acodec copy
usunie wideo; -an -vcodec copy
usunie cały dźwięk.
-vcodec copy
okreś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.
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).
ffmpeg
Program został zastąpiony avconv
. avconv
ma 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ć, avconv
jeśli korzystasz z systemu Ubuntu.
FFMPEG może być dla Ciebie pomocnym rozwiązaniem.
$ man ffmpeg