如果pid的值重复,是否可以通过ffmpeg的pid指定流?

时间:2019-11-22 12:34:50

标签: audio ffmpeg

我有一个不错的m2ts文件,我想从其中解复用特定的音频流。重要的是,使用PID作为标识符需要该规范。 例示的m2ts文件具有7个音频流,这些音频流被eac3to检测到并显示在下面

eac3to.exe F:\xxx 1)
M2TS, 1 video track, 7 audio tracks, 5 subtitle tracks, 1:40:03
1: Chapters, 34 chapters
2: h265/HEVC, 2160p24 /1.001 (16:9), 10 bits
3: TrueHD/AC3 (Atmos), English, 7.1 channels, 48kHz, dialnorm: -28dB
   (embedded: AC3, 5.1 channels, 640kbps, 48kHz, dialnorm: -27dB)
4: E-AC3, English, 7.1 channels, 1024kbps, 48kHz, dialnorm: -28dB
   (core: AC3, 5.1 channels, 576kbps, 48kHz, dialnorm: -28dB)
5: AC3, English, 5.1 channels, 640kbps, 48kHz, dialnorm: -27dB
6: AC3, English, 2.0 channels, 320kbps, 48kHz, dialnorm: -27dB
7: AC3, English, 2.0 channels, 320kbps, 48kHz, dialnorm: -27dB
8: AC3, Chinese, 2.0 channels, 448kbps, 48kHz
9: AC3, Chinese, 5.1 channels, 384kbps, 48kHz, 300ms
10: Subtitle (PGS), English
11: Subtitle (PGS), Chinese
12: Subtitle (PGS), Chinese
13: Subtitle (PGS), Chinese
14: Subtitle (PGS), Chinese

但是,如果我跑步 ffmpeg.exe -hide_banner -i "F:\xxx\BDMV\STREAM\00055.m2ts",ffmpeg在识别7.1 TrueHD音频流内部的嵌入式5.1 AC3流时,显示了一个附加的音频流,独立:

Input #0, mpegts, from 'F:\xxx\BDMV\STREAM\00055.m2ts':
  Duration: 00:00:48.62, start: 4198.333333, bitrate: 50005 kb/s
  Program 1
    Stream #0:0[0x1011]: Video: hevc (Main 10) (HDMV / 0x564D4448), yuv420p10le(tv, bt2020nc/bt2020/smpte2084), 3840x2160 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 90k tbn, 23.98 tbc
    Stream #0:1[0x1100]: Audio: truehd (AC-3 / 0x332D4341), 48000 Hz, 7.1, s32 (24 bit)
    Stream #0:2[0x1100]: Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, 5.1(side), fltp, 640 kb/s
    Stream #0:3[0x1101]: Audio: eac3 (AC-3 / 0x332D4341), 48000 Hz, 7.1, fltp, 1024 kb/s
    Stream #0:4[0x1102]: Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, 5.1(side), fltp, 640 kb/s
    Stream #0:5[0x1103]: Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, stereo, fltp, 320 kb/s
    Stream #0:6[0x1104]: Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, stereo, fltp, 320 kb/s
    Stream #0:7[0x1105]: Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, stereo, fltp, 448 kb/s
    Stream #0:8[0x1106]: Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, 5.1(side), fltp, 384 kb/s
    Stream #0:9[0x12a0]: Subtitle: hdmv_pgs_subtitle ([144][0][0][0] / 0x0090)
    Stream #0:10[0x12a1]: Subtitle: hdmv_pgs_subtitle ([144][0][0][0] / 0x0090)
    Stream #0:11[0x12a2]: Subtitle: hdmv_pgs_subtitle ([144][0][0][0] / 0x0090)
    Stream #0:12[0x12a3]: Subtitle: hdmv_pgs_subtitle ([144][0][0][0] / 0x0090)
    Stream #0:13[0x12a4]: Subtitle: hdmv_pgs_subtitle ([144][0][0][0] / 0x0090)

可以发现流#0:1 流#0:2 具有相同的PID 0x1100 。并且ffmpeg.exe -hide_banner -i "F:\xxx\BDMV\STREAM\00055.m2ts" -map i:0x1100 -c copy 00055-0x1100.thd将产生错误:

[truehd @ 0000021ae9517600] truehd files have exactly one stream
Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
Stream mapping:
  Stream #0:1 -> #0:0 (copy)
  Stream #0:2 -> #0:1 (copy)
    Last message repeated 1 times

通过对比,它可以不加重复地提供其他pid,例如ffmpeg.exe -hide_banner -i "F:\xxx\BDMV\STREAM\00055.m2ts" -map i:0x1101 -c copy 00055-0x1101.eac3

Input #0, mpegts, from 'F:\xxx\BDMV\STREAM\00055.m2ts':
  Duration: 00:00:48.62, start: 4198.333333, bitrate: 50005 kb/s
  Program 1
    Stream #0:0[0x1011]: Video: hevc (Main 10) (HDMV / 0x564D4448), yuv420p10le(tv, bt2020nc/bt2020/smpte2084), 3840x2160 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 90k tbn, 23.98 tbc
    Stream #0:1[0x1100]: Audio: truehd (AC-3 / 0x332D4341), 48000 Hz, 7.1, s32 (24 bit)
    Stream #0:2[0x1100]: Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, 5.1(side), fltp, 640 kb/s
    Stream #0:3[0x1101]: Audio: eac3 (AC-3 / 0x332D4341), 48000 Hz, 7.1, fltp, 1024 kb/s
    Stream #0:4[0x1102]: Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, 5.1(side), fltp, 640 kb/s
    Stream #0:5[0x1103]: Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, stereo, fltp, 320 kb/s
    Stream #0:6[0x1104]: Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, stereo, fltp, 320 kb/s
    Stream #0:7[0x1105]: Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, stereo, fltp, 448 kb/s
    Stream #0:8[0x1106]: Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, 5.1(side), fltp, 384 kb/s
    Stream #0:9[0x12a0]: Subtitle: hdmv_pgs_subtitle ([144][0][0][0] / 0x0090)
    Stream #0:10[0x12a1]: Subtitle: hdmv_pgs_subtitle ([144][0][0][0] / 0x0090)
    Stream #0:11[0x12a2]: Subtitle: hdmv_pgs_subtitle ([144][0][0][0] / 0x0090)
    Stream #0:12[0x12a3]: Subtitle: hdmv_pgs_subtitle ([144][0][0][0] / 0x0090)
    Stream #0:13[0x12a4]: Subtitle: hdmv_pgs_subtitle ([144][0][0][0] / 0x0090)
Output #0, eac3, to '00055-0x1101.eac3':
  Metadata:
    encoder         : Lavf58.34.101
    Stream #0:0: Audio: eac3 (AC-3 / 0x332D4341), 48000 Hz, 7.1, fltp, 1024 kb/s
Stream mapping:
  Stream #0:3 -> #0:0 (copy)
Press [q] to stop, [?] for help
size=    6076kB time=00:00:48.57 bitrate=1024.7kbits/s speed=92.6x
video:0kB audio:6076kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000000%

在这种情况下,如何通过PID指定流?

0 个答案:

没有答案