Odpowiedzi:
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.
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 copymieć 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ć, 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.
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).
-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.
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).
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.
FFMPEG może być dla Ciebie pomocnym rozwiązaniem.
$ man ffmpeg