使用FFmpeg复制多音频流及截取多音轨.m2ts文件片段的问题
没问题,我来帮你解决FFmpeg复制多音频流以及截取.m2ts片段的问题!
FFmpeg复制多音频流及截取.m2ts片段的解决方案
核心关键:用-map明确指定要保留的音频流
FFmpeg默认只会自动选择一个音频流(通常是输入文件中的第一个音频流),所以要保留多个音频流,必须通过-map参数明确告诉它要包含哪些流。
1. 复制整个文件的所有音频流
如果你想完整复制输入的.m2ts文件,同时保留所有音频流(包括视频、字幕等),可以用这个命令:
ffmpeg -i input.m2ts -c:v copy -c:a copy -map 0 output.m2ts
-map 0:表示复制输入文件(编号为0)的所有流(视频、音频、字幕等)-c:v copy和-c:a copy:直接复制视频和音频流,不进行重新编码,速度快且无质量损失
如果只想保留视频和所有音频流(忽略字幕),可以调整-map参数:
ffmpeg -i input.m2ts -c:v copy -c:a copy -map 0:v -map 0:a output.m2ts
2. 截取.m2ts片段并保留多音频流
要截取片段同时保留所有音频流,只需在基础复制命令上加上时间参数(-ss起始时间、-t时长或-to结束时间):
示例1:从第10秒开始,截取30秒的片段
ffmpeg -ss 00:00:10 -i input.m2ts -t 00:00:30 -c:v copy -c:a copy -map 0:v -map 0:a output_clip.m2ts
示例2:从第10秒截取到第40秒(总时长30秒)
ffmpeg -ss 00:00:10 -to 00:00:40 -c:v copy -c:a copy -map 0:v -map 0:a output_clip.m2ts
注意:处理.m2ts的额外优化
有些.m2ts文件有特殊的时间戳结构,截取后可能出现播放异常,这时可以加上-copyts参数保留原始时间戳:
ffmpeg -ss 10 -i input.m2ts -t 30 -c copy -map 0 -copyts output_clip.m2ts
3. 复制指定的几个音频流
如果你不需要所有音频流,只想保留特定的几个(比如第1和第3个音频流,FFmpeg的流索引从0开始),可以这样写:
ffmpeg -i input.m2ts -c:v copy -c:a copy -map 0:v -map 0:a:0 -map 0:a:2 output.m2ts
-map 0:a:0:选择输入文件的第1个音频流(索引0)-map 0:a:2:选择输入文件的第3个音频流(索引2)
为什么你之前只能复制单个音频流?
因为FFmpeg的默认行为是自动选择一个音频流(优先级通常是第一个),如果不手动用-map指定,它就只会保留那一个。只要加上-map 0:a(所有音频流)或者指定具体的音频流索引,就能实现多音频流的复制啦!
内容的提问来源于stack exchange,提问作者Edison von Myosotis
相关产品推荐
相关产品推荐

