Probleme mit FFMPEG und RTMP unter Ubuntu 24.02

Ich schicke meinen Stream mit 12000 an den Server, das bekommt dann YouTube weitergeleitet.
Ist ja die Empfehlung von YouTube.

Twitch aktuell nur 6000.
Ist ja offiziell so, aber 8000 wird inoffiziell unterstützt.
Wenn des mit SRS klappt, gehe ich auf 7500 hoch für Twitch.
 
Zuletzt bearbeitet:
Hat alles super geklappt, Vielen Dank!! :D
 
  • Gefällt mir
Reaktionen: jb_alvarado
Eine Frage hätte ich noch:

Kann SRS auch AV1 oder HEVC annehmen?
Und daraus dann H264 machen?
 
Huhu, hätte da noch eine Frage zu vfilter und crop.
Evtl verstehst du, was ich falsch mache?

Ich würde gerne einen Hochkant Ausschlitt haben aus dem 1080p Stream.
Egal, wie ich das mache, der nutzt crop nicht.

1722279633058.png
 
Es wäre ein bisschen praktischer, wenn du die Config kopierst und in einen Codeblock hier einfügst, dann könnte man nämlich deine Einstellungen wieder kopieren :).

Ich denke es sollte gehen, wenn du f:v mit filter_complex ersetzt, also:


Code:
vfilter {
    v                 error;
    filter_complex    crop=607:1080:420:0;
}
 
Ach, klar, steht ja schon oben "vfilter".....
Ja, das funktioniert so. :)

So, beide Crop funktionieren und werden skaliert.
Bekomme nur "MAIN" und "FACE" nicht übereinander.
Habe in Google gesucht und der ffmpeg startet so nicht.

Code:
engine youtube-short2 {
    enabled on;
    iformat live_flv;
    vfilter {
        v error;
        filter_complex [0:v]crop=1050:1080:435:0,scale=1080:1112[main];[0:v]crop=593:444:1327:636,scale=1080x808[face];[main][face]vstack[v];
    }

    vcodec h264_qsv;
    vprofile high;
    vpreset medium;
    vthreads 0;
     vfps 60;
    vwidth 1080;
    vheight 1920;
    vparams {
        tune zerolatency;
        bufsize 3300k;
        b:v 10000k;
        minrate 10000k;
        maxrate 10000k;
        g 120;
    }

    acodec copy;
    oformat flv;
    output rtmp://a.rtmp.youtube.com/live2/0000000000;
}
 
Solche Sachen am besten erst mal im Terminal direkt mit ffmpeg testen, dann kommt man besser drauf.

Ich denke es fehlt lediglich das korrekte mapping:

Code:
vfilter {
    v error;
    filter_complex [0:v]crop=1050:1080:435:0,scale=1080:1112[main];[0:v]crop=593:444:1327:636,scale=1080x808[face];[main][face]vstack[v];
    map [v];
    map 0:a;
}

Zum Testen:

Code:
ffmpeg -re -i video.mp4 -filter_complex "[0:v]crop=1050:1080:435:0,scale=1080:1112[main];[0:v]crop=593:444:1327:636,scale=1080x808[face];[main][face]vstack[v]" -map "[v]" -map "0:a" -f nut -c:v rawvideo - | ffplay -loglevel warning -vf setpts=0 -

Übrigens: vstack gibt es auch als QSV Version, also Hardware basiert, und in neueren ffmpeg Versionen gibt es auch scale_qsv. Kann nur etwas umständlich sein, wenn man HW und SW filter mischt. Denke aber, die CPU sollte auch stark genug sein um das filtering zu bewältigen.
 
Zuletzt bearbeitet:
Ok, hab ein 3 Minuten Video auf den Server geladen und das versucht zu testen.
Der hat Probleme mit dem Audio, rödelt aber vor sich hin.
(Zumindest verstehe ich das mit der Meldung)

Und _qsv bei scale geht nicht.
Wenn ich nur crop + scale mache, was geht und dann auf _qsv ändere, dann geht es nicht.

jb_alvarado schrieb:
Ok, hatte mich schon gewundert, da die Auslastung beim testen der einzelnen crop hoch ging.



Code:
Failed to initialize a hardware accelerated renderer: Couldn't find matching render driver
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'Replay2024-07-2818-50-09.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf61.1.100
  Duration: 00:02:59.83, start: 0.000000, bitrate: 46593 kb/s
  Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 2560x1440 [SAR 1:1 DAR 16:9], 44958 kb/s, 60 fps, 60 tbr, 90k tbn (default)
    Metadata:
      handler_name    : VideoHandler
      vendor_id       : [0][0][0][0]
  Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 265 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
      vendor_id       : [0][0][0][0]
  Stream #0:2[0x3](und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 265 kb/s
    Metadata:
      handler_name    : SoundHandler
      vendor_id       : [0][0][0][0]
  Stream #0:3[0x4](und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 265 kb/s
    Metadata:
      handler_name    : SoundHandler
      vendor_id       : [0][0][0][0]
  Stream #0:4[0x5](und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 265 kb/s
    Metadata:
      handler_name    : SoundHandler
      vendor_id       : [0][0][0][0]
  Stream #0:5[0x6](und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 265 kb/s
    Metadata:
      handler_name    : SoundHandler
      vendor_id       : [0][0][0][0]
  Stream #0:6[0x7](und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 265 kb/s
    Metadata:
      handler_name    : SoundHandler
      vendor_id       : [0][0][0][0]
Stream mapping:
  Stream #0:0 (h264) -> crop:default (graph 0)
  Stream #0:0 (h264) -> crop:default (graph 0)
  vstack:default (graph 0) -> Stream #0:0 (rawvideo)
  Stream #0:1 -> #0:1 (aac (native) -> vorbis (libvorbis))
  Stream #0:2 -> #0:2 (aac (native) -> vorbis (libvorbis))
  Stream #0:3 -> #0:3 (aac (native) -> vorbis (libvorbis))
  Stream #0:4 -> #0:4 (aac (native) -> vorbis (libvorbis))
  Stream #0:5 -> #0:5 (aac (native) -> vorbis (libvorbis))
  Stream #0:6 -> #0:6 (aac (native) -> vorbis (libvorbis))
Press [q] to stop, [?] for help
Output #0, nut, to 'pipe:':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf60.16.100
  Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p(progressive), 1080x1920 [SAR 973:972 DAR 973:1728], q=2-31, 1492992 kb/s, 60 fps, 61440 tbn
    Metadata:
      encoder         : Lavc60.31.102 rawvideo
  Stream #0:1: Audio: vorbis (oV[0][0] / 0x566F), 48000 Hz, stereo, fltp (default)
    Metadata:
      X-Language      : und
      handler_name    : SoundHandler
      vendor_id       : [0][0][0][0]
      encoder         : Lavc60.31.102 libvorbis
  Stream #0:2: Audio: vorbis (oV[0][0] / 0x566F), 48000 Hz, stereo, fltp
    Metadata:
      X-Language      : und
      handler_name    : SoundHandler
      vendor_id       : [0][0][0][0]
      encoder         : Lavc60.31.102 libvorbis
  Stream #0:3: Audio: vorbis (oV[0][0] / 0x566F), 48000 Hz, stereo, fltp
    Metadata:
      X-Language      : und
      handler_name    : SoundHandler
      vendor_id       : [0][0][0][0]
      encoder         : Lavc60.31.102 libvorbis
  Stream #0:4: Audio: vorbis (oV[0][0] / 0x566F), 48000 Hz, stereo, fltp
    Metadata:
      X-Language      : und
      handler_name    : SoundHandler
      vendor_id       : [0][0][0][0]
      encoder         : Lavc60.31.102 libvorbis
  Stream #0:5: Audio: vorbis (oV[0][0] / 0x566F), 48000 Hz, stereo, fltp
    Metadata:
      X-Language      : und
      handler_name    : SoundHandler
      vendor_id       : [0][0][0][0]
      encoder         : Lavc60.31.102 libvorbis
  Stream #0:6: Audio: vorbis (oV[0][0] / 0x566F), 48000 Hz, stereo, fltp
    Metadata:
      X-Language      : und
      handler_name    : SoundHandler
      vendor_id       : [0][0][0][0]
      encoder         : Lavc60.31.102 libvorbis
ALSA lib confmisc.c:855:(parse_card) cannot find card '0'8 bitrate=1062.0kbits/s speed= 2.7x
ALSA lib conf.c:5204:(_snd_config_evaluate) function snd_func_card_inum returned error: No such file or directory
ALSA lib confmisc.c:422:(snd_func_concat) error evaluating strings
ALSA lib conf.c:5204:(_snd_config_evaluate) function snd_func_concat returned error: No such file or directory
ALSA lib confmisc.c:1342:(snd_func_refer) error evaluating name
ALSA lib conf.c:5204:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
ALSA lib conf.c:5727:(snd_config_expand) Evaluate error: No such file or directory
ALSA lib pcm.c:2721:(snd_pcm_open_noupdate) Unknown PCM default
SDL_OpenAudio (2 channels, 48000 Hz): ALSA: Couldn't open audio device: No such file or directory
ALSA lib confmisc.c:855:(parse_card) cannot find card '0'
ALSA lib conf.c:5204:(_snd_config_evaluate) function snd_func_card_inum returned error: No such file or directory
ALSA lib confmisc.c:422:(snd_func_concat) error evaluating strings
ALSA lib conf.c:5204:(_snd_config_evaluate) function snd_func_concat returned error: No such file or directory
ALSA lib confmisc.c:1342:(snd_func_refer) error evaluating name
ALSA lib conf.c:5204:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
ALSA lib conf.c:5727:(snd_config_expand) Evaluate error: No such file or directory
ALSA lib pcm.c:2721:(snd_pcm_open_noupdate) Unknown PCM default
SDL_OpenAudio (1 channels, 48000 Hz): ALSA: Couldn't open audio device: No such file or directory
ALSA lib confmisc.c:855:(parse_card) cannot find card '0'
ALSA lib conf.c:5204:(_snd_config_evaluate) function snd_func_card_inum returned error: No such file or directory
ALSA lib confmisc.c:422:(snd_func_concat) error evaluating strings
ALSA lib conf.c:5204:(_snd_config_evaluate) function snd_func_concat returned error: No such file or directory
ALSA lib confmisc.c:1342:(snd_func_refer) error evaluating name
ALSA lib conf.c:5204:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
ALSA lib conf.c:5727:(snd_config_expand) Evaluate error: No such file or directory
ALSA lib pcm.c:2721:(snd_pcm_open_noupdate) Unknown PCM default
SDL_OpenAudio (2 channels, 44100 Hz): ALSA: Couldn't open audio device: No such file or directory
ALSA lib confmisc.c:855:(parse_card) cannot find card '0'
ALSA lib conf.c:5204:(_snd_config_evaluate) function snd_func_card_inum returned error: No such file or directory
ALSA lib confmisc.c:422:(snd_func_concat) error evaluating strings
ALSA lib conf.c:5204:(_snd_config_evaluate) function snd_func_concat returned error: No such file or directory
ALSA lib confmisc.c:1342:(snd_func_refer) error evaluating name
ALSA lib conf.c:5204:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
ALSA lib conf.c:5727:(snd_config_expand) Evaluate error: No such file or directory
ALSA lib pcm.c:2721:(snd_pcm_open_noupdate) Unknown PCM default
SDL_OpenAudio (1 channels, 44100 Hz): ALSA: Couldn't open audio device: No such file or directory
No more combinations to try, audio open failed
 
SirLoading schrieb:
Und _qsv bei scale geht nicht.
Wenn ich nur crop + scale mache, was geht und dann auf _qsv ändere, dann geht es nicht.
Mit ffmpeg -filters | grep qsv kannst du testen, ob du überhaupt scale_qsv hast. Wenn du Soft- und Hardwarefilter mischt, musst du mit hwdownload und hwupload arbeiten.

Bei mir schaut der Befehl so aus:
Code:
ffmpeg -re -hwaccel qsv -c:v h264_qsv -i video.mp4 \
    -filter_complex \
    "[0:v]hwdownload,format=nv12,crop=1050:1080:435:0,hwupload,scale_qsv=1080:1112[main];
    [0:v]hwdownload,format=nv12,crop=593:444:1327:636,hwupload,scale_qsv=1080:808[face];
    [main][face]vstack_qsv,hwdownload,format=nv12[v]" \
    -map "[v]" -map "0:a" -f nut -c:v rawvideo - \
    | ffplay -loglevel warning -vf setpts=0 -

Allerdings scheint meine iGPU nicht auszureichen dafür, weil das Bild nicht mehr flüssig ist.

Wenn du ffmpeg auf einem headless Server testest, brauchst du natürlich auch keine pipe zu ffplay. Da reicht eigentlich am Ende des Befehls ein -f null -.
 
Welche igpu hast du?
Teste ich heute Abend Mal.

Hatte auch via CPU nicht funktioniert
 
Die Fehlermeldung von mir war mit deinem ffmpeg zum testen.

OK, ich schau Mal wie das von der Auslastung bei mir ist mit der 770.
 
SirLoading schrieb:
Die Fehlermeldung von mir war mit deinem ffmpeg zum testen.
du hattest auch mehrere Audiospuren drin, würde mal ein File testen, was nur eine Spur hat. Hast du auch mit ... | ffplay ... getestet? Das würde ich auf dem Server nicht so ausführen. Der hat ja kein Display.
SirLoading schrieb:
OK, ich schau Mal wie das von der Auslastung bei mir ist mit der 770.
Die GPU Auslastung siehst du halt nicht mit mit [h]top. Könntest aber schauen wie viel fps ffmpeg schafft.
 
GPU Auslastung hab ich was drauf um das zu sehen.
Meinte mit htop die Auslastung der CPU.

OK, das mit ffplay wusste ich nicht.
Nutze daheim Windows.
 
So, ich teste das nachher mal.

Zwecks iGPU: Install:
Code:
sudo apt install intel-gpu-tools

Damit starten:
Code:
sudo intel_gpu_top
 
Zuletzt bearbeitet:
So, ich kann via scale und vstack meinen Stream richtig zusammensetzen und an YouTube schicken.

Zu QSV:
Code:
ec     60. 31.102 / 60. 31.102
  libavformat    60. 16.100 / 60. 16.100
  libavdevice    60.  3.100 / 60.  3.100
  libavfilter     9. 12.100 /  9. 12.100
  libswscale      7.  5.100 /  7.  5.100
  libswresample   4. 12.100 /  4. 12.100
  libpostproc    57.  3.100 / 57.  3.100
 ... deinterlace_qsv   V->V       Quick Sync Video "deinterlacing"
 ... overlay_qsv       VV->V      Quick Sync Video overlay.
 ... scale_qsv         V->V       Quick Sync Video "scaling and format conversion"
 ... vpp_qsv           V->V       Quick Sync Video "VPP"
 ... hstack_qsv        N->V       "Quick Sync Video" hstack
 ... vstack_qsv        N->V       "Quick Sync Video" vstack
 ... xstack_qsv        N->V       "Quick Sync Video" xstack

Wo muss ich die restlichen Dinge einfügen?

Code:
                engine youtube-short2 {
                        enabled on;
                        iformat live_flv;
                        vfilter {
                                v error;

#                               filter_complex "[0:v]crop=1050:1080:435:0,scale=1080:1112[main];[0:v]crop=593:444:1327:636,scale=1080x808[face];[main][face]vstack[v]";
#                               map "[v]";
#                               map 0:a;

                                filter_complex "[0:v]hwdownload,format=nv12,crop=1050:1080:435:0,hwupload,scale_qsv=1080:1112[main];[0:v]hwdownload,format=nv12,crop=593:444:1327:636,hwupload,scale_qsv=1080x808[face];[main][face]vstack_qsv,hwdownload,format=nv12[v]";
                                map "[v]";
                                map 0:a;
                        }

                        vcodec h264_qsv;
                        vprofile high;
                        vpreset medium;
                        vthreads 0;
                        vfps 60;
                        vwidth 1080;
                        vheight 1920;
                        vparams {
                                tune zerolatency;
                                bufsize 3300k;
                                b:v 10000k;
                                minrate 10000k;
                                maxrate 10000k;
                                g 120;
                        }

                        acodec copy;
                        oformat flv;
                        output rtmp://a.rtmp.youtube.com/live2/00000;
                }
 
Ich habe noch ein bisschen getestet, und mit diesen Einstellungen braucht es noch etwas weniger Ressourcen:

Code:
ffmpeg -re -hwaccel qsv -hwaccel_output_format qsv -i video.mp4 \
    -filter_complex \
        "[0:v]crop=1050:1080:435:0,hwupload,scale_qsv=1080:1112[main];
        [0:v]crop=593:444:1327:636,hwupload,scale_qsv=1080:808[face];
        [main][face]vstack_qsv,hwdownload,format=nv12[v]" \
        -map "[v]" -map "0:a" -f null -

Komischerweise braucht es kein hwdownload,format=nv12 vor dem crop, wodurch etwas CPU Leistung eingespart werden kann.

Wenn du mehr Optionen brauchst, wie z.B. Input Parameter, könntest du auch statt transcode exec nehmen.

Wobei ohne diese HW Filter und Decoder es auch kein Problem wäre, die Systemauslastung ist dadurch wirklich vernachlässigbar. Da fällt das Encoding schon mehr ins Gewicht.

Bei meinen Tests ist mit GPU Filter und Decoder ein CPU Thread zu ~5,5% ausgelastet und mit CPU Filter und Decoder ~44%. Deine CPU hat ja anscheint 20 Threads, da spielt das kaum eine Rolle.
 
Zuletzt bearbeitet:
Zurück
Oben