Search code examples
ffmpegstreamingtwitch

ffmpeg: consider increasing probesize error, but it is never satisfied


I was trying to use an Arch solution for streaming to twitch today through FFMPEG, but all of my attempts were in vain because of one simple thing on FFMPEG. it says that the probesize is not large enough, so I instinctively increased the probesize value more and more... and now it is -probesize "500M" yet it is still saying it is not enough. here is the code snippet

[x11grab @ 0x5631f846cd00] Stream #0: not enough frames to estimate rate; consider increasing probesize
Input #0, x11grab, from ':0.0':
  Duration: N/A, start: 1603397505.341400, bitrate: 1007124 kb/s
    Stream #0:0: Video: rawvideo (BGR[0] / 0x524742), bgr0, 1366x768, 1007124 kb/s, 30 fps, 1000k tbr, 1000k tbn, 1000k tbc
0: Input/output error

and the code

#!/bin/bash
     INRES="1366x768" # input resolution
     OUTRES="1366x768" # output resolution
     FPS="30" # target FPS
     GOP="60" # i-frame interval, should be double of FPS,
     GOPMIN="30" # min i-frame interval, should be equal to fps,
     THREADS="2" # max 6
     CBR="1000k" # constant bitrate (should be between 1000k - 3000k)
     QUALITY="ultrafast"  # one of the many FFMPEG preset
     AUDIO_RATE="44100"
     PROBESZ="500M" # specify a size for the ffmpeg tool to assess frames
     STREAM_KEY="$1" # paste the stream key after calling stream_now
     SERVER="live-mia" # twitch server in miami Florida, see https://stream.twitch.tv/ingests/ for list

     ffmpeg -f x11grab -s "$INRES" -r "$FPS" -i :0.0 -f pulse -i 0 -f flv -ac 2 -ar $AUDIO_RATE \
       -vcodec libx264 -g $GOP -keyint_min $GOPMIN -b:v $CBR -minrate $CBR -maxrate $CBR -pix_fmt yuv420p\
       -s $OUTRES -preset $QUALITY -tune film -acodec aac -threads $THREADS -strict normal \
       -bufsize $CBR -probesize $PROBESZ "rtmp://$SERVER.twitch.tv/app/$STREAM_KEY"

even though it was a solution to store in .bashrc, I stored it in a script to call manually.

and if this is helpful, here is the fancy banner ffmpeg shows before the error

ffmpeg version n4.3.1 Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 10.1.0 (GCC)
  configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-avisynth --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libdav1d --enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libjack --enable-libmfx --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librav1e --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-nvdec --enable-nvenc --enable-omx --enable-shared --enable-version3
  libavutil      56. 51.100 / 56. 51.100
  libavcodec     58. 91.100 / 58. 91.100
  libavformat    58. 45.100 / 58. 45.100
  libavdevice    58. 10.100 / 58. 10.100
  libavfilter     7. 85.100 /  7. 85.100
  libswscale      5.  7.100 /  5.  7.100
  libswresample   3.  7.100 /  3.  7.100
  libpostproc    55.  7.100 / 55.  7.100

Solution

  • Stream #0: not enough frames to estimate rate; consider increasing probesize

    This is just a minor warning. You can ignore it, but if you want it to go away use -probesize as in input option. You're using it as an output option. Order and placement matters in ffmpeg.

    ffmpeg -probesize 10M -i input ...
    

    0: Input/output error

    This is the actual error that is causing failure. It's trying to tell you -i 0 does not refer to any actual input.

    So you need to provide an actual input for pulse, such as -i default.

    To list the PulseAudio source devices and their properties run pactl list sources.

    See FFmpeg Devices Documentation: Pulse for more info.

    The script

    Years ago I tried to make improvements to the sometimes rather poor, outdated, or plain wrong ffmpeg examples on the Arch Wiki but I got complaints that I violated "Do not make complex edits at once" and rolled it back. Waste of time, so I never touched it again. I recommend the FFmpeg Wiki instead.

    Some recommended changes:

    #!/bin/bash
    INRES="1366x768" # input resolution
    OUTRES="1366x768" # output resolution
    FPS="30" # target FPS. Use 30 or 60. 60 is preferred for games if your computer can handle it.
    GOP="60" # i-frame interval, should be double of $FPS
    BITRATE="4000k" # bitrate (should be between 3000k - 6000k). See https://stream.twitch.tv/encoding/
    BUFSIZE="8000k" # 2x to 4x $BITRATE
    PRESET="fast"  # use slowest preset that still maintains $FPS. See https://trac.ffmpeg.org/wiki/Encode/H.264#Preset
    AUDIO_SAMPLE_RATE="44100"
    STREAM_KEY="$1" # paste the stream key after calling stream_now
    SERVER="live-mia" # twitch server in miami Florida, see https://stream.twitch.tv/ingests/ for list
    
    ffmpeg \
      -f x11grab -video_size "$INRES" -framerate "$FPS" -i :0.0 \
      -f pulse -channels 2 -sample_rate "$AUDIO_SAMPLE_RATE" -i default \
      -c:v libx264 -g "$GOP" -b:v "$BITRATE" -maxrate "$BITRATE" -bufsize "$BUFSIZE" -vf format=yuv420p \
      -s "$OUTRES" -preset "$PRESET" -c:a aac \
      -f flv "rtmp://$SERVER.twitch.tv/app/$STREAM_KEY"