Если существует a NUL
изобразите где угодно в файле, grep рассмотрит это как двоичный файл.
Там мог бы обходное решение как это cat file | tr -d '\000' | yourgrep
устранить весь пустой указатель сначала и затем перерыть файл.
Первый показ 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
скопировать видеопоток и 2-й аудиопоток к new_file.mp4
.
Вы могли попробовать avidemux
который обрабатывает только один звуковой файл внутренне (и поэтому вынуждает Вас выбрать одну определенную дорожку). Я никогда не пробовал его .mp4, но это работает с другими форматами.
FFMPEG мог бы быть полезным решением для Вас.
$ man ffmpeg
Связанная проблема — удаляющий все аудиотреки из 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.
Но я добавил те флаги, и это - все еще то же...?
– poshaughnessy
24.04.2017, 13:34
Я использовал Avidemux (GUI) несколько раз и ffmpeg (консоль).
В Avidemux Вы выбираете "Audio"-> "Select tracks" в главном меню; затем сохраните Вас видео как новый файл.
Интересно достаточно в некоторых случаях Avidemux произвел "лучше" произведенный, чем ffmpeg.
на всякий случай Avidemux и ffmpeg находятся в стандартном Fedora репозиторий Linux. (Я уверен, что они являются стандартными в других разновидностях Linux, также.)
Определите номера потоков:
$ ffmpeg -i in.mp4
...
Stream #0:0: Video: ...
Stream #0:1: Audio: ...
Stream #0:2: Audio: ...
Используйте -карту _file_:_stream_
, чтобы выбрать, какие потоки обрабатывать и выводить
$ ffmpeg -i in.mp4 -map 0:0 -map 0:2 -vcodec copy -acodec copy out.mp4
-vn
или -an
удалит все видео- или аудиодорожки. Поставляя -vn -acodec copy
удалит видео; -an -vcodec copy
удалит все аудио.
-vcodec copy
указывает, что ffmpeg должен сделать прямую копию существующего видео трека (и не производить его обработку/кодирование). Если вы не укажете, то это все равно будет работать, но ffmpeg может перекодировать существующую видео дорожку, и операция будет использовать больше процессора и может занять значительно больше времени.
Если вы не против, если вы не возражаете в программе GUI, с Blender Видеоредактор, вы можете сделать это и гораздо больше.
Использование 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.
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
– MrLore 29.09.2013, 14:47-c copy
иметь идентичные потоки для аудио, видео, но также и подзаголовков:ffmpeg -i input.mp4 -map 0:0 -map 0:2 -c copy output.mp4
. – Futal 09.09.2017, 11:01