一、 通过节目号提取
1.1 获取节目号
要获取 TS 文件中的节目信息,可以使用 ffmpeg 命令:
ffmpeg input.ts
运行该命令后,您将看到类似以下的输出:
......
[mpegts @ 0x7c60800] stream 0 : no PTS found at end of file, duration not set
[mpegts @ 0x7c60800] stream 2 : no PTS found at end of file, duration not set
[mpegts @ 0x7c60800] stream 3 : no PTS found at end of file, duration not set
Input #0, mpegts, from 'input.ts':
Duration: 00:01:11.11, start: 1494.371989, bitrate: 19965 kb/s
Program 7
Metadata:
service_name : ETC7
service_provider: DVT
Stream #0:0[0x92]: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p(top first), 720x576 [SAR 12:11 DAR 15:11], 25 fps, 25 tbr, 90k tbn
Stream #0:1[0x93](eng): Audio: mp2 (mp3float) ([4][0][0][0] / 0x0004), 48000 Hz, mono, fltp, 128 kb/s (clean effects)
Program 8
Metadata:
service_name : ETC8
service_provider: DVT
Stream #0:3[0xa2]: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p(top first), 720x576 [SAR 12:11 DAR 15:11], 25 fps, 50 tbr, 90k tbn
Stream #0:2[0xa3]: Audio: mp2 (mp3float) ([3][0][0][0] / 0x0003), 48000 Hz, stereo, fltp, 128 kb/s
可以看到 input.ts 文件中包含两个节目:Program 7 和 Program 8。
也可以直接使用以下命令过滤当前输入的节目
ffmpeg -i input.ts 2>&1 | grep Program
可以直接获取当前存在的节目号:
Program 7
Program 8
以提取节目7的文件为例:
1.2 通过节目号提取节目
ffmpeg -i input.ts -map 0:p:7 -c copy output_program7.ts
可以获得节目7的文件,储存到output_program7.ts中
1.3 参数解析
- -i input.ts: 指定输入文件为 input.ts。
- -map 0:p:7: 这是关键参数,用于 节目映射。它表示从第一个输入文件(索引为 0)中选择 Program(p)号为 7 的所有流。ffmpeg 会自动包含该节目下的所有视频、音频和其他数据流。
- -c copy: 指定流的编码方式为 copy,即 ffmpeg 直接复制原始数据而不重新编码。
- output_program7.ts: 指定输出文件名为 output_program7.ts。
二、通过 stream id 提取
2.1 获取stream id
直接使用ffmpeg命令获取
ffmpeg input.ts
输出结果与之前相同:
Input #0, mpegts, from 'input.ts':
Duration: 00:01:11.11, start: 1494.371989, bitrate: 19965 kb/s
Program 7
Metadata:
service_name : ETC7
service_provider: DVT
Stream #0:0[0x92]: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p(top first), 720x576 [SAR 12:11 DAR 15:11], 25 fps, 25 tbr, 90k tbn
Stream #0:1[0x93](eng): Audio: mp2 (mp3float) ([4][0][0][0] / 0x0004), 48000 Hz, mono, fltp, 128 kb/s (clean effects)
Program 8
Metadata:
service_name : ETC8
service_provider: DVT
Stream #0:3[0xa2]: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p(top first), 720x576 [SAR 12:11 DAR 15:11], 25 fps, 50 tbr, 90k tbn
Stream #0:2[0xa3]: Audio: mp2 (mp3float) ([3][0][0][0] / 0x0003), 48000 Hz, stereo, fltp, 128 kb/s
继续以提取 Program 7 为例。从输出中我们可以看到,Program 7 包含两个流:
- 视频流:Stream #0:0[0x92],pid为0x92(146)
- 音频流:Stream #0:1[0x93],pid为0x93(147)
它们的stream ID 分别是 0:0 和 0:1。
2.2 根据stream号提取
使用以下 ffmpeg 命令根据流 ID 提取 Program 7 的视频和音频流:
ffmpeg -i input.ts -map 0:0 -map 0:1 -c copy output_program7.ts
2.3 参数解析
- -i input.ts: 指定输入文件为 input.ts。
- -map 0:0: 映射 第一个输入文件(索引 0)的第一个流(索引 0),即 Program 7 的视频流。
- -map 0:1: 映射 第一个输入文件(索引 0)的第二个流(索引 1),即 Program 7 的音频流。
- -c copy: 指定流的编码方式为 copy,不进行重新编码。
- output_program7.ts: 指定输出文件名为 output_program7.ts。
浙公网安备 33010602011771号