Live Streaming Optionen zur Schonung der Bandbreite

  • Ein Anwendungsfall für das live-Plugin ist bei mir, dass ich über VPN TV-Kanäle bzw. Aufnahmen schauen möchte. Damit die limitierte Bandbreite über VPN im Ausland ausreicht, müsste ich die Datenrate reduzieren. Gleichzeitig läuft gerade mein VDR in einer VM und ich habe auch (noch) keine NVIDIA Grafikkarte eingebaut. Folgende Einstellungen waren bisher der beste Kompromiss zwischen Qualität und Bandbreite:


    Code
    ffmpeg -loglevel warning -f mpegts -analyzeduration 1.2M -probesize 5M -i <input> -map 0:v -map 0:a:0 -c:v libx264 -s 1024x768 -b:v 1M -minrate 500k -maxrate 1M -bufsize 2M -crf 23 -tune zerolatency -g 25 -r 25 -c:a aac -ac 2

    Dabei schwankte die benötigte Bandbreite dennoch bis zu knapp 1,8 MBit. Frage: welche Einstellungen benutzt ihr für bandbreitenbeschränkte Verbindungen, insbesondere ohne eine NVIDIA GPU zu benötigen?


    Alternativ könnte ich noch die Intel UHD 630 GPU des Hosts in die VM weiterreichen. Hat jemand Erfahrungen, welche Optimierung damit möglich wäre?

  • Den -g Parameter kannst Du größer setzen, -crf ebenfalls. Beides reduziert die Bandbreite.


    -b erzeugt feste Bitrate, besser mit -crf die Bitrate reduzieren.


    vdr-User-# 755 to_h264 chk_r vdr-transcode github

  • Den -g Parameter kannst Du größer setzen, -crf ebenfalls. Beides reduziert die Bandbreite.

    Der default von -g (keyint) liegt bei 250.

    Sofern das nicht aus irgendwelchen Gründen nötig ist, würde ich die Option gar nicht setzen.

    -b erzeugt feste Bitrate, besser mit -crf die Bitrate reduzieren.

    Des weiteren schließen sich diese Optionen gegenseitig, so viel ich weiß, aus.

    Zumindest ist es nicht sinnvoll beide zu setzen, da dann unklar ist, was passiert.

    Nach der Bechreibung nehme ich aber an, dass mit -crf codiert wird.


    Ich würde auf -crf und -maxbitrate gehen. Siehe auch: FFmpeg H.264 Video Encoding Guide

    Wichtig ist aber zunächst, -crf sinnvoll zu wählen, so dass die Bitrate ungefähr stimmt, sonst klappt das mit nicht gescheit.

    Ein -crf von 23 ist eigentlich schon eher gut, von der Qualität her. Für den Zweck könnte man mal versuchen, höher zu gehen (25 - 27).


    Ehe man mit der -crf zu hoch geht, sollte man aber eher die Auflösung etwas reduzieren, das bringt deutlich bessere Ergebnisse.

    SD upscalen verbietet sich aus dem Grund ohnehin.


    Bei interlaced Ausgangsmaterial (1080i und SD) unbedingt deinterlacen!

    Das spart Bitrate und erhöht gleichzeitig deutlich die Qualität!

    Mit -vf bwdif=mode=0 sollte die Bildfrequenz auch automatisch bei 25fps liegen.


    Sollte es mit der CPU knapp werden, kann man da auch noch versuchen was zu optimieren.



    Dann der Audio-Codec, der wird gerne vergessen:

    Default läuft der AAC-Codec auf 128Kbit/s, da geht auch weniger.

    80Kbit/s sind für meinen Geschmack, bei einer Fernsehsendung, auch o.k..

    Mit gewissen Abstrichen geht auch weniger, man könnte durchaus auch mal 60Kbit/s probieren.

    Der Unterschied klingt zwar nach nichts, aber man gewinnt etwa 5% Bitrate fürs Video.

    Gruss
    SHF


  • Das Plugin streamdev hat über die EXT Schnittstelle (externremux.sh) auch die Möglichkeit Streams zu erzeugen. Vielleicht kannst du dir da was abschauen. Z.B. wie der Stream dann für z.B. DSL 6000 angepasst wird.

    https://github.com/vdr-projects/vdr-plugin-streamdev
    http://www.vdr-wiki.de/wiki/index.php/Streamdev-plugin

    Wohnzimmer: NUC10I3 - Logitech z-5500 - Panasonic 55" TV - Hauppauge Dual DVB-C Stick - Ubuntu 22.04 LTS - yavdr ansible
    Schlafzimmer: NUC10I3 - LG 42" TV - Hauppauge Dual DVB-C Stick - Ubuntu 22.04 LTS - yavdr ansible

    Streamingserver: -im Aufbau-
    diverse Test Clients: -Raspberry Pi + openelec, i3 mit Geforce1030

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!