У меня есть файл .ts, но у меня нет исходного файла (видеофайла). Мне нужно сгенерировать файл m3u8 из самого файла .ts без создания других файлов .ts. Я использовал следующую команду.

ffmpeg -i mytsfile.ts -hls_list_size 0 mym3u8.m3u8 -hide_banner

Когда я использовал вышеупомянутую команду, она создала почти 590 файлов TS с именем mym3u8N.ts(где N - число от 1 до 590). Я не хочу файлы TS. Мне нужен только файл m3u8.

1 ответ1

1

Если вы просто хотите сгенерировать файл M3U8 из существующего сегмента:

ffmpeg -i input.ts \
-map 0 -c copy \
-f segment -segment_list out.m3u8 \
-segment_time 60 \
out%03d.ts

Здесь важно, чтобы вы указали значение -segment_time равное или превышающее фактическую длительность ввода, иначе ffmpeg снова разделит входной файл.

Выходной файл M3U8 будет содержать ссылку на новый выходной файл TS:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-ALLOW-CACHE:YES
#EXT-X-TARGETDURATION:61
#EXTINF:60.033333,
out000.ts
#EXT-X-ENDLIST

Вы можете использовать это или удалить файл out000.ts (поскольку он по сути такой же, как входной файл), и изменить имя файла в файле M3U8, так как содержимое медиа-файла будет таким же.

Вы можете сделать такую замену, например, используя perl:

perl -pi -e 's/out000.ts/input.ts'

Я должен добавить, что для простого случая одного файла сегмента, длительность которого вы знаете, вы можете легко сгенерировать файл M3U8 вручную. Затем необходимо вручную указать значения EXT-X-TARGETDURATION и EXTINF: длительность.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .