[FFmpeg-user] ffmpeg GPU selection issue

Dennis Mungai dmngaie at gmail.com
Thu Sep 5 11:43:46 EEST 2019


On Thu, Sep 5, 2019, 08:11 Matthew Reus <matthew.reus01 at gmail.com> wrote:

> yes , it taking the defined GPU  and working fine ,
>
> but there is showing dup frame
>
> [h264 @ 0x565148b79140] SPS unavailable in decode_picture_timing
> [h264 @ 0x565148b79140] non-existing PPS 0 referenced
> [h264 @ 0x565148b79140] SPS unavailable in decode_picture_timing
> [h264 @ 0x565148b79140] non-existing PPS 0 referenced
> [h264 @ 0x565148b79140] decode_slice_header error
> [h264 @ 0x565148b79140] no frame!
> [h264 @ 0x565148b79140] SPS unavailable in decode_picture_timing
> [h264 @ 0x565148b79140] non-existing PPS 0 referenced
> [h264 @ 0x565148b79140] SPS unavailable in decode_picture_timing
> [h264 @ 0x565148b79140] non-existing PPS 0 referenced
> [h264 @ 0x565148b79140] decode_slice_header error
> [h264 @ 0x565148b79140] no frame!
> [h264 @ 0x565148b79140] SPS unavailable in decode_picture_timing
> [h264 @ 0x565148b79140] non-existing PPS 0 referenced
> [h264 @ 0x565148b79140] SPS unavailable in decode_picture_timing
> [h264 @ 0x565148b79140] non-existing PPS 0 referenced
> [h264 @ 0x565148b79140] decode_slice_header error
> [h264 @ 0x565148b79140] no frame!
> [h264 @ 0x565148b79140] SPS unavailable in decode_picture_timing
> [h264 @ 0x565148b79140] non-existing PPS 0 referenced
> [h264 @ 0x565148b79140] SPS unavailable in decode_picture_timing
> [h264 @ 0x565148b79140] non-existing PPS 0 referenced
> [h264 @ 0x565148b79140] decode_slice_header error
> [h264 @ 0x565148b79140] no frame!
> [h264 @ 0x565148b79140] mmco: unref short failure
> [h264 @ 0x565148b79140] number of reference frames (0+4) exceeds max (3;
> probably corrupt input), discarding one
> Input #0, mpegts, from 'udp://@
> 224.2.2.21:5008?fifo_size=1000000\&overrun_nonfatal
> <http://224.2.2.21:5008?fifo_size=1000000%5C&overrun_nonfatal>':
>   Duration: N/A, start: 82237.270033, bitrate: N/A
>   Program 60
>     Metadata:
>       service_name    : BBS TV 1
>       service_provider:
>     Stream #0:0[0x3d]: Video: h264 (Main) ([27][0][0][0] / 0x001B),
> yuv420p(tv, bt470bg, top first), 704x576 [SAR 12:11 DAR 4:3], 25 fps, 25
> tbr, 90k tbn, 50 tbc
>     Stream #0:1[0x3e](eng): Audio: mp2 ([4][0][0][0] / 0x0004), 48000 Hz,
> stereo, s16p, 128 kb/s
> [rtmp @ 0x565148b78a40] Ignoring unsupported var reason
> Stream mapping:
>   Stream #0:0 -> #0:0 (h264 (native) -> h264 (h264_nvenc))
>   Stream #0:1 -> #0:1 (mp2 (native) -> aac (native))
> Press [q] to stop, [?] for help
> [h264 @ 0x56514939de40] co located POCs unavailable
> [h264 @ 0x5651493f6340] mmco: unref short failure
> [h264 @ 0x5651493f6340] number of reference frames (0+4) exceeds max (3;
> probably corrupt input), discarding one
> Output #0, flv, to 'rtmp://
> admin:netaccess at 192.168.0.44:1935/nettv/netBBS11500.stream':
>   Metadata:
>     encoder         : Lavf58.30.100
>     Stream #0:0: Video: h264 (h264_nvenc) (Main) ([7][0][0][0] / 0x0007),
> cuda, 880x720 [SAR 12:11 DAR 4:3], q=-1--1, 1800 kb/s, 25 fps, 1k tbn, 25
> tbc
>     Metadata:
>       encoder         : Lavc58.55.100 h264_nvenc
>     Side data:
>       cpb: bitrate max/min/avg: 1800000/0/1800000 buffer size: 1800000
> vbv_delay: -1
>     Stream #0:1(eng): Audio: aac (LC) ([10][0][0][0] / 0x000A), 44100 Hz,
> stereo, fltp, 64 kb/s
>     Metadata:
>       encoder         : Lavc58.55.100 aac
> [h264 @ 0x5651493aed00] *mmco: unref short failure0:29:05.24
> bitrate=1874.2kbits/s dup=26 drop=0 *speed=   1x
>     Last message repeated 1 times
> [h264 @ 0x5651493aed00] number of reference frames (0+4) exceeds max (3;
> probably corrupt input), discarding one
>
> On Thu, Sep 5, 2019 at 4:11 AM Dennis Mungai <dmngaie at gmail.com> wrote:
>
> > On Wed, 4 Sep 2019 at 18:28, Dennis Mungai <dmngaie at gmail.com> wrote:
> > >
> > > On Wed, 4 Sep 2019 at 10:39, Matthew Reus <matthew.reus01 at gmail.com>
> > wrote:
> > > >
> > > > Hello
> > > > I have ubuntu 18.04 server where i have install ffmpeg and compile
> sdk
> > as
> > > > well as all requirement of NVIDIA tesla M 60 driver .
> > > >
> > > >
> > > > *1.Issue is whenever i define gpu , both gpu 1 and gpu2 take the
> > process *
> > > >
> > > > *2.ffmepg mostof the time shows frame drops and video buffer *
> > > >
> > > > *Here is have attached all the output and script *
> > > >
> > > > ffmpeg version N-94423-ga0c1970 Copyright (c) 2000-2019 the FFmpeg
> > > > developers
> > > >   built with gcc 7 (Ubuntu 7.4.0-1ubuntu1~18.04.1)
> > > >   configuration: --prefix=/root/ffmpeg_build
> > --pkg-config-flags=--static
> > > > --extra-cflags=-I/root/ffmpeg_build/include
> > > > --extra-ldflags=-L/root/ffmpeg_build/lib --extra-libs='-lpthread -lm'
> > > > --bindir=/root/bin --enable-cuda --enable-cuvid --enable-libnpp
> > > > --extra-cflags=-I../nv_sdk --extra-ldflags=-L../nv_sdk
> > --enable-cuda-nvcc
> > > > --enable-nvenc --extra-cflags=-I/usr/local/cuda/include/
> > > > --extra-ldflags=-L/usr/local/cuda/lib64/ --enable-gpl --enable-libaom
> > > > --enable-libass --enable-libfdk-aac --enable-vaapi
> --enable-libfreetype
> > > > --enable-libmp3lame --enable-libopus --enable-libvorbis
> --enable-libvpx
> > > > --enable-libx264 --enable-libx265 --enable-nonfree
> > > >   libavutil      56. 32.100 / 56. 32.100
> > > >   libavcodec     58. 55.100 / 58. 55.100
> > > >   libavformat    58. 30.100 / 58. 30.100
> > > >   libavdevice    58.  9.100 / 58.  9.100
> > > >   libavfilter     7. 58.100 /  7. 58.100
> > > >   libswscale      5.  6.100 /  5.  6.100
> > > >   libswresample   3.  6.100 /  3.  6.100
> > > >   libpostproc    55.  6.100 / 55.  6.100
> > > > Hyper fast Audio and Video encoder
> > > > usage: ffmpeg [options] [[infile options] -i infile]... {[outfile
> > options]
> > > > outfile}...
> > > >
> > > >
> > > > *My test script is *
> > > > *ffmpeg -hwaccel_device 1 -hwaccel auto  -i
> > > > 'udp://@224.2.2.21:5008?fifo_size=1000000\&overrun_nonfatal
> <http://224.2.2.21:5008?fifo_size=1000000%5C&overrun_nonfatal>
> > <http://224.2.2.21:5008?fifo_size=1000000%5C&overrun_nonfatal>
> > > > <http://224.2.2.21:5008?fifo_size=1000000\&overrun_nonfatal>' -vf
> > > >
> "hwupload_cuda,format=yuv420p|cuda,yadif_cuda=0:-1:0,scale_npp=-1:720"
> > -c:v
> > > > h264_nvenc -gpu 1  -b:v 1800k -c:a aac  -aspect 16:9  -g 50 -b:a 64k
> > -ar
> > > > 44100 -ac 2 -f flv
> > > > 'rtmp://admin:netaccess@192.168.0.44:1935/nettv/netBBS11500.stream
> > > > <http://admin:netaccess@192.168.0.44:1935/nettv/netBBS11500.stream>'
> > > > </dev/null >/dev/null 2>/var/log/BBs1.log  &*
> > > >
> > > >
> > > > ffmpeg version N-94423-ga0c1970 Copyright (c) 2000-2019 the FFmpeg
> > > > developers
> > > >   built with gcc 7 (Ubuntu 7.4.0-1ubuntu1~18.04.1)
> > > >   configuration: --prefix=/root/ffmpeg_build
> > --pkg-config-flags=--static
> > > > --extra-cflags=-I/root/ffmpeg_build/include
> > > > --extra-ldflags=-L/root/ffmpeg_build/lib --extra-libs='-lpthread -lm'
> > > > --bindir=/root/bin --enable-cuda --enable-cuvid --enable-libnpp
> > > > --extra-cflags=-I../nv_sdk --extra-ldflags=-L../nv_sdk
> > --enable-cuda-nvcc
> > > > --enable-nvenc --extra-cflags=-I/usr/local/cuda/include/
> > > > --extra-ldflags=-L/usr/local/cuda/lib64/ --enable-gpl --enable-libaom
> > > > --enable-libass --enable-libfdk-aac --enable-vaapi
> --enable-libfreetype
> > > > --enable-libmp3lame --enable-libopus --enable-libvorbis
> --enable-libvpx
> > > > --enable-libx264 --enable-libx265 --enable-nonfree
> > > >   libavutil      56. 32.100 / 56. 32.100
> > > >   libavcodec     58. 55.100 / 58. 55.100
> > > >   libavformat    58. 30.100 / 58. 30.100
> > > >   libavdevice    58.  9.100 / 58.  9.100
> > > >   libavfilter     7. 58.100 /  7. 58.100
> > > >   libswscale      5.  6.100 /  5.  6.100
> > > >   libswresample   3.  6.100 /  3.  6.100
> > > >   libpostproc    55.  6.100 / 55.  6.100
> > > > [h264 @ 0x559b7b7248c0] SPS unavailable in decode_picture_timing
> > > > [h264 @ 0x559b7b7248c0] non-existing PPS 0 referenced
> > > > [h264 @ 0x559b7b7248c0] SPS unavailable in decode_picture_timing
> > > > [h264 @ 0x559b7b7248c0] non-existing PPS 0 referenced
> > > > [h264 @ 0x559b7b7248c0] decode_slice_header error
> > > > [h264 @ 0x559b7b7248c0] no frame!
> > > > [h264 @ 0x559b7b7248c0] SPS unavailable in decode_picture_timing
> > > > [h264 @ 0x559b7b7248c0] non-existing PPS 0 referenced
> > > > [h264 @ 0x559b7b7248c0] SPS unavailable in decode_picture_timing
> > > > [h264 @ 0x559b7b7248c0] non-existing PPS 0 referenced
> > > > [h264 @ 0x559b7b7248c0] decode_slice_header error
> > > > [h264 @ 0x559b7b7248c0] no frame!
> > > > [h264 @ 0x559b7b7248c0] SPS unavailable in decode_picture_timing
> > > > [h264 @ 0x559b7b7248c0] non-existing PPS 0 referenced
> > > > [h264 @ 0x559b7b7248c0] SPS unavailable in decode_picture_timing
> > > > [h264 @ 0x559b7b7248c0] non-existing PPS 0 referenced
> > > > [h264 @ 0x559b7b7248c0] decode_slice_header error
> > > > [h264 @ 0x559b7b7248c0] no frame!
> > > > [h264 @ 0x559b7b7248c0] mmco: unref short failure
> > > >     Last message repeated 1 times
> > > > [h264 @ 0x559b7b7248c0] number of reference frames (0+4) exceeds max
> > (3;
> > > > probably corrupt input), discarding one
> > > > Input #0, mpegts, from 'udp://@
> > > > 224.2.2.21:5008?fifo_size=1000000\&overrun_nonfatal
> <http://224.2.2.21:5008?fifo_size=1000000%5C&overrun_nonfatal>
> > <http://224.2.2.21:5008?fifo_size=1000000%5C&overrun_nonfatal>':
> > > >   Duration: N/A, start: 7352.806033, bitrate: N/A
> > > >   Program 60
> > > >     Metadata:
> > > >       service_name    : BBS TV 1
> > > >       service_provider:
> > > >     Stream #0:0[0x3d]: Video: h264 (Main) ([27][0][0][0] / 0x001B),
> > > > yuv420p(tv, bt470bg, top first), 704x576 [SAR 12:11 DAR 4:3], 25 fps,
> > 50
> > > > tbr, 90k tbn, 50 tbc
> > > >     Stream #0:1[0x3e](eng): Audio: mp2 ([4][0][0][0] / 0x0004), 48000
> > Hz,
> > > > stereo, s16p, 128 kb/s
> > > > [rtmp @ 0x559b7b7241c0] Ignoring unsupported var reason
> > > > [h264 @ 0x559b7b73eb80] Using auto hwaccel type cuda with new device
> > > > created from 1.
> > > > Stream mapping:
> > > >   Stream #0:0 -> #0:0 (h264 (native) -> h264 (h264_nvenc))
> > > >   Stream #0:1 -> #0:1 (mp2 (native) -> aac (native))
> > > > Press [q] to stop, [?] for help
> > > > [h264 @ 0x559b7c007e00] reference picture missing during reorder
> > > > [h264 @ 0x559b7c007e00] Missing reference picture, default is 65297
> > > > [h264 @ 0x559b7c024680] mmco: unref short failure
> > > >     Last message repeated 1 times
> > > > [h264 @ 0x559b7c024680] number of reference frames (0+4) exceeds max
> > (3;
> > > > probably corrupt input), discarding one
> > > > [h264 @ 0x559b7c05d780] mmco: unref short failure
> > > > [h264 @ 0x559b7c108940] mmco: unref short failure
> > > > Output #0, flv, to 'rtmp://
> > > > admin:netaccess at 192.168.0.44:1935/nettv/netBBS11500.stream':
> > > >   Metadata:
> > > >     encoder         : Lavf58.30.100
> > > >     Stream #0:0: Video: h264 (h264_nvenc) (Main) ([7][0][0][0] /
> > 0x0007),
> > > > cuda, 880x720 [SAR 16:11 DAR 16:9], q=-1--1, 1800 kb/s, 25 fps, 1k
> > tbn, 25
> > > > tbc
> > > >     Metadata:
> > > >       encoder         : Lavc58.55.100 h264_nvenc
> > > >     Side data:
> > > >       cpb: bitrate max/min/avg: 0/0/1800000 buffer size: 3600000
> > vbv_delay:
> > > > -1
> > > >     Stream #0:1(eng): Audio: aac (LC) ([10][0][0][0] / 0x000A), 44100
> > Hz,
> > > > stereo, fltp, 64 kb/s
> > > >     Metadata:
> > > >       encoder         : Lavc58.55.100 aac
> > > > root at ubuntu:/var/log# 17.0 size=   68167kB time=00:04:54.44
> > > > bitrate=1896.6kbits/s speed=1.02x
> > >
> > >
> > > Hello there,
> > >
> > > Please try this. I've simplified your command a bit for legibility.
> > > These `<>` have been dropped.
> > >
> > > ffmpeg -fflags +genpts -vsync 1 -threads 4 \
> > > -hwaccel nvdec -hwaccel_device 1 -hwaccel_output_format cuda \
> > > -i 'udp://@224.2.2.21:5008?fifo_size=1000000\&overrun_nonfatal
> <http://224.2.2.21:5008?fifo_size=1000000%5C&overrun_nonfatal>
> > <http://224.2.2.21:5008?fifo_size=1000000%5C&overrun_nonfatal> \
> > > -vf "yadif_cuda=0:-1:0,scale_npp=-1:720" \
> > > -c:v h264_nvenc -preset:v llhq -rc:v cbr_ld_hq -gpu 1 -b:v 1800k
> > > -maxrate:v 1800k -bufsize:v 1800k -r:v 25 -g:v 50 \
> > > -c:a aac -b:a 64k -ar 44100 -ac 2 \
> > > -f flv -flags +global_header -map 0 \
> > > 'rtmp://admin:netaccess@192.168.0.44:1935/nettv/netBBS11500.stream'
> > >
> > > A few notes:
> > >
> > > 1. Note how we call up the hwaccel method. Please don't set this to
> > > auto. Judging by your console output, you definitely have nvdec
> > > available. Use it.
> > >
> > > 2. See how we request for a specific texture format output from the
> > > decoder tied to the hwaccel method. In this case we ask for cuda. That
> > > way you can skip the unnecessary hwupload parts in your previous
> > > script. These extra bits will definitely slow you down.
> > >
> > > 3. The thread count (-threads 4) is explicitly set to a low value, 4.
> > > For hwaccels such as nvdec, this is ideal. Very high numbers (~16+)
> > > may result in decoder initialization failure, with warnings.
> > >
> > > 4. On encoder presets: You're using a Maxwell Gen 2 GPU (a Tesla M60).
> > > Based on your previous command line, I assumed you're targeting
> > > constant bitrate output. With that in mind, the command above selects
> > > the low latency high quality preset (-preset:v llhq) whose rate
> > > control method is overridden to constant bitrate, low latency high
> > > quality mode (-cbr:v cbr_ld_hq) while adapting your selected GOP size
> > > and frame rate.
> > >
> > > 5. On device selection: This is governed by the -hwaccel_device
> > > arguments passed to the underlying hwaccel , and for the encoder, the
> > > -gpu argument takes precedence. Your mistake in the previous command
> > > was calling up hwupload_cuda without specifying a device to use. Your
> > > previous arguments resulted in the creation of a random CUDA device in
> > > the middle of a filter chain, invoking expensive copies to and from
> > > system memory. And that will definitely slow down the encoder.
> > >
> > > As an example, with a single RTX 2080 on my laptop encoding one of the
> > > C-band satellite capture samples from https://kodi.wiki/view/Samples :
> > >
> > > cd ~/test
> > > time ffmpeg -fflags +genpts -vsync 1 -threads 4 \
> > > -hwaccel nvdec -hwaccel_device 0 -hwaccel_output_format cuda \
> > > -i 'test.mkv' \
> > > -vf "yadif_cuda=0:-1:0,scale_npp=-1:720" \
> > > -c:v h264_nvenc -preset:v llhq -rc:v cbr_ld_hq -gpu 0 -b:v 1800k
> > > -maxrate:v 1800k -bufsize:v 1800k -r:v 59.94 -g:v 59.98 \
> > > -c:a aac -b:a 64k -ar 44100 -ac 2 \
> > > -f flv -flags +global_header -map 0 'test.flv'
> > >
> > > And this runs at a sweet, sweet ~11x speed:
> > >
> > > frame=17791 fps=657 q=27.0 Lsize=   68121kB time=00:04:56.92
> > > bitrate=1879.4kbits/s dup=8895 drop=0 speed=  11x
> > > video:65225kB audio:2336kB subtitle:0kB other streams:0kB global
> > > headers:0kB muxing overhead: 0.829441%
> > > [aac @ 0x561db5b25440] Qavg: 153.261
> > >
> > > real    0m27.461s
> > > user    0m15.690s
> > > sys    0m1.404s
> > >
> > >
> > > At the very least, on your hardware, you should be getting throughput
> > > speeds in multiples of ~1x with no drops whatsoever.
> > >
> > > Test and report back.
> > >
> > > Warm regards,
> > >
> > > Dennis.
> >
> > With proper escapes:
> >
> > ffmpeg -fflags +genpts -vsync 1 -threads 4 \
> > -hwaccel nvdec -hwaccel_device 1 -hwaccel_output_format cuda \
> > -i 'udp://@224.2.2.21:5008?fifo_size=1000000\&overrun_nonfatal
> <http://224.2.2.21:5008?fifo_size=1000000%5C&overrun_nonfatal>
> > <http://224.2.2.21:5008?fifo_size=1000000%5C&overrun_nonfatal> \
> > -vf "yadif_cuda=0:-1:0,scale_npp=-1:720" \
> > -c:v h264_nvenc -preset:v llhq -rc:v cbr_ld_hq -gpu 1 -b:v 1800k \
> > -maxrate:v 1800k -bufsize:v 1800k -r:v 25 -g:v 50 \
> > -c:a aac -b:a 64k -ar 44100 -ac 2 \
> > -f flv -flags +global_header -map 0 \
> > 'rtmp://admin:netaccess@192.168.0.44:1935/nettv/netBBS11500.stream'
> >
> > Test and report back, thanks.
>

That's due to the -r:v value.
Omit it altogether if this behavior is undesired.
To maintain a constant frame rate, the -r option will either:

(a). Provide true constant frame rate output for formats such as mp4 by
either duplicating or dropping frames.

(b). Act as a ceiling for the maximum frame rate permitted with formats
such as mkv which permit for variable frame rate. Frame rates below the
threshold are passed through, with these above the same being either
dropped or duplicated.

What you're seeing should thus be treated as a notification, especially
where a GOP size (-g) is defined.

>


More information about the ffmpeg-user mailing list