Відповіді:
Спочатку запустіть, ffmpeg -i file.mp4
щоб переглянути, які потоки існують у вашому файлі. Ви повинні побачити щось подібне:
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
Потім запустіть, ffmpeg -i file.mp4 -map 0:0 -map 0:2 -acodec copy -vcodec copy new_file.mp4
щоб скопіювати відеопотік та другий аудіопотік у 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.
: щоб її виправити, просто змініть порядок аргументів таким чином:ffmpeg -i file.mp4 -map 0:0 -map 0:2 -acodec copy -vcodec copy new_file.mp4
-c copy
щоб мати однакові потоки для аудіо, відео , але і субтитри: ffmpeg -i input.mp4 -map 0:0 -map 0:2 -c copy output.mp4
.
Пов'язана проблема - видалення всіх аудіозаписів з файлу mp4 можна зробити таким чином:
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.
Але я додав ці прапори, і це все одно ...?
Визначте номери потоків:
$ ffmpeg -i in.mp4
...
Stream #0:0: Video: ...
Stream #0:1: Audio: ...
Stream #0:2: Audio: ...
Використовуйте -map _file_:_stream_
для вибору потоків для обробки та виводу
$ ffmpeg -i in.mp4 -map 0:0 -map 0:2 -vcodec copy -acodec copy out.mp4
Ви можете спробувати, avidemux
який обробляє лише один аудіофайл внутрішньо (і тому змушує вас вибрати одну конкретну доріжку). Я ніколи не пробував цього з .mp4, але він працює з іншими форматами.
Я кілька разів використовував Avidemux (GUI) та ffmpeg (консоль).
У Avidemux у головному меню ви вибираєте "Audio" -> "Вибір доріжок"; потім збережіть ваше відео як новий файл.
Цікаво, що в деяких випадках Avidemux давав "кращий" вихід, ніж ffmpeg.
про всяк випадок, Avidemux і ffmpeg знаходяться у стандартному сховищі Fedora Linux. (Я впевнений, що вони є стандартними і для інших ароматів Linux.)
-vn
або -an
видалить усі відео- чи аудіодоріжки. Постачання -vn -acodec copy
видалить відео; -an -vcodec copy
видалить усе аудіо.
-vcodec copy
вказує, що ffmpeg повинна робити пряму копію існуючої відеодоріжки (а також не робити жодної обробки / кодування її). Якщо ви не вказали його, він все одно буде працювати, але ffmpeg може перекодувати існуючу відеодоріжку, і операція використовуватиме більше процесора і може зайняти значно більше часу.
Використання avidemux у командному рядку.
(У графічному інтерфейсі Avidemux, як зазначено в https://unix.stackexchange.com/a/85834/4319 вище, ви просто виберіть / скасуйте вибір аудіодоріжок та збережіть файл. (Все скопійовано у новий AVI.))
Я переглянув, які проекти зберігаються як проекти SpiderMonkey або TinyPy для моїх дій, і виявилось, що в проекті SpiderMonkey (JavaScript) бракує дій для вибору звукової доріжки, які мені потрібні, але проект TinyPy (Python) мав їх.
Я видалив усе непов’язане (десяток непотрібних рядків), і ось що я отримав у своєму some_series.py
:
#PY <- Needed to identify #
#--automatically built--
adm = Avidemux()
adm.audioClearTracks()
adm.audioAddTrack(1)
Він залишає слід 1, але випадає з доріжки 0.
Потім я запустив пакетне перетворення багатьох файлів з такою командою:
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
Він копіює все, але скидає всі, крім потрібної аудіозаписи.
Спосіб запуску avidemux з командного рядка був вивчений мною з https://www.avidemux.org/admWiki/doku.php?id=tutorial:batch_processing , хоча вони не згадують сценарії Python, лише JS ( яка не працювала для мене).
ffmpeg
Програма була замінена avconv
. avconv
має дуже подібне використання ffmpeg
, тому всі команди в цій публікації можуть бути чимось на зразок:
avconv <old ffpmeg command line options>
Перейдіть за цим посиланням, щоб встановити, avconv
якщо ви перебуваєте на Ubuntu.
FFMPEG може бути корисним рішенням для вас.
$ man ffmpeg