【问题标题】:FFmpeg - Extracting video and audio from transport stream file (.ts)FFmpeg - 从传输流文件(.ts)中提取视频和音频
【发布时间】:2012-12-06 05:12:50
【问题描述】:

我希望在传输流文件中提取某个程序的音频和视频 (.ts),方法是指定其 PID 而不会损失质量并在生成的文件中使用相同的编解码器(输出文件是 MPEG)。

这甚至 可能 使用 FFmpeg 吗?如果是这样,我该怎么做?

到目前为止,我已经来到了这个命令:

 ffmpeg -i tsfile.ts -vcodec copy -acodec copy -q:v 1 output.mpg

编辑:请注意,文件 output.mpg 已创建。该文件包含视频,但未附加音频(无声音)。另外,我无法指定要提取的程序 PID。

编辑 2:这是 ffmpeg -i tsfile.ts

的输出
ffmpeg version N-47062-g26c531c Copyright (c) 2000-2012 the FFmpeg developers
built on Nov 25 2012 12:21:26 with gcc 4.7.2 (GCC)
    libavutil      52.  9.100 / 52.  9.100
    libavcodec     54. 77.100 / 54. 77.100
    libavformat    54. 37.100 / 54. 37.100
    libavdevice    54.  3.100 / 54.  3.100
    libavfilter     3. 23.102 /  3. 23.102
    libswscale      2.  1.102 /  2.  1.102
    libswresample   0. 17.101 /  0. 17.101
    libpostproc    52.  2.100 / 52.  2.100
[mpeg2video @ 0201c7a0] mpeg_decode_postinit() failure
Last message repeated 10 times
[mpegts @ 0037b800] PES packet size mismatch
Input #0, mpegts, from 'tsfile.ts':
Duration: 00:01:30.58, start: 56297.848344, bitrate: 18045 kb/s
Program 1
    Stream #0:0[0x31]: Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p, 1920x1080  [SAR 1:1 DAR 16:9], 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
    Stream #0:1[0x34]: Audio: ac3 ([129][0][0][0] / 0x0081), 48000 Hz, 5.1(side), s16, 384      kb/s

这是 .ts 文件中的 tsinfo.exe:

Reading from C:\tsfile.ts
Scanning 10000 TS packets

Packet 1 is PAT
Program list:
    Program 1 -> PID 0020 (32)

Packet 2 is PMT with PID 0020 (32)
  Program 1, version 1, PCR PID 0031 (49)
     Program info (38 bytes): 0e 03 c0 b9 16 10 06 c0 02 71 c0 04 00 0b 02 42 3f 05 04
                              47 41 39 34 86 0d e2 65 6e 67 7e 3f ff 65 6e 67 c1 3f ff
 maximum bitrate (3 bytes): c0 b9 16
 smoothing buffer (6 bytes): c0 02 71 c0 04 00
 system clock (2 bytes): 42 3f
 Registration GA94
 Descriptor tag 86 (134) (13 bytes): e2 65 6e 67 7e 3f ff 65 6e 67 c1 3f ff
  Program streams:
PID 0031 (  49) -> Stream type 02 (  2) H.262/13818-2 video (MPEG-2) or 11172-2 constrained video
PID 0034 (  52) -> Stream type 81 (129) User private
    ES info (6 bytes): 6a 04 41 43 2d 33
    DVB AC-3 (4 bytes): 41 43 2d 33

Found 14 PAT packets and 7 PMT packets in 10000 TS packets

【问题讨论】:

  • ffmpeg 可以选择节目流以及节目内的基本流。使用地图选项和流说明符。看-superuser.com/questions/343716/…
  • 如果一个TS包含多个节目(DVB-T采集的电视节目),如何拆分呢?例如,我有一个包含足球 + 烹饪 + 卡通的 TS 文件。如何将此 TS 文件拆分为 3 个 mpg 文件?

标签: audio video ffmpeg transport-stream


【解决方案1】:

尝试:

ffmpeg -i input.ts -map 0:0 -map 0:1 -acodec copy -vcodec copy output.ts

根据您的 input.ts 程序修改映射值。

【讨论】:

    【解决方案2】:

    尝试:

    `cat *.ts | ffmpeg  -i pipe: -c:a copy -c:v copy output.mp4`
    

    【讨论】:

      【解决方案3】:

      我可以通过提取所需的流并重新混合它来从 ffmpeg 中的 MPTS 获取 SPTS。我的 mpts 有 6 个流,用于三个节目(一个音频,一个视频):

      ffmpeg -i mpt.ts -map 0:0 -map 0:1 -acodec copy -vcodec copy -f mpts program1.ts
      

      【讨论】:

        猜你喜欢
        • 2015-04-27
        • 2020-01-03
        • 1970-01-01
        • 2017-11-07
        • 2012-11-06
        • 1970-01-01
        • 2017-04-23
        • 1970-01-01
        • 2012-07-10
        相关资源
        最近更新 更多