$ 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 в фильм? Это не существует в начале записи.
Используйте 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, или чуть более чем 100 миллионов. DTS
средство, Декодирующее Метку времени (я верю на ffmpeg учебное руководство), и, находится в секундах. Новый поток в 40 471,3 секунды, по сравнению с DTS приблизительно 40 328,6 секунд в начале видео, таким образом, новый поток составляет приблизительно 147,7 секунд в.
Так, Вы хотите искать по крайней мере 101 миллион байтов и 150 миллионов микросекунд во входное видео. Вставьте эти опции перед -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
[Примечание: новая команда не протестировала, так как у меня нет Вашего входного файла.]