Я могу воспроизвести все элементы в списке воспроизведения, используя

mplayer -playlist file.m3u

но когда я сбрасываю поток с помощью

mplayer -dumpfile file.ts -dumpstream -playlist file.m3u

file.ts будет содержать только первую запись в списке воспроизведения M3U. Как я могу сказать, mplayer чтобы сбросить все?

1 ответ1

1

Файл m3u или m3u8 - это просто список ссылок (по одной на строку) с комментариями. Я использовал следующую маленькую программу на Python для загрузки всех частей плейлиста один за другим:

#!/usr/bin/env python3

import subprocess
import os

def dump(playlist):
    urls = []

    with open(playlist, 'r') as fh:
        for line in fh:
            if line[0] == '#':
                continue

            urls.append(line.strip())

    count = 1
    for url in urls:
        dumpfile = 'part%04d.ts' % count
        count += 1

        if os.path.exists(dumpfile):
            print('Skipping %s...' % dumpfile)

        cmd = [
            'mplayer',
            '-dumpfile', dumpfile,
            '-dumpstream',
            url
        ]

        print('%s -> %s' % (url, dumpfile))
        rc = subprocess.call(cmd)
        if rc != 0:
            raise Exception('dump failed')

if __name__ == '__main__':
    import sys

    playlist = sys.argv[1]
    dump(playlist)

Если части представляют собой файлы MPEG .ts ("транспортный поток"), см. Вопрос, как их объединить: используйте кодек ffmpeg copy, чтобы объединить файлы * .ts в один файл mp4.

Для других типов файлов вам, вероятно, понадобятся инструменты. (см. здесь для mp3)

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