Jump to content

Transcoding in höheren Auflösung/Datenraten


Svensationell

Recommended Posts

Svensationell

Hallo,

ist es möglich im Media Server höhere Auflösungen und Datenraten beim Transcodieren einzustellen. 
ich würde gerne das TV signal quasi unkomprimiert als .ts Stream bekommen. 
 

Wenn ich die Datei ffmpegprefs.ini abändere ändert sich scheinbar nichts an der Bildqualität/Auflösung/Datenrate.  
das war bisher meine einzige Idee, ob das der richtige Ansatz ist weiß ich nicht :)

 

Grüße Sven

Link to post
Griga
vor 35 Minuten schrieb Svensationell:

ich würde gerne das TV signal quasi unkomprimiert als .ts Stream bekommen. 

 

Wieso nimmst du nicht die Originalstreams? Siehe z.B. Webinterface -> Links-Seite -> HTTP Senderliste (originale Streams). Das liefert dir die bestmögliche Auflösung mit der originalen Datenrate.

 

Transkodieren lohnt sich nur, wenn du in ein anderes Format als TS umsetzen oder die Datenrate wegen beschränkter Bandbreite der Netzwerkverbindung senken musst.

 

Link to post
Svensationell

Ich würde gerne das TV Signal über die Nvidia Shield 2019 empfangen und schauen was der AI Upscaler der shield mit dem Signal meines Kabelanbieters so anstellt :) ist eine Spielerei, ist es irgendwie möglich? 

Ich habe als Option nur 1280x720 mit 3600kbits zu wählen, zumindest steht nicht mehr in der INI drin. Full HD Auflösung und Datenraten z.b auf 10000kbits würde schon reichen. 
 

bisher habe ich es auch nicht geschafft den Stream z.b als Hevc zu konvertieren. 
 

mir geht es nicht um datenersparnis, viel Spielerei.

 

das durchgeschliefene TV Signal gibt über das Kodi Plugin auch kein HDR wieder, warum auch immer. 
 

Gruß

Link to post
Griga
vor 19 Stunden schrieb Svensationell:

Wenn ich die Datei ffmpegprefs.ini abändere ändert sich scheinbar nichts an der Bildqualität/Auflösung/Datenrate.  

 

Da bist du im Prinzip schon an der richtigen Stelle, vorausgesetzt der Pfad ist C:\Program Files (x86)\DVBViewer\config\ffmpegprefs.ini.

 

vor 18 Stunden schrieb Svensationell:

Full HD Auflösung und Datenraten z.b auf 10000kbits würde schon reichen. 

 

Da musst du dich halt etwas mit den FFmpeg-Parametern befassen...

 

vor 18 Stunden schrieb Svensationell:

bisher habe ich es auch nicht geschafft den Stream z.b als Hevc zu konvertieren. 

 

Wenn der DMS nach HEVC transkodieren soll, macht er einfach folgendes mit der Kommandozeile:

 

        FCommand := StringReplace(FCommand, 'libx264', 'libx265', [rfReplaceAll, rfIgnoreCase]);
        FCommand := StringReplace(FCommand, '-vprofile main ', '', [rfReplaceAll, rfIgnoreCase]);
        FCommand := StringReplace(FCommand, '-vprofile baseline ', '', [rfReplaceAll, rfIgnoreCase]);
        FCommand := StringReplace(FCommand, '-level 30 ', '', [rfReplaceAll, rfIgnoreCase]);
        FCommand := StringReplace(FCommand, '-tune film ', '', [rfReplaceAll, rfIgnoreCase]);

 

D.h. er ersetzt libx264 durch libx265 und wirft vier H.264-spezifische Kommandos raus. Einstellen kann man HEVC als Videoformat in den Experten-Einstellungen des Stream-Setup-Dialogs (z.B. nach Links -> HTTP Senderliste (transkodierte Streams).

 

Link to post
Svensationell

also ist mein Vorhaben an sich nicht unmöglich? :)

Ich habe in den Weiten des Internets gelesen, ob es richtig ist weiß ich nicht, dass nicht über die GPU transcodiert wird - sondern über die CPU? Ich habe eine. Ryzen 3600, der unterstützt AVX2 usw, hat aber keine interne Grafikeinheit. Dann müsste eine Befehlszeile irgendwie auf die GPU  abgeändert werden... stimmt das?

 

hier der Auszug 

 

To get full HW transcode on NVIDIA GPU, I use two separate lines, one is for H264 sourse dvb TSstream, second is for MPEG2 source dvb TSstream:

[TS H264 HD 3600 kbit]
Cmd=-analyzeduration {analyzeduration} {offset} {realtime} -hwaccel cuvid -c:v h264_cuvid -dent 2 -drop_second_field 1 -i "{infile}" -f mpegts -pat_period 0.2 -c:v h264_nvenc -bufsize 6400k -maxrate 3200k -rc vbr_hq -cq 1 -g 50 {framerate} -map 0:v:0 -map 0:a:0 -preset slow -vprofile high -level 30 -acodec libmp3lame -ab 128k -ar 44100 -ac 2 -async 1 -y "{outfile}"
maxWidth=1280
maxHeight=720
MimeType=video/mpeg
Ext=.ts
Link to post
Svensationell

Jetzt habe ich was neues „herausgefunden“ warum auch immer nimmt in kodi der DVBViewer Client höchstens nur die transcodierung TS MID 1200kbit. 
ich habe dann versucht nur das TS MID Profil zu ändern, sobald ich hier was ändere, z.b. den Text von TS HD kopiere und einfüge sowie den PC Neustarte geht der Client auf den nächsten kleineren Stream, auf TS Low. 
 

Ersetze ich alle TS Profile mit den Daten von TS HD wird kein Stream gestartet. 
 

Wo liegt den hier das Problem? Die Software ist nicht gerade günstig und es gibt keine einfache Möglichkeit selbst zu bestimmen wie transcodiert werden soll. 
Das habe ich mir einfacher vorgestellt....

 

 Grüße 

Link to post
Griga

Könnte es sein, dass du den Media Server Basic installiert hast? Der erlaubt beim Transkodieren keine höheren Auflösungen als 640 x 360.

 

Wenn du die Vollversion des DVBViewer Media Servers erworben hast, musst du sie aus der Sektion "Payed Additions" des Downloadbereichs herunterladen und installieren.

 

Link to post
Svensationell

Ich habe die Vollversion und im Keytool steht auch der richtige key. 
mich weiß nicht mehr weiter, es wird immer nur mit 640x360 gestreamt.

 

gibt es noch eine Möglichkeit zu erkennen ob die richtige Version installiert ist? Ich habe Media Server sicherheitshalber nochmal bei Paid additions heruntergeladen und installiert 

 

Grüße 

Link to post
Griga
vor 13 Stunden schrieb Svensationell:

warum auch immer nimmt in kodi der DVBViewer Client höchstens nur die transcodierung TS MID 1200kbit. 

 

Mit der Wiedergabe eines transkodierten Streams in Kodi habe ich mich noch nie befasst, aber es jetzt mal mit WebM als Format probiert. Du hast recht. Was anderes als 640 x360 kommt dabei nicht herum. Es liegt daran, dass das DVBViewer Add-On bei der Anforderung nur das Format und die Sender-ID angibt, sonst nichts - ist auch logisch, denn mehr kann man in dem Add-On nicht konfigurieren.

 

Der DMS nimmt dann für die anderen Parameter den Default. Das ist bei den Presets das mit der 640x360-Auflösung, oder, falls nicht verfügbar, das mit der nächstniedrigeren Auflösung. Das macht er so, weil es bei Transkodierung häufig auf eine niedrige Datenrate ankommt, insbesondere bei einem Upload ins Internet mit sehr beschränkter Bandbreite.

 

Nachdem ich versuchsweise alle WebM-Presets außer WebM HD aus der ffmpegprefs.ini rausgeworfen hatte, tat sich in Kodi beim TV überhaupt nichts mehr, und im svcdebug.log fand sich nur die lakonische Meldung "invalid preset", weil der DMS auf seinem Default bestand, den es nicht mehr gab. Das ist nicht so glücklich gelöst. Der DMS sollte in dem Fall besser das nächstbeste Preset wählen. Das habe ich jetzt entsprechend geändert. Danach war dann in Kodi die (für WebM einzig vorhandene) HD-Auflösung zu sehen. Im nächsten DMS-Beta-Upload oder Release wird das so zur Verfügung stehen.

 

Du kannst dein Ziel trotzdem erreichen, musst dafür aber anders vorgehen: Auf dem PC, wo sich Kodi befindet, Webinterface -> Links -> HTTP Senderliste (transkodierte Streams) ausführen. Es erscheint der Stream Setup-Dialog. Dort kannst du aus dem vollen schöpfen, also an allerlei Parametern drehen und auch selbst in der ffmpegprefs.ini hinzugefügte Presets auswählen. Als Ergebnis erhälst du eine Senderliste als M3U-Playliste - beachte dabei, dass Webinterface ->  Konfiguration -> In der Senderliste anzeigen auf die Auswahl der Sender Einfluss hat.

 

Die M3U-Liste kannst du in Kodi laden (z.B. in der Abteilung "Videos"), die Einträge anwählen und wiedergeben. Das DVBViewer Add-On bleibt dabei außen vor.

 

Link to post
Svensationell

Danke für die Mühe, Ich bin gerade nicht daheim, wenn ich das jetzt richtig Verstehe soll ich die ffmpegpres.ini ändern und mir ein Profil erstellen bzw abändern sodass ich eine FullHD Auflösung mit hoher Datenrate habe.

Dieses im Webinterface anwählen und die m3u Datei mir erstellen und diese in Kodi als m3u Playlist einfügen? Das wäre zwar ohne EPG aber zumindest würde dies mich ein Stück weiterbringen, EPG wäre dann der Bonus - daran wird es in Zukünftigen Versionen eine Lösung geben, wenn ich Sie richtig Verstanden habe?! :) 

 

Danke vorneweg schon einmal, werde es heute Abend testen und Morgen eine Rückmeldung geben.

 

Link to post
Griga

Der EPG wird bei Transkodierung grundsätzlich nicht im Stream übertragen, auch in Zukunft nicht. Das Add-On holt sich den EPG vom Server separat über dessen API. Vorstellen könnte ich mir, dass sich sowas auch mit dem PVR IPTV Simple Client für Kodi einrichten lässt, der M3U-Listen verarbeitet, aber ich bin in der Materie nicht drin und müsste das erst lang und breit recherchieren... der DMS kann jedenfalls optional EPG IDs in den von ihm erzeugten M3Us ergänzen, die sich auf exportierte EPG-Daten im XMLTV-Format beziehen.

 

Eine andere Möglichkeit: Im Kodi-Forum für das DVBViewer Add-On deine Wünsche hinsichtlich Transkodierung äußern...

 

Link to post
Svensationell

Guten Abend,

 

haben Sie tatsächlich einen FullHD (1920x1080) Stream erhalten oder läuft der Stream mit 1280x720?

 

in keiner Konstellation habe ich es geschafft das der FullHD Stream läuft, aber wenigstens 720p. Das ändern der Datenrate hat scheinbar auch nie eine Auswirkung. 

Link to post
Griga
vor 9 Stunden schrieb Svensationell:

haben Sie tatsächlich einen FullHD (1920x1080) Stream erhalten oder läuft der Stream mit 1280x720?

 

Mit dem letzteren. Ich habe ja anders als du keine wahnwitzigen Pläne außerhalb aller normalen (und sinnvollen) Nutzungsszenarien :)

 

Die Auflösung wird durch zwei Faktoren begrenzt: Die Parameter maxWidth und maxHeight in der ffmpegprefs.ini und die (Quell-)Auflösung des Inputs. Der DMS veranlasst FFmpeg, von den Werten den jeweils kleineren zu nehmen. D.h. wenn du das HD Preset nimmst und einen Full HD Stream mit 1920 x 1080 transkodierst, erhälst du einen Output mit 1280 x 720 (wegen maxWidth und maxHeight). Wenn du einen SD Stream (720 x 576) mit dem HD Preset transkodierst, erhälst du 720 x 404. Die vertikale Auflösung weicht hier ab, weil der DMS FFmpeg standardmäßig einen Output mit quadratischen Pixeln erzeugen lässt, also einem Pixel-Seitenverhältnis von 1:1, weil manche Clients das Bild sonst verzerrt darstellen.

 

Kurz gesagt, wenn du das HD Preset auf einen SD-Stream loslässt, erhälst du weiterhin SD-Auflösung. Nur die Datenrate ist dann höher als mit dem für SD Output vorgesehenen High-Preset. Der DMS verhindert bei Verwendung der Standard-Presets auf jeden Fall das Hochskalieren von Video bei der Transkodierung, weil das normalerweise sinnlos ist.

 

Außerdem ist das, was in der ffmpegprefs.ini steht, nicht das, was FFmepg zu sehen bekommt. Alle Teile in geschweiften Klammern sind Platzhalter, für die der DMS etwas einsetzt, z.B. bei scale={scalex}:{scaley}, das die Output-Auflösung bestimmt. Wenn du sehen willst, welche Kommandozeile FFmpeg wirklich erhält, musst du in das svcdebug.log im Konfigurationsordner schauen. Da findet sich dann sowas:

 

-analyzeduration 1500k -i "http://127.0.0.1:7522/upnp/channelstream/transcode/2359890934581587402%7CDas%20Erste.ts" -f mpegts -mpegts_original_network_id 1 -mpegts_transport_stream_id 1101 -mpegts_service_id 28106 -mpegts_service_type 1 -metadata service_name="Das Erste" -pat_period 0.2 -vcodec libx264 -bufsize 3200k -maxrate 1600k -crf 22 -g 50 -r 25.0 -map 0:v:0 -map 0:a:0? -vf "yadif=0:-1:1, scale=min(720\, trunc(iw/2)*2):trunc((ow/dar)/2)*2" -preset superfast -tune film -vprofile main -level 30 -acodec libmp3lame -ab 96k -ac 2 -async 1 -y "\\.\pipe\Output{15A1E012-E1E9-477B-B4DB-F74C185C3294}"

 

und insbesondere

 

scale=min(720\, trunc(iw/2)*2):trunc((ow/dar)/2)*2

 

Damit gibt der DMS einen Rechenausdruck vor, mit dem FFmpeg die Output-Auflösung ermittelt. 720 ist dabei maxWidth und iw die Breite des Inputs in Pixeln. Will man FFmpeg auf Full HD Output festnageln, muss man scale=1920:1080 verwenden. Das müsstest du also in deinem Spezial-Preset "hardcoden", d.h. die Platzhalter {scalex}:{scaley} durch konkrete Werte ersetzen.

 

Für die Output-Bitrate musst du dich mit den Parametern für den x264-Encoder befassen. Mehr dazu hier. Die Standard-Presets in der ffmpegprefs.ini verwenden für die Steuerung die Parameter -bufsize, -maxrate und -crf. Aber das klamüser ich jetzt nicht mehr für dich auseinander...

 

Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...