[FFmpeg-user] Live Transcoding: What Causes Large Time Gaps from Input to Output
Greg Oliver
oliver.greg at gmail.com
Wed Jan 15 01:29:07 EET 2025
On Tue, Jan 14, 2025 at 11:37 AM Shane Warren <shanew at innovsys.com> wrote:
>
> I am transcoding live multicast using hardware (decoding using nvidia and encoding using nvidia (h264_nvenc) and going out multicast at fixed framerate and constant bitrate. Normally the output is about 3-5 seconds behind the input.
>
> I have some streams that cause the output to eventually get minutes behind the input. I've narrowed down the input buffering being the culprit of holding a very large buffer of input frames in these situations.
>
> Here is my command:
>
> ffmpeg -y -threads 2 -nostats -nostdin -loglevel verbose -progress pipe:1 -probesize 5M -filter_threads 4 -threads 2 -re -fflags +genpts -fflags discardcorrupt -hwaccel_device 0 -extra_hw_frames 2 -hwaccel_output_format cuda -hwaccel cuda -heavy_compr 1 -thread_queue_size 512 -i "udp://@225.105.0.27:10102?fifo_size=1073440&buffer_size=2129920&timeout=800000" -autoscale 0 -threads 2 -filter_complex "[0:v:0]fps=30000/1001,yadif_cuda,scale_npp=1920:1080:interp_algo=super:format=yuv420p [vout]" -map "[vout]" -map "0:a:0" -map 0:d? -filter:a:0 "aresample=async=10000,volume=1.00" -c:a:0 aac -threads 2 -ac:a:0 2 -ar:a:0 48000 -b:a:0 192k -flush_packets 0 -c:v h264_nvenc -b:v 6000k -minrate:v 6000k -maxrate:v 6000k -bufsize:v 12000k -a53cc 1 -tune ll -zerolatency 1 -cbr 1 -forced-idr 1 -strict_gop 1 -threads 2 -profile:v high -level:v 4.2 -bf:v 0 -g:v 15 -f fifo -drop_pkts_on_overflow 1 -attempt_recovery 0 -fifo_format mpegts -format_opts muxrate=6800440:pes_payload_size=1528 "udp://@225.
> 105.0.65:10102?pkt_size=1316&bitrate=6800440&burst_bits=10528&ttl=64"
>
> I suspect the input stream does something odd and causes ffmpeg to buffer frames and it gets slowly behind. I would like to make ffmpeg drop frames if possible, instead of forever buffering frames and getting further and further out of sync.
>
> Is there anything anyone can recommend to force ffmpeg to stop buffering input frames?
I imagine the stream is changing somehow. What is the output (ffmpeg)
when it happens? Also, maybe try starting simple (-preset 8) and
then fine tuning.
More information about the ffmpeg-user
mailing list