# [mediatomb/ffmpeg] miniatures et formats ?

## Chr0nos

Bonjour a tous,

je cherche a "modifier" ma config de mon serveur mediatomb (qui marche depuis un moment deja sans vrais "problemes") mis a part que losque je navigue dans mes films avec ma ps3:

1: je n'ai pas de miniatures sur les video alors que ffmpeg thumbnailer est installé et fonctionel

2: je n'arrive pas a definir une "methode" de traitement pour les video en .mkv a savor:

- si la langue "us" est trouvé ET que des sous titres "fr" sont dispo alors utiliser de la vostf

- sinon si utiliser la langue par default et si des sous titres marqué "forced" sonts dispo alors les utiliser en plus de la langue audio

(je "suppose" que je vais devoir passer par un fichier .bash ou .sh pour cela mais je n'ai pas le niveau requis pour faire un truc "propre" (ou meme fonctionel mais crade) avec mkvinfo / grep / cut / sed / etc)

coté /etc/mediatomb/config.xml j'ai:

```

<?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>StarK</name>

    <udn>uuid:419aea13-faa2-4af8-bbb4-596b5f9567fd</udn>

    <home>/var/lib/mediatomb</home>

    <webroot>/usr/share/mediatomb/web</webroot>

    <storage>

      <sqlite3 enabled="yes">

        <database-file>mediatomb.db</database-file>

      </sqlite3>

      <mysql enabled="no">

        <host>host</host>

        <database>database</database>

        <username>username</username>

        <password>password</password>

      </mysql>

    </storage>

    <protocolInfo extend="yes"/>

    <pc-directory upnp-hide="no"/>

    <extended-runtime-options>

      <ffmpegthumbnailer enabled="yes">

        <thumbnail-size>512</thumbnail-size>

        <seek-percentage>10</seek-percentage>

        <filmstrip-overlay>no</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>

      <lastfm enabled="no">

        <username>username</username>

        <password>password</password>

      </lastfm>

    </extended-runtime-options>

  </server>

  <import hidden-files="no">

    <scripting script-charset="UTF-8">

      <common-script>/usr/share/mediatomb/js/common.js</common-script>

      <playlist-script>/usr/share/mediatomb/js/playlists.js</playlist-script>

      <virtual-layout type="builtin">

        <import-script>/usr/share/mediatomb/js/import.js</import-script>

      </virtual-layout>

    </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"/>

        <map from="avi" to="video/avi"/>

        <map from="m2ts" to="video/avc"/>

        <map from="cr2" to="image/raw"/>

        <map from="nef" to="image/raw"/>

      </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"/>

      </mimetype-upnpclass>

      <mimetype-contenttype>

        <treat mimetype="audio/mpeg" as="mp3"/>

        <treat mimetype="application/ogg" as="ogg"/>

        <treat mimetype="video/ogg" as="ogg"/>

        <treat mimetype="audio/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="video/divx" as="avi"/>

      </mimetype-contenttype>

    </mappings>

    <online-content>

      <YouTube enabled="no" refresh="28800" update-at-start="yes" purge-after="604800" racy-content="exclude" format="mp4" hd="no">

        <favorites user="NationalGeographic"/>

        <playlists user="PlayStation"/>

        <uploads user="Google"/>

        <standardfeed feed="most_viewed" time-range="today"/>

        <standardfeed feed="recently_featured" time-range="today"/>

      </YouTube>

    </online-content>

  </import>

  <transcoding enabled="yes">

    <mimetype-profile-mappings>

      <transcode mimetype="audio/ogg" using="audio2pcm"/>

      <transcode mimetype="audio/x-flac" using="audio2pcm"/>

      <transcode mimetype="video/ogg" using="video2mpeg"/>

      <transcode mimetype="video/x-flv" using="video2mpeg"/>

      <transcode mimetype="video/x-matroska" using="video2mpeg"/>

      <transcode mimetype="image/jpeg"  using="resizejpeg"/>

    </mimetype-profile-mappings>

    <profiles>

      <profile name="audio2pcm" enabled="yes" type="external">

        <mimetype>audio/L16</mimetype>

        <accept-url>no</accept-url>

        <first-resource>yes</first-resource>

        <hide-original-resource>yes</hide-original-resource>

        <accept-ogg-theora>no</accept-ogg-theora>

        <sample-frequency>44100</sample-frequency>

        <audio-channels>2</audio-channels>

        <agent command="ffmpeg" arguments="-i %in -acodec pcm_s16be -ab 192k -ar 44100 -ac 2 -f s16be -y %out"/>

        <buffer size="1048576" chunk-size="131072" fill-size="262144"/>

      </profile>

      <profile name="video2mpeg" enabled="yes" type="external">

        <mimetype>video/mpeg</mimetype>

        <accept-url>no</accept-url>

        <first-resource>yes</first-resource>

        <hide-original-resource>yes</hide-original-resource>

        <accept-ogg-theora>yes</accept-ogg-theora>

        <sample-frequency>48000</sample-frequency>

        <audio-channels>2</audio-channels>

        <agent command="ffmpeg" arguments="-i %in -vcodec mpeg2video -b 8192k -r 25 -acodec mp2 -ab 192k -ar 48000 -ac 2 -async 1 -f dvd -threads 4 -y %out"/>

        <buffer size="10485760" chunk-size="262144" fill-size="524288"/>

       </profile>

      <profile name="resizejpeg" enabled="yes" type="external">

        <mimetype>image/jpeg</mimetype>

         <agent command="convert" arguments=" -geometry 25% %in %out"/>

        <first-resource>yes</first-resource>

       <hide-original-resource>yes</hide-original-resource>

       <buffer size="1048576" chunk-size="2072" fill-size="262144"/>

      </profile>

    </profiles>

  </transcoding>

</config>

```

je rencontre aussi un probleme avec le profile video2mpeg:

lorsque je tombe sur un fichier audio en 5.1 (par exemple) j'obtiens:

"Resampling with input channels greater than 2 unsupported."

de la part de ffmpeg, je cherche juste a m'assurer d'avoirdu 48000hz en stéréo (en muxan toutes les autres pistes voir en les supprimant dans le pire des cas)

d'avance merci

----------

## El_Goretto

je ne sais pas.

si j'ai bien compris le mode de fonctionnement d'uPnP et celui de mediatomb (tu m'excuseras si tu es déjà passé par ce point de réflexion), ce n'est pas du tout possible de base, car c'est au client de faire son choix dans les sous-titres & co. Par contre, tu peux introduire de l'intelligence en cas de client déficient (genre une freebox) en passant par du transcoding via un script bash simple. Par contre, ça sous-entend une charge de traitement non négligeable sur le serveur uPnP. C'est déjà ce que tu fais?

Ya pas mal de bons (et moins bons) exemples sur cette page officielle Le bon c'est "Script to perform various transcoding routines", le moins bon c'est celui sur la freebox (les infos techniques sont super intéressantes, mais la réalisation crade).

Bon, je débute en transcoding, donc je suis ton thread avec intérêt.

----------

## Chr0nos

bon tout dabord je vais passer par un fichier .bash pour s'occuper de savoir ce que contien le fichier .mkv (car pour le moment je vais surotout me pencher sur la lecture de ce format)

par contre mon probleme avec mkvinfo: comment je fais pour recup les info que je veux dans la mesure ou plusieures lignes ont le meme debut 

(exemple:

|+ Doc type: matroska

|+ Doc type version: 1

|+ Doc type read version: 1

)

mon but étant de pouvoir faire une liste des pistes audio / soustitres

----------

## Chr0nos

deja une chose m'intrigue:

 *Quote:*   

> 
> 
>         <agent command="ffmpeg" arguments="-i %in -vcodec mpeg2video -b 8192k -r 25 -acodec mp2 -ab 192k -ar 48000 -ac 2 -async 1 -alang fre -f dvd -threads 4 -y %out"/>
> 
> 

 

cette ligne devrais forcer l'usage de la langue "fre" par defaut, hors losque je teste avec un fichier .mkv : la video reste en anglais sur la ps3

voici les info sur le fichier video qui sers a mes tests. (il va de soi que je possede l'original en blueray mais comme je suis bordelique tousa tousa... fragile etc...)

http://pastebin.com/Z1hqWD0Q

----------

## Poussin

Je vais peut-être (probablement) dire une grosse bêtise, mais tu as essayé les différents code de l'ISO 639 pour le français? à savoir: fre fra fr ? (source: http://www.loc.gov/standards/iso639-2/php/code_list.php)

----------

## Chr0nos

j'ai fait mieux que ca: étant donné que ffmpeg est trop "limite" (en mon sens (trop problematique pour les sous titres, bazzard sans nom pour le choix de la police etc))

maintenant j'utilise:

```
      <profile name="video2ps3" enabled="yes" type="external">

        <mimetype>video/mpeg</mimetype>

        <accept-url>no</accept-url>

        <first-resource>yes</first-resource>

        <hide-original-resource>yes</hide-original-resource>

        <accept-ogg-theora>yes</accept-ogg-theora>

        <sample-frequency>48000</sample-frequency>

        <audio-channels>2</audio-channels>

        <agent command="mencoder" arguments="%in -oac lavc -ovc lavc -of mpeg -mc 0 -noskip -lavcopts vcodec=mpeg2video:vbitrate=6000:acodec=ac3:abitrate=448 -vf harddup -alang fre -slang fre -o %out"/>

        <buffer size="10485760" chunk-size="262144" fill-size="524288"/>

       </profile>

```

qui FONCTIONE plutot bien, pourtant petit souci, autant le resultat est au poil ma premiere video mais sur celle ci "les données sont endomagées"

```
StarK / # mkvinfo /mnt/Thor/series/How\ I\ Met\ Your\ Mother/S01/How.I.Met.Your.Mother.S01E01.DVDRiP.XviD-TOPAZ.mkv 

+ EBML head

|+ Doc type: matroska

|+ Doc type version: 2

|+ Doc type read version: 2

+ Segment, size 181774354

|+ Seek head (subentries will be skipped)

|+ EbmlVoid (size: 4027)

|+ Segment information

| + Timecode scale: 1000000

| + Muxing application: libebml v0.7.8 + libmatroska v0.8.1

| + Writing application: mkvmerge v2.9.9 ('Tutu') built on Nov 28 2009 13:45:05

| + Duration: 1323.698s (00:22:03.698)

| + Date: Sun Dec  6 21:21:36 2009 UTC

| + Segment UID: 0xd1 0x80 0x71 0x02 0xb1 0xe0 0xcd 0x76 0xae 0x4e 0x93 0xec 0x99 0xa8 0x76 0x7c

|+ Segment tracks

| + A track

|  + Track number: 1

|  + Track UID: 1100569665

|  + Track type: video

|  + Enabled: 1

|  + Default flag: 1

|  + Forced flag: 0

|  + Lacing flag: 0

|  + MinCache: 1

|  + Timecode scale: 1

|  + Max BlockAddition ID: 0

|  + Codec ID: V_MS/VFW/FOURCC

|  + Codec decode all: 1

|  + CodecPrivate, length 40 (FourCC: XVID, 0x44495658)

|  + Default duration: 41.708ms (23.976 fps for a video track)

|  + Language: und

|  + Video track

|   + Pixel width: 576

|   + Pixel height: 432

|   + Interlaced: 0

|   + Display width: 576

|   + Display height: 432

| + A track

|  + Track number: 2

|  + Track UID: 3375727921

|  + Track type: audio

|  + Enabled: 1

|  + Default flag: 1

|  + Forced flag: 0

|  + Lacing flag: 1

|  + MinCache: 0

|  + Timecode scale: 1

|  + Max BlockAddition ID: 0

|  + Codec ID: A_MPEG/L3

|  + Codec decode all: 1

|  + Default duration: 24.000ms (41.667 fps for a video track)

|  + Language: und

|  + Audio track

|   + Sampling frequency: 48000

|   + Channels: 2

| + A track

|  + Track number: 3

|  + Track UID: 3844547497

|  + Track type: subtitles

|  + Enabled: 1

|  + Default flag: 1

|  + Forced flag: 0

|  + Lacing flag: 0

|  + MinCache: 0

|  + Timecode scale: 1

|  + Max BlockAddition ID: 0

|  + Codec ID: S_TEXT/UTF8

|  + Codec decode all: 1

|  + Language: fre

|+ EbmlVoid (size: 1024)

|+ Cluster

```

----------

## Chr0nos

hum allé je continu le topic (meme si c'est tout seul ca poura surement aider les autres)

coté "formats" la ps3 supporte les suivants selon wikipedia:

- MPEG-1

- MPEG-2

- H.264

- MPEG-4

- DivX

- Xvid

par contre aucune info coté "bitrates" maxi autorisées

je propose donc de faire une liste de formats ou de "profiles" qui passent

pour le moment je passe par du mpeg1 a 6000 kpbs + filtre hardup et scale 720p (pour calmer mon usage cpu rien de +) mais par moments sur certaines video en 1080p : la video se bloque et le son continue, l'usage cpu du pc n'atteind pas les 100% pourtant et j'ai mis 60mo de cache, je songe a passer par un autre format mais je ne sais pas trop le quel, je pencherais bien pour le x264 mais sera il reconu ? (je vois que la console prends du H264) 

la suite apres quelques tests ou quelques info si une âme charitable se manifeste...

----------

## Chr0nos

alors, bonnes nouvelles: j'ai trouvé "LE" profil qui marche bien avec la ps3:

```

<profile name="video2ps3" enabled="yes" type="external">

        <mimetype>video/mpeg</mimetype>

        <accept-url>yes</accept-url>

        <first-resource>yes</first-resource>

        <hide-original-resource>yes</hide-original-resource>

        <accept-ogg-theora>yes</accept-ogg-theora>

        <sample-frequency>48000</sample-frequency>

        <audio-channels>2</audio-channels>

        <agent command="mencoder" arguments="%in -ovc lavc -oac lavc -lavcopts vcodec=mpeg2video:acodec=ac3:abitrate=192:vbitrate=5120:vrc_buf_size=1835:vrc_maxrate=5120:vstrict=0:keyint=15:autoaspect:threads=4 -af volnorm=2,lavcresample=48000:16:1 -srate 48000 -vf pp=al:c,softskip,scale=720:-10,harddup -alang fr -of mpeg -mpegopts format=dvd:tsaf -o %out"/> 

        <buffer size="2097152" chunk-size="262144" fill-size="524288"/>

</profile>

```

et sinon deux profiles pour les encodages video vers la ps3:

```

[PS3]

profile-desc="MPEG4/MP3 encoding"

ovc=lavc=1

oac=lavc=1

lavcopts=vcodec=msmpeg4:acodec=ac3:abitrate=192:vbitrate=4000

af=volnorm=2,lavcresample=48000:16:1

srate=48000

vf=pp=al:c,softskip,scale=720:-10,harddup

alang=fr

[PS3H264]

oac=lavc=yes

ovc=lavc=yes

of=1=mpeg

mc=0

noskip=yes

lavcopts=vcodec=mpeg2video:vbitrate=6000:acodec=ac3:abitrate=448:threads=4

vf=scale=1280:720,harddup

alang=fre,und

```

maintenant jessaire de savoir s'il est possible d'avoir des miniatures sur mes video, avant je le faisai mais depuis que je me suis lancé dans le transcodage plus moyen, quelqun aurait il un /etc/mediatomb/config.xml fonctionel a me montrer pour que je puisse m'en inspirer ?

----------

