解复用
我正在按如下方式将TS段分解为音频和视频。
ffmpeg -y -i input.ts -vcodec copy -an output_video.ts
ffmpeg -y -i input.ts -acodec copy -vn output_audio.aac
检查输入
start_pts
上的start_time
和input.ts
如下所示。我能够使用ffprobe -show_streams -print_format json input.ts
"start_pts": 8306558438,
"start_time": "92295.093756",
检查输出视频
输出.ts具有一些默认的start_pts
和start_time
值,如下所示。这些也是使用与上述相同的ffprobe
命令获得的。
"start_pts": 126000,
"start_time": "1.400000",
检查输出音频
ffprobe
上相同的output_audio.aac
命令显示输出aac具有无效的codec_tag
和codec_tag_string
,如下所示。 start_pts
中没有start_time
和output_audio.aac
。
"codec_tag_string": "[0][0][0][0]", (should have been [15][0][0][0])
"codec_tag": "0x0000", (should have been 0xf000)
问题
start_pts
,start_time
,codec_tag
的差异吗?注意
在ffprobe
的{{1}}命令中,我发现其他输出与output_audio.aac
不一致。我分享了我认为目前最有价值的东西。如果需要,我可以共享上述所有执行的完整输出。
[EDIT 07/30/2018-08:00 MST]
duration etc.
的日志如下所示。
ffmpeg -y -i input.ts -vcodec copy -an output_video.ts -acodec copy -vn output_audio.aac
答案 0 :(得分:2)
所有差异都是可以预期的。除非另有设置,否则FFmpeg会删除输入时间戳偏移。 MPEG-TS多路复用器还添加了时间戳偏移。
重新混合TS时,您可以保留源时间戳,也可以避免像这样的混合器偏移,
ffmpeg -y -copyts -i input.ts -vcodec copy -an -muxdelay 0 -muxpreload 0 output_video.ts
由于.aac
是原始ADTS流,因此不存在编解码器标记字符串。这是预期的。如果需要标记,请与.m4a
或.mka
或类似容器混用。