it-swarm-ru.tech

Как удалить звуковую дорожку из видео файла mp4?

У меня есть MP4 видео файл с несколькими звуковыми дорожками. Я хотел бы убрать остальные треки и оставить только один. Как мне это сделать?

107
tshepang

Первый забег 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.

122
gelraen

Связанная проблема - удаление все аудио дорожки из файла mp4 можно сделать так:

ffmpeg -i input_file.mp4 -vcodec copy -an output_file.mp4
106
Greg Marks

Определите номера потоков:

$ 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

см .: https://ffmpeg.org/ffmpeg.html#Advanced-options

8
jgr

Вы можете попробовать avidemux , который обрабатывает только один аудиофайл внутри (и, следовательно, заставляет вас выбрать одну конкретную дорожку). Я никогда не пробовал с .mp4, но он работает с другими форматами.

4
wag

Я использовал Avidemux (GUI) несколько раз и ffmpeg (консоль).

В Avidemux вы выбираете "Аудио" -> "Выбрать треки" в главном меню; затем сохраните ваше видео как новый файл.

Интересно, что в некоторых случаях Avidemux выдавал "лучший" вывод, чем ffmpeg.

на всякий случай Avidemux и ffmpeg находятся в стандартном репозитории Fedora Linux. (Я уверен, что они стандартны и в других версиях Linux).

3
Maxim

-vn или -an удалит все видео или аудио дорожки. Поставка -vn -acodec copy удалит видео; -an -vcodec copy удалит все аудио.

-vcodec copy указывает, что ffmpeg должен делать прямое копирование существующей видеодорожки (а не обрабатывать/кодировать ее). Если вы не укажете его, он все равно будет работать, но ffmpeg может перекодировать существующую видеодорожку, и операция будет использовать больше ресурсов процессора и может занять значительно больше времени.

1
lots of crisps

Программа ffmpeg была заменена на avconv. avconv очень похоже на использование ffmpeg, поэтому все команды в этом посте могут выглядеть примерно так:

avconv <old ffpmeg command line options>

Следуйте эта ссылка чтобы установить avconv, если вы используете Ubuntu.

0
SmallChess

Использование 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 (которые у меня не работали).

0
imz -- Ivan Zakharyaschev