Answers:
首先运行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。
(在Avidemux GUI中,如上面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
它会复制所有内容,但会删除所有需要的音轨。
我从https://www.avidemux.org/admWiki/doku.php?id=tutorial:batch_processing中学到了从命令行运行avidemux的方法,尽管它们没有提到Python脚本,只有JS脚本(这对我不起作用)。
FFMPEG对您可能是一个有用的解决方案。
$ man ffmpeg