问题
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
回答1:
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"
来源:https://stackoverflow.com/questions/64490002/ffmpeg-consider-increasing-probesize-error-but-it-is-never-satisfied