У меня есть MP4 видео файл с несколькими звуковыми дорожками. Я хотел бы убрать остальные треки и оставить только один. Как мне это сделать?
video-editing
tshepang
источник
источник
Ответы:
Сначала запустите,
ffmpeg -i file.mp4
чтобы увидеть, какие потоки существуют в вашем файле. Вы должны увидеть что-то вроде этого:Затем запустите,
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 может быть сделано следующим образом:
источник
The encoder 'aac' is experimental but experimental codecs are not enabled, add '-strict -2' if you want to use it.
Но я добавил эти флаги, и это все тот же ...?Определить номера потоков:
Используйте
-map _file_:_stream_
для выбора потоков для обработки и выводасм .: https://ffmpeg.org/ffmpeg.html#Advanced-options
источник
Вы можете попробовать,
avidemux
который обрабатывает только один аудиофайл внутри (и, следовательно, заставляет вас выбрать одну конкретную дорожку). Я никогда не пробовал с .mp4, но он работает с другими форматами.источник
Я использовал Avidemux (GUI) несколько раз и ffmpeg (консоль).
В Avidemux вы выбираете «Аудио» -> «Выбрать треки» в главном меню; затем сохраните ваше видео как новый файл.
Интересно, что в некоторых случаях 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
:Он покидает дорожку 1, но отбрасывает дорожку 0.
Затем я запустил пакетное преобразование многих файлов с помощью команды, подобной этой:
Копирует все, но сбрасывает все, кроме необходимой звуковой дорожки.
Способ запуска avidemux из командной строки был изучен мной по адресу https://www.avidemux.org/admWiki/doku.php?id=tutorial:batch_processing , хотя они не упоминают скрипты Python, только скрипты JS ( который не работал для меня).
источник
Если вы не возражаете против использования графического интерфейса программы, с помощью редактора видео Blender вы можете сделать это и многое другое.
источник
ffmpeg
Программа была замененаavconv
.avconv
имеет очень похожее использованиеffmpeg
, поэтому все команды в этом посте могут быть примерно такими:Перейдите по этой ссылке, чтобы установить,
avconv
если вы находитесь на Ubuntu.источник
FFMPEG может быть полезным решением для вас.
источник