Menu

Configuration to Chromecast

2014-01-12
2014-02-22
  • Carlos Eduardo Aires da Camara

    Hi everyone,

    I'm sorry my english.

    After a lot of days trying see my movies with subtitles I finally can put Chromecast to work using mediatomb (using Avia). Please use it and help me to improve it.

    I use Ubuntu 13.10.

    To work yo need install (compile) the last version of FFMPEG. (https://trac.ffmpeg.org/wiki/UbuntuCompilationGuide)

    Create the file "mediatomb-ceac13-transcoder" in /usr/local/bin/ and put this content:

     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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    #!/bin/bash
    
    video=$1
    legenda=""
    comLegenda=0
    #Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, AlphaLevel, Encoding
    subtitleStyle="Default,Arial,20,65535,65535,&H0,&H0,0,0,0,1,1,0,2,10,10,10,0,0"
    
    #Levar em conta que as extensões podem estar maiusculas
    IFS=$(echo -e "\t\n")
    for tmpfile in $(echo $video | sed 's/....$/*/')*; do
        filename=$(basename "$tmpfile")
        extension="${filename##*.}"
        echo $extension
        if [ "$extension" == "ass" ]; then
            echo 'Legenda ASS encontrada'
            legenda=$(echo $video | sed 's/...$/ass/')
            comLegenda=1
        elif [ "$extension" == "srt" ]; then
            echo 'Legenda SRT encontrada'
            legenda=$(echo $video | sed 's/...$/srt/')
            comLegenda=1
        elif [ "$extension" == "ssa" ]; then
            echo 'Legenda SSA encontrada'
            legenda=$(echo $video | sed 's/...$/ssa/')
            comLegenda=1
        elif [ "$extension" == "sub" ]; then
            echo 'Legenda SubRip encontrada'
            legenda=$(echo $video | sed 's/...$/sub/')
            comLegenda=1
        fi
    
    done
    
    if [ $comLegenda == 1 ]; then
        encoding=$(file -bi "$legenda" | sed -e 's/.*[ ]charset=//')
        encoding=`echo "$encoding" | tr [:lower:] [:upper:]`
    
        ffmpeg -y -sub_charenc "$encoding" -i "$legenda" "/tmp/legenda.ass"
        sed -i '/Style: /c\Style: '$subtitleStyle'' /tmp/legenda.ass
        exec ffmpeg -i "$video" -y -c:v libvpx -b:v 5M -crf 10 -c:a libvorbis -cpu-used 16 -threads 8 -f webm -vf subtitles="/tmp/legenda.ass" -map 0 -map -0:s "$2"
    
    elif [ ${video##*.} == webm ]; then
        exec ffmpeg -i "$video" -y -vcodec copy -acodec copy -f webm "$2"
    
    else
        exec ffmpeg -i "$video" -y -c:v libvpx -b:v 5M -crf 10 -c:a libvorbis -cpu-used 16 -threads 8 -f webm "$2"
    fi
    
    reset
    exit
    

    Don't forget the execution permission (chmod +x mediatomb-ceac13-transcoder)

    Change the config.xml in /home/your_profile/.mediatomb/ to:
    <?xml version="1.0" encoding="UTF-8"?>
    <config version="2" xmlns="http://mediatomb.cc/config/2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://mediatomb.cc/config/2 http://mediatomb.cc/config/2.xsd">
        <server>
        <ui enabled="yes" show-tooltips="yes">
            <accounts enabled="no" session-timeout="30">
                <account user="mediatomb" password="mediatomb"/>
            </accounts>
        </ui>
        <name>MediaTomb</name>
        <udn>uuid:61449535-e4be-4306-b79d-1815fb5f30bd</udn>
        <home>/home/ceac13/.mediatomb</home>
        <webroot>/usr/share/mediatomb/web</webroot>
        <storage>
            <sqlite3 enabled="yes">
                <database-file>mediatomb.db</database-file>
            </sqlite3>
            <mysql enabled="no">
                <host>localhost</host>
                <username>mediatomb</username>
                <database>mediatomb</database>
            </mysql>
        </storage>
        <protocolInfo extend="no"/>
        <extended-runtime-options>
            <ffmpegthumbnailer enabled="no">
                <thumbnail-size>128</thumbnail-size>
                <seek-percentage>5</seek-percentage>
                <filmstrip-overlay>yes</filmstrip-overlay>
                <workaround-bugs>no</workaround-bugs>
                <image-quality>8</image-quality>
            </ffmpegthumbnailer>
            <mark-played-items enabled="no" suppress-cds-updates="yes">
                <string mode="prepend">*</string>
                <mark>
                    <content>video</content>
                </mark>
            </mark-played-items>
        </extended-runtime-options>
        </server>
        <import hidden-files="no">
        <scripting script-charset="UTF-8">
            <virtual-layout type="builtin"/>
        </scripting>
        <mappings>
            <extension-mimetype ignore-unknown="no">
                <map from="mp3" to="audio/mpeg"/>
                <map from="ogx" to="application/ogg"/>
                <map from="ogv" to="video/ogg"/>
                <map from="oga" to="audio/ogg"/>
                <map from="ogg" to="audio/ogg"/>
                <map from="ogm" to="video/ogg"/>
                <map from="asf" to="video/x-ms-asf"/>
                <map from="asx" to="video/x-ms-asf"/>
                <map from="wma" to="audio/x-ms-wma"/>
                <map from="wax" to="audio/x-ms-wax"/>
                <map from="wmv" to="video/x-ms-wmv"/>
                <map from="wvx" to="video/x-ms-wvx"/>
                <map from="wm" to="video/x-ms-wm"/>
                <map from="wmx" to="video/x-ms-wmx"/>
                <map from="m3u" to="audio/x-mpegurl"/>
                <map from="pls" to="audio/x-scpls"/>
                <map from="flv" to="video/x-flv"/>
                <map from="mkv" to="video/x-matroska"/>
                <map from="mka" to="audio/x-matroska"/>
            </extension-mimetype>
            <mimetype-upnpclass>
                <map from="audio/*" to="object.item.audioItem.musicTrack"/>
                <map from="video/*" to="object.item.videoItem"/>
                <map from="image/*" to="object.item.imageItem"/>
                <map from="application/ogg" to="object.item.audioItem.musicTrack"/>
            </mimetype-upnpclass>
            <mimetype-contenttype>
                <treat mimetype="audio/mpeg" as="mp3"/>
                <treat mimetype="application/ogg" as="ogg"/>
                <treat mimetype="audio/x-flac" as="flac"/>
                <treat mimetype="image/jpeg" as="jpg"/>
                <treat mimetype="audio/x-mpegurl" as="playlist"/>
                <treat mimetype="audio/x-scpls" as="playlist"/>
                <treat mimetype="audio/x-wav" as="pcm"/>
                <treat mimetype="audio/L16" as="pcm"/>
                <treat mimetype="video/x-msvideo" as="avi"/>
                <treat mimetype="video/mp4" as="mp4"/>
                <treat mimetype="audio/mp4" as="mp4"/>
                <treat mimetype="application/x-iso9660" as="dvd"/>
                <treat mimetype="application/x-iso9660-image" as="dvd"/>
                <treat mimetype="video/x-matroska" as="mkv"/>
                <treat mimetype="audio/x-matroska" as="mka"/>
            </mimetype-contenttype>
        </mappings>
        <online-content>
            <YouTube enabled="no" refresh="28800" update-at-start="no" purge-after="604800" racy-content="exclude" format="mp4" hd="no">
                <favorites user="mediatomb"/>
                <standardfeed feed="most_viewed" time-range="today"/>
                <playlists user="mediatomb"/>
                <uploads user="mediatomb"/>
                <standardfeed feed="recently_featured" time-range="today"/>
            </YouTube>
        </online-content>
        </import>
        <transcoding enabled="yes">
        <mimetype-profile-mappings>
            <transcode mimetype="video/x-flv" using="vlcmpeg"/>
            <transcode mimetype="application/ogg" using="vlcmpeg"/>
            <transcode mimetype="application/ogg" using="oggflac2raw"/>
            <transcode mimetype="audio/x-flac" using="oggflac2raw"/>
            <transcode mimetype="video/mp4" using="ffmpeg-sub"/>
            <transcode mimetype="video/x-msvideo" using="ffmpeg-sub"/>
            <transcode mimetype="video/ogg" using="ffmpeg-sub"/>
            <transcode mimetype="video/x-ms-asf" using="ffmpeg-sub"/>
            <transcode mimetype="video/x-ms-wmv" using="ffmpeg-sub"/>
            <transcode mimetype="video/x-ms-wvx" using="ffmpeg-sub"/>
            <transcode mimetype="video/x-ms-wm" using="ffmpeg-sub"/>
            <transcode mimetype="video/x-flv" using="ffmpeg-sub"/>
            <transcode mimetype="video/x-matroska" using="ffmpeg-sub"/>
        </mimetype-profile-mappings>
        <profiles>
            <profile name="ffmpeg-sub" enabled="yes" type="external">
                <mimetype>video/webm</mimetype>
                <accept-url>yes</accept-url>
                <first-resource>yes</first-resource>
                <accept-ogg-theora>yes</accept-ogg-theora>
            <agent command="mediatomb-ceac13-transcoder" can-seek="yes" arguments='%in %out'/>
                <buffer size="147483648" chunk-size="512000" fill-size="2048000"/>
            </profile>
        </profiles>
        </transcoding>
    </config>

    The script convert your videos to webm.
    I don't know how use seek in Mediatomb.

     
    • BT

      BT - 2014-02-22

      MediaTomb uses a FIFO for output so you can't seek transcoded streams.

       
  • Sean Donovan

    Sean Donovan - 2014-02-21

    hi! i really appreciated this post since it got me to run a great chromecast mediatomb server! the real reason im posting is that i had a problem with ur last piece of ur script so i played around with it until i ended up with this

    elif [ ${video##*.} == webm ]; then
        exec avconv -i "$video" -y -vcodec copy -acodec copy -f webm "$2"
    
    else
        exec avconv -y -i "$video" -vcodec libvpx -b 4096k -r 25 -acodec libvorbis -ar 48000 -ac 2 -ab 448000 -f webm - > "$2"
    fi
    

    i use avconv since from what i read ffmpeg is deprecated
    ~~~~~~

     

Log in to post a comment.