我有一个带有多个音轨的mp4视频文件。我想删除其余的曲目,只保留其中一个。我该怎么做?

评论

相关:stackoverflow.com/questions/38161697/…

#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