Como despejo todas as entradas de uma lista de reprodução com o MPlayer?

0

Eu posso reproduzir todos os elementos em uma playlist usando

mplayer -playlist file.m3u

mas quando eu despejo o fluxo usando

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

file.ts contém apenas a primeira entrada na lista de reprodução M3U. Como posso dizer ao mplayer para descarregar tudo?

    
por Aaron Digulla 29.03.2015 / 14:35

1 resposta

1

Um arquivo m3u ou m3u8 é apenas uma lista de links (um por linha) misturados com comentários. Eu usei o seguinte pequeno programa em Python para fazer o download de todas as partes da playlist uma a uma:

#!/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)

Se as partes forem MPEG .ts files ("stream de transporte"), veja esta questão como se juntar a elas: Use o codec de cópia ffmpeg para combinar arquivos * .ts em um único mp4

Para outros tipos de arquivos, você provavelmente precisará de ferramentas. (veja aqui para mp3 )

    
por 31.03.2015 / 14:11