如何获取ffmpeg录制的所有字幕流

如何获取ffmpeg录制的所有字幕流
ffmpeg -i "xxxxxxx" -c:v copy -c:a copy -c:s copy -y -f mpegts test.ts

只提供一个字幕流,我该如何录制它们全部?

Input #0, mpegts, from 'xx':
  Duration: N/A, start: 24264.769756, bitrate: N/A
  Program 111
    Stream #0:0[0x83e]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(top first), 1920x1080 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
    Stream #0:1[0x83f]: Audio: ac3 ([129][0][0][0] / 0x0081), 48000 Hz, 5.1(side), fltp, 384 kb/s
    Stream #0:2[0x841]: Audio: mp3 ([4][0][0][0] / 0x0004), 0 channels
    Stream #0:3[0x840]: Audio: mp3 ([4][0][0][0] / 0x0004), 0 channels
    Stream #0:4[0x842]: Audio: mp3 ([4][0][0][0] / 0x0004), 0 channels
    Stream #0:5[0x853](tai): Subtitle: dvb_subtitle ([6][0][0][0] / 0x0006)
    Stream #0:6[0x854](may): Subtitle: dvb_subtitle ([6][0][0][0] / 0x0006)
    Stream #0:7[0x855](vie): Subtitle: dvb_subtitle ([6][0][0][0] / 0x0006)
    Stream #0:8[0x856](tha): Subtitle: dvb_subtitle ([6][0][0][0] / 0x0006)
    Stream #0:9[0x857](ind): Subtitle: dvb_subtitle ([6][0][0][0] / 0x0006)
    Stream #0:10[0x858](bur): Subtitle: dvb_subtitle ([6][0][0][0] / 0x0006)

答案1

-c(选择编解码器) 和-map(选择流) 选项的工作方式如下:

-c:a -> select best supported audio (transcoded)
-c:a copy -> best supported audio (copied)
-map 0:a -> all audio from 1st input file (transcoded)
-map 1:a:0 -> 1st audio stream from 2nd input file (transcoded)
-map 1:a:1 -c:a copy -> 2nd audio stream from 2nd input file (copied)

查看此链接用于流选择和处理。

要从第一个输入文件复制所有字幕流而不进行转码:

-map 0:s -c:s copy 

您的代码没有问题,只是map缺少选项。

答案2

如果没有任何-map选项,ffmpeg 将仅选择一种受支持类型的流:视频、音频、字幕。

因此,添加地图选项来选择所需的流。

ffmpeg -i "xxxxxxx" -map 0:v:0 -map 0:a:0 -map 0:s -c copy -y -f mpegts test.ts

相关内容