LoginSignup
0
0

More than 5 years have passed since last update.

convert youtube playlist to local m3u format file for smplayer (by toy tool )

Last updated at Posted at 2017-03-05

承前

  • mplayer ( smplayer ) は YouTube のページ URL を理解して動画を再生してくれるが、複数の動画を連続再生するにはあらかじめローカルに playlist file を作っておく必要がある。
  • ブラウザで Youtube のプレイリストを再生するのはなんとなくうれしくない。
  • youtube-dl は Youtube のプレイリストをすべてローカルにダウンロードすることができるが、ダウンロードせずにリストを作るような手段が -s オプションくらいしか見つからず、これは動画そのものの一時的な URL を並べる。削除されない限り恒久的な URL を並べることはコマンドラインからではできなさそうだ。
  • youtube-dl コマンドの実体は python スクリプトであり、コマンドは python のライブラリを呼び出している。

では youtube-dl のライブラリをコマンドラインのpython から呼び出して、しばらくつかえるようなプレイリストのローカルファイルをつくろう、というハナシ。

環境

今回、作りながら動作チェックしたのは Windows 10 上で、gitbash をシェルとし、Conda でインストールした Python , その pip からインストールした youtube-dl という構成。

本体

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import codecs
import sys
import youtube_dl

class yt_Listup:
    """ Wrapper for youtube-dl library
      * read youtube.com playlist
      * output by m3u format 
    """

    def __init__(self, url):
        self.url_list = []
        ydl = youtube_dl.YoutubeDL({'outtmpl': u'%(id)s%(ext)s', \
                'logtostderr': True})
        with ydl:
            result = ydl.extract_info(
                url ,
                download=False, # We just want to extract the info
            )

        if 'entries' in result:
            self.url_list.extend(result['entries'])
        else:
            self.url_list.append(result)

    def m3u(self, fileHandle = codecs.getwriter('utf_8')(sys.stdout)):
        for item in self.url_list:
            fileHandle.write( "# " + item['title'] + "\n" + \
                    item['webpage_url'] + "\n" )
        return


if __name__ == "__main__" :
    l = yt_Listup(sys.argv[1]).m3u()

とりあえず出力先を stdout にしてリダイレクトで保存する運用中 ……なんて但し書きを必要とするひとはコード断片なんか読まないような気がするので蛇足

なお

python に真面目なひとには叱られそうなことに、PEP8準拠するための整形もしていない。
開発に真面目なひとには叱られそうなことに、テストコードも内包していない。
この機能のまま拡張する気がないのならば、append() とか extend() とか使わず = で代入のほうがシンプルで正しい。
わたしの好みとしては、コマンドラインで使うのならば Usage() 関数とかつけたいし、このコードはリネームして最終的にはライブラリ・パスに置きたい。
再生画面はともかく smplayer のプレイリスト画面に URL がそのまま表示されるのが気に入らないところからはじまり、ここに挙げたコードからそこそこ手を加えた。多機能になればなるほど長くなる。

そのうえで、youtube の playlist をローカルファイルに保存するという「いかにも誰もが使いそうな」機能が検索してもほぼ見当たらなかったので。メインの部分がもっともわかりやすい、このコードだけ公開しておくのが Qiita というサイトのノリに近くて読みやすいかな、と思いました。

Thanks

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0