mt-daapd+mediatomb+subsonic+α

音楽・動画まわりを整理した

ライブラリは現状音声と動画で1T弱
ファイル数が90,000程度
NAS用のceleronMのノートPCに
mt-daapd
mediatomb
subsonic
をインストールして利用している。

感想

どのソフトウェアも自動でHDDを走査してくれるので一回設定すれば後はほっとけるのが良いですね。
iTunes+mt-daapd快適。巨大なライブラリをこれまでは仮想環境のwindowsでfoobar2Kを使っていたが音楽を聞くためだけに仮想環境を扱うのはコストが掛り過ぎていた。次第に音楽を聞かなくなっていた。mt-daapd導入後音楽を聞くようになった。
mediatombを通じてテレビで鳥の詩などを見ると迫力に笑う。
subsonicは自作のスクリプトが昨晩のアニメを取得してくれるので朝起きると昨夜のアニメがsubsonicのインデックスに登録されている状態。iPhoneからアニメの視聴開始とか。
マシンのcpuがもう少し強いと嬉しいです。サーバー借りると回線速そうですが1TBのディスクは無理だし、というところで、まぁまぁ満足。

mt-daapd

これは優秀。mt-daapdというよりやはりiTunesが優秀。
インストールはapt-get一発だった気がする。

mediatomb

mediatombはapt-getでよかった。
trancecodingにはmencoderを使っている。これもapt-getでよかった。
ffmpegでも良い。両方使ってみたがサーバーのCPUがceleronMなのでどちらもイッパイいっぱいまでCPUを使う。そして途切れる。この世代のCPUでトランスコーディングはすこし厳しいですね。テレビで見れるようにするところでちょっとはまった。
以下の設定でテレビでも大概のモノが視聴可能

config.xml
# dbはmysqlを利用。特に理由は無い。 
sqlite3 enabled="no">
        <database-file>mediatomb.db</database-file>
      </sqlite3>
      <mysql enabled="yes">
        <host>localhost</host>
        <username>xxx</username>
        <password>xxx</password>
        <database>mediatomb</database>
      </mysql>
    </storage>

#文字コード指定 指定しないとiconvのエラーが発生する。
  <import hidden-files="no">
    <filesystem-charset>UTF-8</filesystem-charset>
    <metadata-charset>UTF-8</metadata-charset>
    <playlist-charset>UTF-8</playlist-charset>

#トランスコーディング周り。大概見れるようになる。vlcmpegという定義に突っ込んでいく
    <mimetype-profile-mappings>
      <transcode mimetype="video/x-flv" using="vlcmpeg"/>
      <transcode mimetype="video/mp4" using="vlcmpeg"/>
      <transcode mimetype="video/x-matroska" using="vlcmpeg"/>
      <transcode mimetype="audio/x-flac" using="vlcmpeg"/>
    </mimetype-profile-mappings>

#vlcmpegのトランスコーディング定義 コマンドを回している。mimetype注意
#video/mpeg:DLNA.ORG_PN=MPEG_PS_NTSC;DLNA.ORG_OP=01にしないとdlna無理だった。
    </profile>
      <profile name="vlcmpeg" enabled="yes" type="external">
        <mimetype>video/mpeg:DLNA.ORG_PN=MPEG_PS_NTSC;DLNA.ORG_OP=01</mimetype>
        <accept-url>yes</accept-url>
        <first-resource>yes</first-resource>
        <accept-ogg-theora>yes</accept-ogg-theora>
        <agent command="/usr/bin/mediatomb-transcode-video" arguments="%in %out"\
/>
<!-- 元の定義                                                                             <agent command="vlc" arguments="-I dummy %in \-\-sout #transcode{venc=ff\
mpeg,vcodec=mp2v,vb=4096,fps=25,aenc=ffmpeg,acodec=mpga,ab=192,samplerate=44100,\
channels=2}:standard{access=file,mux=ps,dst=%out} vlc:quit"/>                    
-->
        <buffer size="14400000" chunk-size="512000" fill-size="120000"/>
      </profile>
    </profiles>
/usr/bin/mediatomb-transcode-video

インターネットからコピペ。chmod +xしましょう

#!/bin/bash                                                                      
# use mencoder
exec /usr/bin/mencoder \
-oac lavc -ovc lavc \
-of mpeg \
-mpegopts format=dvd:tsaf \
-vf softskip,scale=720:480,hqdn3d,harddup \
-srate 48000 \
-af lavcresample=48000:volnorm=2 \
-ofps 25 \
-lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=5120:vstrict=0:keyint=\
15:vbitrate=5120:acodec=ac3:abitrate=192:autoaspect \
"$1" -o "$2"


# use ffmpeg
FFMPEG_PATH="/usr/bin/ffmpeg"
INPUT="$1"
OUTPUT="$2"
VIDEO_CODEC="mpeg2video"
VIDEO_BITRATE="5000k"
VIDEO_FRAMERATE="29.97"
AUDIO_CODEC="mp2"
AUDIO_BITRATE="128k"
AUDIO_SAMPLERATE="44100"
AUDIO_CHANNELS="2"
FORMAT="dvd"
SIZEFORMAT="720×480"

#exec "${FFMPEG_PATH}" -i "${INPUT}" -target ntsc-dvd -vcodec ${VIDEO_CODEC} -b \
${VIDEO_BITRATE} -s 720x480 -aspect 16:9 \                                       
#-r ${VIDEO_FRAMERATE} -acodec ${AUDIO_CODEC} -ab ${AUDIO_BITRATE} -ar ${AUDIO_S\
AMPLERATE} \                                                                     
#-ac ${AUDIO_CHANNELS} -f ${FORMAT} -s 720x480 - > "${OUTPUT}"                   

subsonic

apt-getで導入。トランスコーディング用にffmpeg/flac/lame/oggなどを導入(apt-get)。
かなり使いやすいです。ライブラリが巨大になると曲探しが辛い。
jettyらしい。jettyって何?javaは全くわからないが見よう見まねでちょっと変えた。

/etc/default/subsonic
# メモリ不足でライブラリ構築中に落ちるので大きく。--max-memory=500効いているのか不明
# 自分の環境ではapacheのプロキシでぶら下げるのでのでcontext-pathを設定 必須ではない。
SUBSONIC_ARGS="--max-memory=500 --context-path=/subsonic"
SUBSONIC_USER=root
適当にjsp編集

ひとりで使うのでコミュニティ機能いらない。ちょっとframeサイズ変更
# index.jsp

<frameset rows="70,*,0" border="0" framespacing="0" frameborder="0">
    <frame name="upper" src="top.view?">
    <frameset cols="15%,85%" border="0" framespacing="0" frameborder="0">
        <frame name="left" src="left.view?" marginwidth="0" marginheight="0">

        <frameset rows="80%,20%" border="0" framespacing="0" frameborder="0">
<!--            <frameset cols="*,${model.showRight ? 230 : 0}" border="0" framespacing="0" frameborder="0">
-->
                <frame name="main" src="nowPlaying.view?" marginwidth="0" marginheight="0">
<!--                <frame name="right" src="right.view?" scrolling="no">
</frameset>
-->

videoがdonate必須らしい。乗り越える
内部処理もtrialかどうかで変更されていたら駄目だがその時は少し考えよう。

# 60行目付近。expireをテストしてplay()のcallを管理している。問答無用でplay()する
        function playerReady(thePlayer) {
            player = $("player1");
            player.addModelListener("TIME", "timeListener");
            
            play();
        }
        <c:if test="${not (model.trial and model.trialExpired)}">
        </c:if>
# 140行付近をコメントアウト
<!--
<c:if test="${model.trial}" >
    <fmt:formatDate value="${model.trialExpires}" dateStyle="long" var="expiryDate"/>

    <p class="warning" style="padding-top:1em">
        <c:choose>
            <c:when test="${model.trialExpired}">
                <fmt:message key="networksettings.trialexpired"><fmt:param>${expiryDate}</fmt:param></fmt:message>
            </c:when>
            <c:otherwise>
                <fmt:message
                        key="networksettings.trialnotexpired"><fmt:param>${expiryDate}</fmt:param></fmt:message>
            </c:otherwise>
        </c:choose>
    </p>
</c:if>
-->