#1 楼
首先运行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
。 评论
在Windows上,此命令给出错误选项映射(设置输入流映射)无法应用于输入文件file.mp4 new_file.mp4的信息-您正在尝试将输入选项应用于输出文件,反之亦然。将此选项移到它所属的文件之前。:要对其进行修复,只需更改参数的顺序即可:ffmpeg -i file.mp4 -map 0:0 -map 0:2 -acodec copy -vcodec copy new_file.mp4
– MrLore
2013年9月29日上午11:47
与OS X上的@MrLore相同的错误。
–奥斯卡·珀森(Oskar Persson)
2014年7月25日在13:22
在Ubuntu上也一样!
– Tommaso
2014年8月25日在7:32
也适用于MKV格式
–user3405291
17年4月1日在8:10
您可以使用更通用的选项-c复制来具有相同的音频,视频流和字幕流:ffmpeg -i input.mp4 -map 0:0 -map 0:2 -c复制output.mp4。
–终极
17年9月9日在8:01
#2 楼
相关问题-这样就可以从mp4文件中删除所有音轨:ffmpeg -i input_file.mp4 -vcodec copy -an output_file.mp4
评论
这给了我错误编码器'aac'是实验性的,但实验性编解码器未启用,如果要使用它,请添加'-strict -2'。但是我添加了这些标志,并且还是一样...?
–poshaughnessy
17年4月24日在10:34
另请参阅:superuser.com/questions/268985/…
– Ciro Santilli郝海东冠状病六四事件法轮功
19年9月8日在4:16
关于poshaughnessy的评论:这里似乎有一些信息:stackoverflow.com/questions/32931685/…讨论表明ffmpeg的最新版本没有遇到“ aac实验”问题。通常,如果您声明所使用软件的版本以及给出错误的命令的确切语法(在添加标志之后),这将有助于诊断问题(请参见freeseek的答案所在)。 )。在这种特定情况下,来自输入文件的视频信息也可能会有所帮助。
–格雷格马克
19-09-10 15:50
#3 楼
标识流编号:$ 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
#4 楼
您可以尝试在内部仅处理一个音频文件的avidemux
(因此会强制您选择一个特定的轨道)。我从来没有尝试过使用.mp4,但是它可以与其他格式一起使用。评论
效果不是很好。也许这是一个错误,但是尽管它确实可以完成工作(删除其余的音轨),但是音频却重新受到了干扰。
– tshepang
2011年1月25日在20:32
#5 楼
我多次使用Avidemux(GUI)和ffmpeg(控制台)。在Avidemux中,在主菜单中选择“音频”->“选择曲目”;然后将视频另存为新文件。
有趣的是,在某些情况下,Avidemux的输出要比ffmpeg更好。
以防万一,Avidemux和ffmpeg位于标准的Fedora Linux存储库。 (我肯定它们在其他Linux版本中也是标准的。)
#6 楼
-vn
或-an
将删除所有视频或音频轨道。提供-vn -acodec copy
将删除视频; -an -vcodec copy
将删除所有音频。-vcodec copy
指定ffmpeg应该直接复制现有的视频轨道(而不对其进行任何处理/编码)。如果您未指定它,则它仍然可以工作,但是ffmpeg可能会重新编码现有的视频轨道,并且该操作将使用更多的CPU,并且可能需要更长的时间。#7 楼
在命令行中使用avidemux。(如上面https://unix.stackexchange.com/a/85834/4319中所述,在Avidemux GUI中,您只需选择/取消选择音轨,然后保存文件(一切都复制到新的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=tutori中学到的al:batch_processing,尽管它们没有提及Python脚本,但仅提及JS脚本(对我而言不起作用)。
#8 楼
Subler是在macOS上通过GUI / app进行操作的另一种简便方法,即Subler
,也可在HomeBrew上使用:
brew cask info subler
brew cask install subler
#9 楼
如果您不介意该程序是GUI,则可以使用Blender的视频编辑器执行此操作,甚至更多。#10 楼
ffmpeg
程序已由avconv
取代。 avconv
的用法与ffmpeg
非常相似,因此本文中的所有命令都可以类似:avconv <old ffpmeg command line options>
如果您在Ubuntu上,请遵循此链接安装
avconv
。 #11 楼
FFMPEG对您可能是一个有用的解决方案。$ man ffmpeg
评论
我看了一下,而且很密集。我搜索了“音频”和“音轨”,但似乎没有发现。
– tshepang
2011年1月25日上午8:01
@Tshepang,“轨迹”是模棱两可的,这可能就是FFmpeg偏爱更精确的术语的原因。 FFmpeg认为音频进入“流”,每个流包含一个或多个“通道”。 AFAICT,每个通道都是单声道,其流描述了默认情况下应将其发送(平移)到哪个输出。例如。立体声流包含两个通道,默认情况下一个发送到声卡的左输出,另一个默认发送到声卡的右输出。
–user6860
17年8月2日,11:50
评论
相关:stackoverflow.com/questions/38161697/…