Vorstellung und Frage

71 views
Skip to first unread message

ViridiCoronam

unread,
Dec 20, 2016, 8:18:31 AM12/20/16
to Deutschsprachige Opencast Community
Ich wünsche einen guten Tag.
Ein paar Kollegen und ich setzen gerade eine Plattform zur Bewertung und Vorschau von Computerspielen um.
Um unsere Videos auf so vielen Plattformen wie möglich zu verteilen benutzen wir nun erstmalig Opencast.

Opencast läuft auf einem Ubuntu-Server als AllinOne Installation. (Nur 3 Leute arbeiten an/mit OC um unser Videomaterial hochzuladen und zu verteilen)

Bisher sind wir bei der Installation den Anweisungen aus dem Admin Guide gefolgt.
Wir haben die Basis-Konfiguration, die Datenbank und den Broker eingerichtet.

Nun haben wir drei Videos (1080p) anscheinend ohne Probleme hochgeladen.
Unter...
 /opt/opencast/data/opencast/archive/mh_default_org/

...befinden sich drei Ordner mit jeweils 3 Unterordnern (0, 1 , 2) und in diesen Unterordnern befinden sich neben einigen Files auch Videodaten in 1080p. 

Wenn wir nun aber in der Admin UI im CMS sind und unter Aufzeichnungen auf das "Auge" klicken um uns die Videos anzusehen haben diese nur eine Auflösung von 360p.

/engage/theodul/ui/core.html?id=d2fg4575-984c-4x5f-8de8-e7b045d8619fe

Unter dem Admin Guide gibt es eine Anleitung zur Nutzung von URL-Parametern, bei uns ändert sich jedoch nichts.
/engage/theodul/ui/core.html?id=2fg4575-984c-4x5f-8de8-e7b045d8619fe&quality=high
/engage/theodul/ui/core.html?id=2fg4575-984c-4x5f-8de8-e7b045d8619fe&quality=low

Nun haben wir erfahren das Opencast per Default in medium (360p) transcodiert.
Wo genau befindet sich die transcodierte Datei ? 

Daraufhin haben wir uns im Admin Guide die Bereiche Encoding und Workflows angesehen.

Unter...
/opt/opencast/etc/encoding

...gibt es viele *.properties Dateien, wir haben uns erstmal die h264 angesehen und dort die Zeilen....

profile.mp4-high.http.name = High Quality Video
profile
.mp4-high.http.input = visual
profile
.mp4-high.http.output = visual
profile
.mp4-high.http.suffix = -high.mp4
profile
.mp4-high.http.mimetype = video/mp4
profile
.mp4-high.http.ffmpeg.command = -i #{in.video.path} -c:v libx264 -filter:v yadif,scale=-2:576 -preset medium -crf 23 -r 25 -profile:v high -level 4.0  -pix_fmt yuv420p -tune film  -movflags faststart -c:a aac -strict -2 -ar 44100 -ab 96k #{out.dir}/#{out.name}#{out.suffix}


profile
.mp4-high-ncast.http.name = High Quality Video
profile
.mp4-high-ncast.http.input = visual
profile
.mp4-high-ncast.http.output = visual
profile
.mp4-high-ncast.http.suffix = -high.mp4
profile
.mp4-high-ncast.http.mimetype = video/mp4
profile
.mp4-high-ncast.http.ffmpeg.command = -i #{in.video.path} -c:v libx264 -filter:v yadif,scale=-2:566 -preset medium -crf 23 -r 25 -profile:v high -level 4.0  -pix_fmt yuv420p -tune film  -movflags faststart -c:a aac -strict -2 -ar 44100 -ab 96k #{out.dir}/#{out.name}#{out.suffix}




profile
.mp4-vga-high.http.name = High Quality VGA Video
profile
.mp4-vga-high.http.input = visual
profile
.mp4-vga-high.http.output = visual
profile
.mp4-vga-high.http.suffix = -vga-high.mp4
profile
.mp4-vga-high.http.mimetype = video/mp4
profile
.mp4-vga-high.http.ffmpeg.command = -i #{in.video.path} -c:v libx264 -preset slower -crf 30 -r 25 -profile:v high -level 4.0  -pix_fmt yuv420p -tune animation -movflags faststart -c:a aac -strict -2 -ar 44100 -ab 96k #{out.dir}/#{out.name}#{out.suffix}


....gefunden.

In der Annahme das wir diese Zeilen für den Workflow verwenden könnten.
Haben wir uns dem Workflow zugewandt.
Unter...
/opt/opencast/etc/workflows
... sind die Workflows (*.xml) zu finden dort öffneten wir die Datei np-partial-publish.xml

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
   
<!-- Encode for publication to Engage                                  -->
   
<!--                                                                   -->
   
<!-- Encode audio and video formats to the distribution formats that   -->
   
<!-- are required by the Engage publication channel.                   -->
   
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->


   
<!-- Encode presenter (camera) to Engage player format -->


   
<operation
     
id="compose"
     
exception-handler-workflow="ng-partial-error"
     
description="Encoding presenter (camera) video to MP4 download">
     
<configurations>
       
<configuration key="source-flavor">presenter/themed</configuration>
       
<configuration key="target-flavor">presenter/delivery</configuration>
       
<configuration key="target-tags">engage-download,engage-streaming</configuration>
       
<configuration key="encoding-profile">mp4-medium.http</configuration>
     
</configurations>
   
</operation>


   
<!-- Encode presentation (vga) to Engage player format -->


   
<operation
     
id="compose"
     
exception-handler-workflow="ng-partial-error"
     
description="Encoding presentation (screen) to MP4 download">
     
<configurations>
       
<configuration key="source-flavor">presentation/themed</configuration>
       
<configuration key="target-flavor">presentation/delivery</configuration>
       
<configuration key="target-tags">engage-download,engage-streaming</configuration>
       
<configuration key="encoding-profile">mp4-vga-medium.http</configuration>
     
</configurations>
   
</operation>


Nun haben wir zwei Fragen.

1.) Ist unsere Annahme korrekt, dass wenn wir aus dem mp4-medium ein mp4-high (auch für vga) machen und die Datei (*.xml) einfach speichern ohne Opencast neu zu starten die neuen Videos ab sofort in 1080p transcodiert werden und unter ...
 /engage/theodul/ui/core.html?id=d2fg4575-984c-4x5f-8de8-e7b045d8619fe
... in 1080p im Player zu sehen sind ?


2.) Wie müssten wir die ng-partial-publish.xml abändern um in einem Zug mehrere Qualitätsstufen (<- 360p, 1080p ->) zu bekommen ? Oder sollten wir dafür gesonderte Workflows erzeugen (z.B die *.xml kopieren und nur die mp4-**** umändern ?)


Mit freundlichem Gruß V.C

Dietmar Zenker

unread,
Dec 20, 2016, 9:08:40 AM12/20/16
to Deutschsprachige Opencast Community
Hi,

zunächst klären wir am besten erstmal ein Missverständnis: das Video, was man unter dem "Auge" zu sehen bekommt, ist lediglich eine Preview in geringer Quali zum Schneiden mit dem Editor. Die finalen Versionen werden erst beim Publizieren erzeugt. Wenn Ihr sowieso nicht schneiden wollt, könnt Ihr auch gleich beim Upload einstellen, dass das hochgeladene Video direkt transkodiert und publiziert wird.

Zu den Fragen: Ja, da könnt Ihr die ng-partial-publish.xml als Vorlage nehme und das Encoding mit dem Medium-Profile entsprechend ersetzen oder erweitern. Wenn Ihr mehrere Qualitäten erzeugen wollt, zwischen denen man später im Player umschalten kann, ist es wichtig, die entsprechend zu taggen, damit der Player diese identifizieren kann. Hier mal ein Beispiel:
    <!-- Encode presenter (camera) to Engage player format (low quality) -->


   
<operation
     
id="compose"
     
exception-handler-workflow="ng-partial-error"

     
description="Encoding presenter (camera) video to MP4 low quality">

     
<configurations>
       
<configuration key="source-flavor">presenter/themed</configuration>
       
<configuration key="target-flavor">presenter/delivery</configuration>

       
<configuration key="target-tags">engage-download,engage-streaming,low-quality</configuration>
       
<configuration key="encoding-profile">mp4-low.http</configuration>
     
</configurations>
   
</operation>


   
<!-- Encode presenter (camera) to Engage player format (medium quality) -->


   
<operation
     
id="compose"
     
exception-handler-workflow="ng-partial-error"

     
description="Encoding presenter (camera) video to MP4 medium quality">

     
<configurations>
       
<configuration key="source-flavor">presenter/themed</configuration>
       
<configuration key="target-flavor">presenter/delivery</configuration>

       
<configuration key="target-tags">engage-download,engage-streaming,medium-quality</configuration>

       
<configuration key="encoding-profile">mp4-medium.http</configuration>
     
</configurations>
   
</operation>


   
<!-- Encode presenter (camera) to Engage player format (standard and default high quality) -->


   
<operation
     
id="compose"
     
exception-handler-workflow="ng-partial-error"

     
description="Encoding presenter (camera) video to MP4 high quality">

     
<configurations>
       
<configuration key="source-flavor">presenter/themed</configuration>
       
<configuration key="target-flavor">presenter/delivery</configuration>

       
<configuration key="target-tags">engage-download,engage-streaming,high-quality</configuration>
       
<configuration key="encoding-profile">mp4-high.http</configuration>
     
</configurations>
   
</operation>


Die Encoding-Profiles könnte Ihr entsprechend Euren Vorstellungen ändern, z.B. dass bei höchster Quali nicht herunterskaliert wird und die Datei Full HD bleibt, oder mit den Qualitäts-relevanten Optionen wie CRF und Bitrate herumtesten.
Alternativ könnt Ihr auch das Parallel-Encoding mit dem Encoding-Profile in engage-movies-parallel.properties verwenden, was den Vorteil hat, das dies in einer Workflow-Operation durchgeführt werden kann, und dass das Encoden etwas schneller ist.

Viele Grüße,
Dietmar



 

Rüdiger Rolf

unread,
Dec 20, 2016, 9:37:15 AM12/20/16
to anwe...@opencast.org
Bleibt noch zu erängzen: wenn ihr einen Rechner mit vielen CPU-Kernen habt gibt es auch die Operation "encode" statt "compose" mit der mehrere Qualitäten auf einmal erzeugt werden können, statt nacheinander. Das hat geringe Geschwindigkeitsvorteile bei CPUs mit 4 Kernen, da man da das Video nur einmal lesen dekodieren muss. Wenn man mehr als 4 Kerne hat, nutzt x264 die aber nicht, so dass man die zusätzlichen Kerne dann für weitere Encodings nutzen würde.

Es gibt schon das Endoding Profil in etc/encoding/engage-movies-parallel.properties

profile.parallel.http.name = parallel video encoding
profile.parallel.http.input = visual
profile.parallel.http.output = visual
profile.parallel.http.suffix.low-quality = -low.mp4
profile.parallel.http.suffix.medium-quality = -medium.mp4
profile.parallel.http.suffix.high-quality = -high.mp4
profile.parallel.http.suffix.hd-quality = -hd.mp4
profile.parallel.http.ffmpeg.command = -i #{in.video.path} \
  -c:v libx264 -filter:v yadif,scale=-2:288 -preset slower -crf 28 -r 25 -pix_fmt yuv420p -profile:v baseline -tune film -movflags faststart \
  -c:a aac -ar 22050 -ac 1 -ab 32k #{out.dir}/#{out.name}#{out.suffix.low-quality} \
  -c:v libx264 -filter:v yadif,scale=-2:360 -preset slower -crf 25 -r 25 -pix_fmt yuv420p -profile:v baseline -tune film -movflags faststart \
  -c:a aac -ar 22050 -ac 1 -ab 48k #{out.dir}/#{out.name}#{out.suffix.medium-quality} \
  -c:v libx264 -filter:v yadif,scale=-2: 576 -preset medium -crf 23 -r 25 -pix_fmt yuv420p -tune film -movflags faststart \
  -c:a aac -ar 44100 -ab 96k #{out.dir}/#{out.name}#{out.suffix.high-quality} \
  -c:v libx264 -filter:v yadif,scale=-2:720 -preset medium -crf 23 -r 25 -pix_fmt yuv420p -tune film -movflags faststart \
  -c:a aac -ar 44100 -ab 96k #{out.dir}/#{out.name}#{out.suffix.hd-quality}

An den fett markierten Stellen seht ihr die Auflösung die momentan 288p, 360p, 576p und 720p wären. Das könnt ihr beliebig korrieren aus Qualitäten die euch gefallen. Die Framerate -r sollte immer gleich sein. Mit -crf kann man die Qualität noch korrigieren (23 ist normal).

In etc/workflows/ng-partial-publish.xml  dann einfach compose durch encode ersetzen mit dem passenden Profil:
    <!-- Encode presenter (camera) to Engage player format -->

    <operation
      id="encode"
      exception-handler-workflow="ng-partial-error"
      description="Encoding presenter (camera) video to MP4 download">

      <configurations>
        <configuration key="source-flavor">presenter/themed</configuration>
        <configuration key="target-flavor">presenter/delivery</configuration>
        <configuration key="target-tags">engage-download,engage-streaming</configuration>
        <configuration key="encoding-profile">parallel.http</configuration>
      </configurations>
    </operation>

    <!-- Encode presentation (vga) to Engage player format -->

    <operation
      id="encode"

      exception-handler-workflow="ng-partial-error"
      description="Encoding presentation (screen) to MP4 download">
      <configurations>
        <configuration key="source-flavor">presentation/themed</configuration>
        <configuration key="target-flavor">presentation/delivery</configuration>
        <configuration key="target-tags">engage-download,engage-streaming</configuration>
        <configuration key="encoding-profile">parallel.http</configuration>
      </configurations>
    </operation>


Gruß
Rüdiger


Am 20.12.16 um 15:08 schrieb Dietmar Zenker:
--
You received this message because you are subscribed to the Google Groups "Deutschsprachige Opencast Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email to anwender+u...@opencast.org.

ViridiCoronam

unread,
Dec 20, 2016, 9:42:28 AM12/20/16
to Deutschsprachige Opencast Community
Danke für die schnelle und hilfreiche Antwort, 
nun haben sich leider noch ein paar Fragen ergeben.

also habe ich das richtig verstanden unsere url z.B.
/engage/theodul/ui/core.html?id=d223a325-454c-4e5f-6de9-e7b08d88914e
...zeigt einfach ein Preview und nicht das orginal(transcodierte)-Video im Player ?
Wenn es nur eine Preview ist wie komme ich an die transkodiereten Videos ?

Wir haben bis jetzt ein wenig Schwierigkeiten unsere Videos im Filesystem zu finden und zuzuordnen.

/data/opencast/

In welchem Ordner finden wir die Quelldateien (Hochgeladene Videos) ?
In welchem Ordner befinden sich die transkodierten Videos ?

Mit freundlichem Gruß V.C.

Rüdiger Rolf

unread,
Dec 20, 2016, 9:57:01 AM12/20/16
to anwe...@opencast.org
Nein, der Theodul Player zeigt das richtige Video. Standardmäßig sind unsere Encodings noch auf einem "historischen" Wert, der zugegeben heute nicht mehr ganz Zeitgemäß ist. Deswegen ist es dringend geraten die Auflösungen anzupassen.

In data/opencast solltet ihr einen Ordner archive und einen Ordner downloads finden. Ggf ist da auch noch ein Ordner streams, sofern ein Streamingserver konfiguriert wurde.

Die Quelldaten finden sich in archive/mh_default_org/d223a325-454c-4e5f-6de9-e7b08d88914e
Hier findest du Ordner 0, 1, ... normalerweise sind im Ordner mit der höchsten Nummer alle aktuellen Daten und in denen mit den niedrigeren Nummern Zwischenstände. Keine Sorge auch wenn der Befehl "du -h" da moglicherweise viel Speicherplatz ausgibt: sofern die Dateien nicht verändert wurden, sind das nur Hardlinks, die keinen Platz verbrauchen.

Dann gibt es den Ordner downloads/mh_default_org/engage-player/d223a325-454c-4e5f-6de9-e7b08d88914e
Die Daten liegen hier jeweils noch in einem eigenen Ordner für jede Datei.

Ich hoffe das hilf erst einmal weiter.

Gruß
Rüdiger



Am 20.12.16 um 15:42 schrieb ViridiCoronam:

ViridiCoronam

unread,
Dec 20, 2016, 10:18:42 AM12/20/16
to Deutschsprachige Opencast Community
Nach der sehr hilfreichen Antwort von Herrn Zenker,
habe ich nun ein Frage zu den "Tags"...
high-quality
... könnte ich das wie folgt weiterführen... 
hd-quality
4k-quality
...oder gibt es eine vordefinierte Liste an Tags ?

Und dann noch einige Fragen zu ffmpeg und den ecoding profiles.

Wenn wir nun die vordefinierten low, medium, high und hd nehmen.
Wie würden die Ausgaben (transcodierten Videos) sich bei 720p und 1080p verhalten. (ich entschuldige mich hier, falls diese Fragen komisch klingen doch von uns ist leider keiner Informatiker und das Wissen beruht nur auf Selbstversuchen).

720p -> low -> ???p
720p -> medium -> ???p
720p -> high -> ???p
720p -> hd -> ???p

1080p -> low -> ???p
1080p -> medium -> ???p
1080p -> high -> ???p
1080p -> hd -> ???p

Wir würde außerdem gerne ein Encode-Profile anlegen um bis 1080p zu transcodieren.
Hier ist unser erster Versuch. Wir haben uns einfach sehr stark (copy paste) an die h264.properties orientiert.

// hier hat leider die Code-Einbettung nicht funktioniert. 
 
profile.mp4-fullhd.http.input = visual
profile.mp4-fullhd.http.output = visual
profile.mp4-fullhd.http.suffix = -fullhd.mp4
profile.mp4-fullhd.http.mimetype = video/mp4
profile.mp4-fullhd.http.ffmpeg.command = -i #{in.video.path} -c:v libx264 -filter:v yadif,scale=-2:1080 -preset medium -crf 23 -r 25 -profile:v high -level 4.0  -pix_fmt yuv420p -tune film  -movflags faststart -c:a aac -strict -2 -ar 44100 -ab 128k #{out.dir}/#{out.name}#{out.suffix}

profile.mp4-vga-fullhd.http.input = visual
profile.mp4-vga-fullhd.http.output = visual
profile.mp4-vga-fullhd.http.suffix = -vga-fullhd.mp4
profile.mp4-vga-fullhd.http.mimetype = video/mp4
profile.mp4-vga-fullhd.http.ffmpeg.command = -i #{in.video.path} -c:v libx264 -preset slower -crf 30 -r 25 -profile:v high -level 4.0  -pix_fmt yuv420p -tune animation -movflags faststart -c:a aac -strict -2 -ar 44100 -ab 96k #{out.dir}/#{out.name}#{out.suffix}

Ich denke das unser ffmpeg.command falsch sein könnte, leider hat keiner von uns damit Erfahrung.
Ich bin schon jetzt sehr dankbar für die Hilfe.

Mit freundlichem Gruß V.C.


ViridiCoronam

unread,
Dec 20, 2016, 10:24:01 AM12/20/16
to Deutschsprachige Opencast Community
Danke für eure Antworten, ich war leider zu langsam mit dem schreiben so habt ihr schon fast alle fragen die aufkamen beantwortet.

Vielen lieben Dank.
Mit freundlichem Gruß V.C. 

Rüdiger Rolf

unread,
Dec 21, 2016, 5:35:03 AM12/21/16
to anwe...@opencast.org
Die *-quality Tags können frei vergeben werden. Im Player wird dann das -quality weg geschnitten und der vordere Teil als Auswahl für das Dropdown verwendet. Sofern man high, medium, low nimmt werden die Tags auch noch übersetzt.

Eine kleine Einschränkung gibt es: es wird Medium am Start-Qualität geladen. Sofern es kein Medium gibt, wird die erste Qualität genommen, die im Datensatz steht, was zufällig sein kann. Und es steht dann leider auch noch immer Medium in der Qualitäts-Auswahl.

Es können auch beliebig viele oder wenige Qualitätststufen erzeugt werden. Ihr seid nicht an eine feste Anzahl gebunden.

Euere ffmpeg Optionen sehen richtig aus und in meinem Testlauf hatten die auch funktioniert. Hattet ihr mal in den Opencast Logs geschaut, welcher Fehler da auftaucht?

Generell zu euerem Aufruf eine kleine Erklärung:
-c:v libx264 Codec-Eintellung auf x264
-filter:v yadif,scale=-2:1080 Filtern des Videos: yadif kann weg wenn ihr eine HD-Kamera habt, das ist der de-interlacer für SD-Videos. Bei scale sorgt das -2 für das proportionale skallieren mit geraden Auflösungen, da x264 die braucht.
-preset medium Geschwindigkeit/Qualität von x264. Je schneller je größer und schlechter die Dateien.
-crf 23 Die Videogröße ist bei CRF abhängig von der gewünschten Qualität. Alternativ kann man auch eine feste Bitrate mit -b:v einstellen.
-r 25 Bildwiederholrate 25 bei PAL. Bei Spieleaufzeichnungen könnte auch 30 bzw. 60 die bessere Wahl sein. Muss aber bei beiden Videos gleich sein, sonst spielen die nicht mehr synchron ab.
-profile:v high Einstellung für x264 über die Komplexität des Codecs. Früher hatten einfachere Geräte wie Smartphones nur baseline unterstützt. Heutzutage sollten alle aktuellen Geräte mit high klarkommen.
-level 4.0  Verfeinerung der Profile high.
-pix_fmt yuv420p Beschränkung des Farbraums, für Apple Geräte notwendig.
-tune film  Codec Feintuning. Hier für Film gibt auch Einstellungen für Präsentationen, Animationen, Schwarz-Weiß, etc.
-movflags faststart Dringend notwendig, weil hiermit das Video während des Ladens schon abgespielt werden kann. Ohne diese Option muss das Video erst komplett geladen werden. Das "Inhaltsverzeichnis" wird hier an den Anfang des Videos kopiert, statt wie üblich ans Ende.
-c:a aac Audiocodec. In diesem Fall der mit FFMEG mitgelieferte. Es gibt auch noch etliche andere AAC Varianten. Wahlweise kann man auch MP3 probieren.
-strict -2 wenn man nicht eine recht aktuelle FFMPEG version nutzt notwendig, um den aac codec nutzen zu können, da dieser lange nur als "Experimentell" eingebaut war
-ar 44100 Frequenzspektrum für das Audio.
-ab 128k Bitrate für das Audio. AAC liefert ab 64k eigentlich schon recht gute Ergbnisse.

Ihr könnt euere Kommandozeilen auch direkt in euerem Terminal mit ffmpeg testen. Dann müsst ihr aber die Parameter von -filter:v in Anführungszeichen setzen (-filter:v  "scale=-2:1080"). In der Config-Datei dürfen die " aber nicht auftauchen!

Gruß
Rüdiger

Am 20.12.16 um 16:18 schrieb ViridiCoronam:
Reply all
Reply to author
Forward
0 new messages