如何使用ffmpeg拼接两个.m4v文件并保留原有字幕
ffmpeg concat拼接视频保留字幕解决方案
原命令执行后字幕丢失是因为ffmpeg默认仅自动选中输入流中的视频、音频轨道,-c copy仅会复制已选中的轨道,字幕轨道未被选中所以会丢失。
方案1:流复制模式(所有输入文件轨道参数一致时使用)
如果所有输入文件的视频、音频、字幕轨道的编码、分辨率、帧率、采样率等参数完全匹配,可直接通过指定选中所有轨道实现字幕保留,命令如下:
ffmpeg -f concat -safe 0 -i list.txt -c copy -map 0? output.m4v
参数说明:
-map 0?:选中拼接后的第0路输入的所有轨道,后缀?表示对应轨道不存在时不会抛出错误
方案2:兼容MP4/M4V容器字幕编码
如果方案1执行后字幕仍然无法正常显示,是因为MP4/M4V容器仅支持特定编码的字幕轨,需主动指定字幕编码为兼容的mov_text格式:
ffmpeg -f concat -safe 0 -i list.txt -c:v copy -c:a copy -c:s mov_text -map 0? output.m4v
替代方案:使用兼容性更好的MKV容器
MKV容器几乎支持所有格式的字幕轨道,无需额外指定字幕编码,命令如下:
ffmpeg -f concat -safe 0 -i list.txt -c copy -map 0? output.mkv
注意事项
使用-c copy流复制拼接的前提是所有输入文件的轨道参数完全一致,若参数不匹配会出现音画不同步、轨道损坏的问题,这种情况下需要移除-c copy相关参数,走重新编码流程完成拼接。
内容的提问来源于stack exchange,提问作者Sequestered1776Vexer
相关产品推荐
相关产品推荐

