忍者ブログ
Yaleで、遊んで学ぶ日々。

Yaleで、遊んで学ぶ日々。

囲碁、ときどきプログラミング、ところにより経済。
[42]  [43]  [44]  [45]  [46]  [47]  [48]  [49]  [50]  [51]  [52
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

Fairwayを久しぶりに聞きました。
僕にスーパーカーを教えてくれたのは、大学の時の友達でした。


こんな風に楽しかったことや懐かしかったことを思い出すと、心がざわつきます。
懐古・焦燥・不安を見つけてやってくる、ざわざわです。


このざわざわのない日々を送ることが人生の目標に思えてならないのですが、いまだに何が足りていないのかが見えてきません。
もしかしたら、足りないのではなく余計なものを持ちすぎているのかもしれません。



PR
Ubuntuでサーバー接続する方法。
何か難しく考えすぎだった。すげー簡単だった。むしろWindowsより簡単だわ。FTPとかいらない。コマンドを覚える必要もない。

左上のメニューのPlace(場所)のなかの、"Connect to Server(サーバーへ接続)" というところを開く。そこで自分のサーバー名とかユーザー名とかを入れて、必要があればパスワード入れればOK.  Nautilus (デフォルトのファイルブラウザ) に接続したサーバーがネットワークドライバとして加わるから、あとは直感的に動かせる。情報源はこちら


あるディレクトリ内の特定の拡張子のファイルをmp3に変換するシェルスクリプト。シェルの勉強に書いた。

syntax:
 $ sh dir2mp3 <target directory> <input extension> [ffmpeg options]

ffmpegがインストールされていて、libmp3lameコーデックがencodaleであることが前提(参考)。
1行目は環境に応じて変える。
一応 dir2mp3.sh という名前をつけたけど名前は何でもいい。
実質的には最後の6行だけでいい。


#!/bin/sh

# convert files in a directory into mp3.
# does not look for files in sub-directories.
# depends on ffmpeg.
# author: kohta
# date: 05/19/2010

# arguments
#   $1: target directory (can be relative)
#   $2: input extension (can be video)
#   $3: (optional) options to cast to ffmpeg (please quote by " ")

# example
#   dir2mp3.sh ~/Music m4a "-y -ac 2 -ab 128k"

# hint
#   add "-y" to the third argument to avoid overwrite queries


echo "This is" $0 "..."
echo "syntax:"
echo "  sh" $0 "<target directory> <input extension> [ffmpeg options]"



if [ $# -eq 2 ]; then
    echo "target directory:" $1
    echo "input extension: " $2
elif [ $# -eq 3 ]; then
    echo "target directory:" $1
    echo "input extension: " $2
    echo "ffmpeg options:  " $3
else
    echo "need at least 2 arguments: <target directory> and <input extension>"
    exit
fi



for file in $1/*.$2
do
    echo "converting" $file "to mp3 with options" $3 "..."
    ffmpeg -i "$file" -acodec libmp3lame $3 "${file%$2}mp3"
    echo "done."
done







Youtubeやnicovideoから動画や音楽を落とすツールとしては、Craving Explorerが非常に便利だが、Windows用に作られているのでUbuntu上ではうまく動かせない(Wineの使い方が結局よく分からない)。少し時間をかけてUbuntu上で似たような機能を実現する方法を考えてみた。

いくつか調べてみた結果、動画を落とすにはyoutube-dl、nicovideo-dl、さらに音声を抽出するにはffmepgを使うのが王道のような気がする。すべてSynaptic Package Managerからインストールできる。Youtube, nicovideo以外の動画配信サイトからの保存については後述

youtubeの動画の音声のみを指定した保存先にダウンロードするシェルスクリプト

#!/bin/sh

youtube-dl -o /tmp/tmp.flv $1
ffmpeg -i /tmp/tmp.flv -vn -acodec copy -y /tmp/tmp.mp3
cp /tmp/tmp.mp3 $2
rm /tmp/tmp.flv
rm /tmp/tmp.mp3

引数1で動画のURLを指定し、引数2で保存先のファイルパスを指定する。
やっていることは至極単純で、3行目でflv動画を一時フォルダにダウンロード(-o オプションでファイル名を指定)。4行目でそこから音声部分だけを抽出。5行目で音声ファイルの名前を変えて保存先にコピー。6-7行目で一時ファイルを削除。
 
実験したければ、上のスクリプトを仮にdltestという名前で保存。ターミナルからdltestのあるディレクトリへ行き、以下を実行。
 
$ chmod u+x dltest
$ ./dltest http://www.youtube.com/watch?v=iC8V8S_REhk test.mp3

うまくいけば、K'naanのWavin' Flag(ワールドカップ南アフリカ大会のアンセム)がtest.mp3という名前で保存されるはず。保存名は自由に変えていいけど、空白は引数の区切りだと受け取られてしまうので、たとえば "Knaan Wavin Flag.mp3" という名前で保存したいときは
 
$ ./dltest http://www.youtube.com/watch?v=iC8V8S_REhk Knaan\ Wavin\ Flag.mp3.mp3

というように、スペースの前にバックスラッシュを入れる。あるいは
 
$ ./dltest http://www.youtube.com/watch?v=iC8V8S_REhk "Knaan Wavin Flag.mp3.mp3"

というふうに、全体を" "でくくる。

Wavin' Flagにはいくつかバージョンがあって、Youtubeで開くと関連動画のところに別バージョンが表示される。関連動画から動画を選ぶと、URLは
http://www.youtube.com/watch?v=utl-uOdX12w&feature=related
というようになり、"&feature=related"という関連動画であることを示す箇所が加わる。このURLを使うと、flvはちゃんと保存されるのだけど、続く音声抽出の段階で動きが止まる。はっきりとした理由は分からないけど、どうもyoutube-dlの仕様で、"&feature=related"がついていると、アプリケーションが自動で閉じきらないらしい(Enterキーを押すと閉じる)。そのせいで、いつまでたっても変換できないで止まっているのではないだろうか。とりあえず、"&feature=related"の部分は削るのが無難。

動画URLと保存名のリストを作っておいて、複数のファイルを保存するようにループを回すシェルスクリプトを書くこともできるが、複雑な作業をするには別の言語を使う方が何かと書きやすい。Pythonでは、os.system()メソッドを使って外部プログラムを呼ぶことができるから、例えば

import os
import shutil

url = 'http://www.youtube.com/watch?v=iC8V8S_REhk test.mp3'
file = 'wavin flag.mp3'
os.system('youtube-dl -o /tmp/tmp.flv' + ' ' + url)
os.system('ffmpeg -i /tmp/tmp.flv -vn -acodec copy -y' + ' ' +  '/tmp/tmp.mp3')
shutil.copyfile('/tmp/tmp.mp3', file)
os.remove('/tmp/tmp.flv')
os.remove('/tmp/tmp.mp3')

とすれば上のシェルスクリプトと同様の動作をさせることができる。Pythonならファイルの読み込みもループも比較的容易に書ける。


nicovideo-dlの使い方はyoutube-dlとほぼ同じ。違いは、user名とpassが必要だということ。
$ nicovideo-dl -o /tmp/tmp.flv -u <user名(email)> -p <password> http://www.nicovideo.jp/watch/sm936599

それ以外はyoutube-dlの場合と同じ。ちなみに、このURLはクラムボンのシカゴ。


ffmpegの部分でやっているのは、抽出であって変換ではない(と思う)。
 
$ ffmpeg -i /tmp/tmp.flv -vn -acodec copy -y /tmp/tmp.mp3

-vnオプションで画像を消して、-acodec copyオプションで単純にコピーしている。だから、もともとの音声部分だけが残る。形式変換はしていない。この方法が使えるのは、動画ファイルの音声部分のコーデックがmp3形式になっている場合だけで、違う形式だとうまくいかない。正確にはmp3形式の音声ファイルにならなくて、それなのにファイル名にはmp3という拡張子がついているという状況になり、プレイヤーが混乱する恐れがある(AAC形式の音声にmp3という拡張子をつけたら、デフォルトのTotem Movie Playerは混乱した)。

今のところ、youtubeとnicovideoからの動画でmp3以外の形式に当たったことはないけど、もしそういう問題(プレイヤーがmp3ファイルを再生できないという)が生じたら、そのファイルを右クリック->propertyを開いて、Audioタブのコーデックを調べてみる。それがMP3でなければ、拡張子を適切に変える。

 

音声形式の問題は、Dailymotionの動画から音声を抽出した際に起こった(クラムボンのDoggie & Maggie. 他では見つからなかった)。Dailymotionに特化したアプリケーションは見つからなかったから、ちょっと面倒くさい(ある意味簡単かも)手を使った。フラッシュ動画をブラウザで見ると、/tmpフォルダに動画ファイルが一時的に保存される。 そのファイルはページから移動すると消えてしまうのだけど、その前にコピーしてきて、ffmpegを使って音声を抽出すればいい。動画ファイルのプロパティを見てみると、音声部分のcodecがAACとなっていた。だから、抽出する際に、保存ファイル名にaac拡張子をつける(調べてみたら、AACっていうのはiTunesや着うたで使われている形式なのか。aacよりもm4aという拡張子の方が一般的かも。ソースはwiki)。Dailymotionの動画の音声コーデックがみんなAACになっているのかというと、それは分からない。こと音楽に限ってはyoutubeで8割、nicovideoで残りの8割は事が足りるから、必要になることはあまりないと思う。

音声形式をmp3にエンコードし直すという手もある。mp3へのエンコードは次のようにやる。

$ ffmpeg -i input.m4a -acodec libmp3lame -ac 2 -ab 128k output.mp3

-acオプション(チャンネル)と-abオプション(ビットレート)は好みに合わせて変える。適切なビットレートがいくつかっていうのは正直よく分からない。flvから抽出した音声ならもともと大した音質でもないので、128kで十分だと思う。CDからの変換だと192kくらいがスタンダードなのかなぁ。知らないけど。

ちなみに、ネット上の情報だと多くの場合に"libmp3lame"の部分が"mp3"になっているけど、それじゃ回らない(環境によるのか?)。理由は、mp3は出力対応コーデックに含まれていないから(特許とか表現の自由などの地域差への配慮らしい。参考)。ffmepgの対応形式を見るには、
 
$ ffmpeg -formats

を実行する。"D" とついているのが入力に使えるコーデック (decodable), "E" が出力に使えるコーデック (encodable).  "A" は音声のコーデックであることを意味する。うちの場合、mp3にはDとAのみがついていた。対してlibmp3lameにはEとAがついている。

 
さっき気づいたんだけど、Gmailにファイルの添付忘れを注意する機能があるみたい。本文に"is attached"というフレーズが含まれているのに添付ファイルがない場合、タイトルのような確認メッセージが出る。"are attached", "attached is", "attached file" などでも同じことが起こるが、"attached pdf"では出なかった。日本語で「添付ファイル」と書いた場合も出なかった。また、本文ではなくタイトルにフレーズが含まれている場合も発生しなかった。

確かに添付するって言って添付し忘れるのは日常茶飯事だけどね。返信時に相手のメッセージを引用している場合に、その引用部に書かれたフレーズに反応するかどうかはどうも安定していないようだ。何度か実験してみたら確認ダイアログが出る場合と出ない場合があった。どうも原則引用部分には反応しない仕様になっているが、Gmailでないアカウントでの引用が積み重なるとバグが出ているのではなないかと予想。
Calender
02 2025/03 04
S M T W T F S
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Search in This Blog
Latest Comments
[03/30 川内のばば山田]
[03/30 川内のばば山田]
[08/06 Aterarie]
[07/05 Agazoger]
[07/01 Thomaskina]
Oldest Posts
Latest Trackbacks
フリーエリア

Barcode
Access Analysis
Powerd by NINJAブログ / Designed by SUSH
Copyright © Yaleで、遊んで学ぶ日々。 All Rights Reserved.
忍者ブログ [PR]