如何用FFmpeg将TS文件的节目编号从1修改为22
解决FFmpeg修改TS文件节目编号并保留所有流的问题
我来帮你搞定这个问题!从你提供的输入文件信息来看,原TS文件里的节目1包含了1个视频流、2个音频流和1个字幕流。你之前用-program选项失败,大概率是因为没正确映射所有流,或者没把所有流关联到新节目上。
正确的FFmpeg命令
直接用这条命令就能把节目编号改成22,同时保留所有流:
ffmpeg -i output_2_without_pgm_num.ts -map 0 -c copy -program program_num=22:st=0:st=1:st=2:st=3 output_with_pgm22.ts
命令参数解释
-i output_2_without_pgm_num.ts:指定你的输入TS文件-map 0:关键参数,告诉FFmpeg要映射输入文件的所有流(如果没加这个,FFmpeg只会自动复制默认的视频和音频流,字幕流会被忽略)-c copy:直接复制所有流的编码格式,不重新编码,这样既快又不会损失画质音质-program program_num=22:st=0:st=1:st=2:st=3:设置新的节目编号为22,然后通过st=N把每个流(st=0是视频,st=1是德语音频,st=2是英语音频,st=3是德语字幕)都关联到这个新节目里
验证结果
执行完命令后,你可以用ffprobe检查输出文件的节目信息:
ffprobe output_with_pgm22.ts
你会看到输出里显示Program 22,并且包含了所有四个流,结构和原文件一致,只是节目编号改成了22。
内容的提问来源于stack exchange,提问作者C.B. Akshay Kumar




