$ ffmpeg -i fa1.m2t -ss 0:02:22 -to 01:34:17 -map 0:1 -map 0:2 -map 0:6? -c:v libx265 -crf 28 -preset ultrafast -c:a aac -b:a 128k -c:s copy fa1.mkv
这些流包括:
Input #0, mpegts, from 'fa1.m2t':
Duration: 01:43:54.32, start: 40328.578578, bitrate: 5611 kb/s
Program 25
Stream #0:0[0x33](fin): Subtitle: dvb_teletext ([6][0][0][0] / 0x0006)
Stream #0:1[0x13a]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(tv, bt709, top first), 1920x1080 [SAR 1:1 DAR 16:9], Closed Captions, 25 fps, 25 tbr, 90k tbn, 50 tbc
Stream #0:2[0x366](swe): Audio: ac3 ([6][0][0][0] / 0x0006), 48000 Hz, stereo, fltp, 448 kb/s
Stream #0:3[0x369](dut): Audio: ac3 ([6][0][0][0] / 0x0006), 48000 Hz, stereo, fltp, 192 kb/s (visual impaired)
Stream #0:4[0xc38](swe): Subtitle: dvb_subtitle ([6][0][0][0] / 0x0006)
Stream #0:5[0xc4f](swe): Subtitle: dvb_subtitle ([6][0][0][0] / 0x0006) (hearing impaired)
File 'fa1.mkv' already exists. Overwrite ? [y/N] y
但我想要的字幕流是#0:6,它开始得晚一些......
Output #0, matroska, to 'fa1.mkv':
Metadata:
encoder : Lavf57.83.100
Stream #0:0: Video: hevc (libx265), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 25 fps, 1k tbn, 25 tbc
Metadata:
encoder : Lavc57.107.100 libx265
Stream #0:1(swe): Audio: aac (LC) ([255][0][0][0] / 0x00FF), 48000 Hz, stereo, fltp, 128 kb/s
Metadata:
encoder : Lavc57.107.100 aac
[mpegts @ 0x561dd54e9ae0] New subtitle stream 0:6 at pos:100252692 and DTS:40471.3s
frame= 638 fps= 28 q=-0.0 Lsize= 3587kB time=00:00:25.40 bitrate=1156.9kbits/s speed=1.11x
那么,我怎样才能将此流 #0:6 包含到电影中?它在录制开始时并不存在。
答案1
使用ffmpeg-probesize
强制选择ffmpeg在输入文件中搜索足够的字节,并选择-analyzeduration
强制其搜索足够的秒数。
这ffmpeg 文档,19格式选项解释选项。每个选项都采用整数参数,后缀如M
表示百万,G
表示十亿。 参数 指定要-probesize
搜索多少字节(默认值:5 百万)。 参数-analyzeduration
指定要搜索多少微秒(默认值:5 百万微秒,或 5 秒)。在这两种情况下,它们都从输入文件的开头开始测量。当这两个参数中较早的一个到期时,搜索结束。将这些选项放在-i
命名输入文件的参数之前。
您的示例显示了有关新流开始的消息:
New subtitle stream 0:6 at pos:100252692 and DTS:40471.3s
pos
是字节数。新流为 100,252,692,即刚好超过 1 亿。DTS
表示解码时间戳(我相信,根据ffmpeg教程),单位为秒。新流为 40,471.3 秒,而视频开始时的 DTS 约为 40,328.6 秒,因此新流约为 147.7 秒。
因此,您需要在输入视频中搜索至少 1.01 亿字节和 1.5 亿微秒。在 之前插入这些选项-i fa1.m2t
,得到:
$ ffmpeg -probesize 101M -analyzeduration 150M -i fa1.m2t -ss 0:02:22 -to 01:34:17 -map 0:1 -map 0:2 -map 0:6? -c:v libx265 -crf 28 -preset ultrafast -c:a aac -b:a 128k -c:s copy fa1.mkv
[注意:新命令未经测试,因为我没有您的输入文件。]