vlcをCUIから使う
みなさんごきげんよう。今日も元気にラブライブ!の1stシングル「僕らのLIVE 君とのLIFE」を聞きましょう。
…あぁ、いつもいつもCD挿すのめんどくさいですね。ここはちょいとvorbisあたりに変換してハードディスクに保存してしまいましょう。誰ですかiPodとかで聞いてるのは?そんなものは知らない。見えない。分からない。
さて、手元にvlcがあります。こいつを使って収録されている曲及び各員からのコメントを変換して保存するには、トラックごとにダイアログから設定して、エンコードしてやらないといけません。おいぃ13トラックもあるぞ!手でやってられへん!!!
これはめんどくさい、一気に変換する方法はないものか…そうだ、vlcってCUIから使えねーの?と思ってvlc --helpとか打ってみたらやたらと長い説明が出てきて、それだけでは飽き足らず「網羅的なヘルプを表示するためには、'-H'オプションを指定してください。」とか言わはる。これはやばい。相当にやばい。しかし私はラブライブ!1stシングルを快適に聞くために頑張ってvlcでバッチエンコードするためのマンドを探しまくりました。ありました。やったー
というわけで、私の備忘録、兼、今日もどこかでvlcのプログラムオプションに困っている人達のために残しておきます。
サンプル
cvlc --sout-vorbis-quality=4 \ --sout "#transcode{acodec=vorb,channels=2,samplerate=44100}:std{access=file,mux=ogg}" \ cdda:///dev/cdrom :cdda-track=2 :sout-standard-dst=友情ノーチェンジ.ogg \ cdda:///dev/cdrom :cdda-track=5 :sout-standard-dst=はじめまして-高坂穂乃果-.ogg
これは以下と同じです(理由は後述):
cvlc --sout-vorbis-quality=4 \ --sout-transcode-acodec=vorb --sout-transcode-channels=2 \ --sout-transcode-samplerate=44100 --sout-standard-access=file --sout-standard-mux=ogg \ cdda:///dev/cdrom :cdda-track=2 :sout-standard-dst=友情ノーチェンジ.ogg \ cdda:///dev/cdrom :cdda-track=5 :sout-standard-dst=はじめまして-高坂穂乃果-.ogg
Overview
cvlc [オプション] [[MRL] [オプション…]]…
vlcは、多くのオプションに従ってMRLごとにデータを再生(スピーカーやモニターに出力)、ストリーム出力(webに出力)、ローカルに保存(ファイルに出力)、その他何かします。
cvlcとは、GUI剥ぎ取ったvlcです。なので、vlcに同じコマンドを渡すこともできますし、ちゃんと動きます。ただしバッチ中にウィンドウ出てきてもうざいだけですが。
MRL
MRLは、入力データの場所です。ローカルファイル以外にも、web上のファイルやストリームとかでもいいです。
MRLはURLに何か色々付け足したものですが、その「何か」の部分は知りませんので知りません。URLは以下のような書式です(vlc --helpから抜粋)。
URL syntax: [file://]filename Plain media file http://ip:port/file HTTP URL ftp://ip:port/file FTP URL mms://ip:port/file MMS URL screen:// Screen capture [dvd://][device][@raw_device] DVD device [vcd://][device] VCD device [cdda://][device] Audio CD device udp://[[<source address>]@[<bind address>][:<bind port>]] UDP stream sent by a streaming server vlc://pause:<seconds> Special item to pause the playlist for a certain time vlc://quit Special item to quit VLC
例えば、 /dev/cdrom に挿さっているオーディオCDなら、 cdda:///dev/cdrom です。
screen:// は多分、ディスプレイ出力を入力にするためのURLだと思います。ゲームのプレイ動画とか作れるかもしれませんね。
vlc://quit を見つけるとvlcは終了します。つまり、これを付けないとバッチ処理後もvlcは起動したままになります。
オプション
オプションは、グローバルなものと、MRLごとに指定するための記法の二つがあります。
--optionと書くと、全てのMRLに対するオプションになり、:optionと書くと、直前のMRLに対するオプションとなります。:optionは--optionより優先されます(この説明が完全に正しいわけじゃないっぽいです)。
また、--sout-*系のオプションは、
--sout "#module1{option1=value,option2=value…}:module2{option1=value,option2=value…}…"
という風に書くことができ、これは
--sout-module1-option1=value --sout-module1-option2=value … --sout-module2-option1=value …
と同じです。
#module1{options}:module2{options}… の形式が使えるmoduleは、 transcode, standard, duplicate, rtp と、他あったような気がするけど忘れました。
個々のオプション項目
サンプルをもう一度記載します。
cvlc --sout-vorbis-quality=4 \ --sout "#transcode{acodec=vorb,channels=2,samplerate=44100}:std{access=file,mux=ogg}" \ cdda:///dev/cdrom :cdda-track=2 :sout-standard-dst=友情ノーチェンジ.ogg \ cdda:///dev/cdrom :cdda-track=5 :sout-standard-dst=はじめまして-高坂穂乃果-.ogg
- --sout-vorbis-*: Vorbisコーデックのオプション。デフォルトではVBRエンコードになっている
- --sout-transcode-*: 入力を変換する系のオプション
- --sout-standard-*: 出力先に関するオプション
standardには、stdという別名があるので、#module1{}:module2{}という書き方をする場合はそのstdという別名が使えます。
--sout-transcode-*には、もちろん映像関連のオプションもあります。 --sout-transcoode-vcodec=video_codec とか。
この他のmoduleも、全然使ってないけど憶測で適当に紹介します。
- --sout-duplicate-*: 出力を分岐する
- --sout-duplicate-dst=#module1{options…}:module2{options…} : オプションの内容に従って出力する。dstを何個も書いてやることで、出力先が増える
- --sout-rtp-*: 指定するURLにRTPで出力
これらのオプションについて、詳細はvlc -Hや、
- http://www.videolan.org/doc/vlc-user-guide/en/ch04.html
- http://wiki.videolan.org/Documentation:Play_HowTo/Advanced_Use_of_VLC
- http://wiki.videolan.org/Documentation:Streaming_HowTo/Command_Line_Examples
- http://wiki.videolan.org/Documentation:Streaming_HowTo_New
- http://wiki.videolan.org/Transcode
あたりを見てください。ちなみに上のURLのリストは多分内容が偏ってると思うので、もっと色々なことをしたい人は、勝手にwikiの中を漁ってください。
そんなわけでvlcをコマンドラインから使う方法を紹介してきましたが、ぶっちゃけMRLとオプションをずらずら並べなくても、シェルのfor文使ってもいいですね。
あとなんか、--optionと:optionの関係はそんな単純なものじゃないっぽくて、まぁうまいことやってください。