Estou tentando gravar a tela do meu jogo no Win11 usando o ffmpeg usando o seguinte:
ffmpeg -f gdigrab -framerate 20 -c:v libx264rgb -crf 0 -preset ultrafast -color_range 2 -offset_x 0 -offset_y 0 -video_size 1920x1080 -i desktop -show_region 1 C:\Action!\Video\output.mkv
Recebo uma mensagem de erro após as informações do ffmpeg que diz:
Decodificador desconhecido 'libx264rgb'.
Erro ao abrir o arquivo de entrada.
Erro ao abrir os arquivos de entrada: Decodificador não encontrado.
Nas informações parece que o ffmpeg foi compilado com suporte a libx264rgb:
ffmpeg versão N-118007-g2f95bc3cb3-20241204 Copyright (c) 2000-2024 os desenvolvedores do FFmpeg construído com gcc 14.2.0 (crosstool-NG 1.26.0.120_4d36f27) configuração: --prefix=/ffbuild/prefix --pkg-config-flags=--static --pkg-config=pkg-config --cross-prefix=x86_64-w64-mingw32- --arch=x86_64 --target-os=mingw32 --enable-gpl --enable-version3 --disable-debug --disable-w32threads --enable-pthreads --enable-iconv --enable-zlib --enable-libfreetype --enable-libfribidi --enable-gmp --enable-libxml2 --habilitar-lzma --habilitar-fontconfig --habilitar-libharfbuzz --habilitar-libvorbis --habilitar-opencl --habilitar-libpulse --habilitar-libvmaf --habilitar-libxcb --habilitar-xlib --habilitar-amf --habilitar-libaom --habilitar-libaribb24 --habilitar-avisynth --habilitar-chromaprint --habilitar-libdav1d --habilitar-libdavs2 --habilitar-libdvdread --habilitar-libdvdnav --habilitar-libfdk-aac --habilitar-ffnvcodec --habilitar-cuda-llvm --habilitar-frei0r --habilitar-libgme --habilitar-libkvazaar --habilitar-libaribcaption --habilitar-libass --habilitar-libbluray --habilitar-libjxl --habilitar-libmp3lame --habilitar-libopus --habilitar-librist --enable-libssh --enable-libtheora --enable-libvpx --enable-libwebp --enable-libzmq --enable-lv2 --enable-libvpl --enable-openal --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopenmpt --enable-librav1e --enable-librubberband --enable-schannel --enable-sdl2 --enable-libsoxr --enable-libsrt --enable-libsvtav1 --enable-libtwolame --enable-libuavs3d --disable-libdrm --enable-vaapi --enable-libvidstab --enable-vulkan --enable-libshaderc --enable-libplacebo --enable-libvvenc --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libzimg --enable-libzvbi --extra-cflags=-DLIBTWOLAME_STATIC --extra-cxxflags= --extra-libs=-lgomp --extra-ldflags=-pthread --extra-ldexeflags= --cc=x86_64-w64-mingw32-gcc --cxx=x86_64-w64-mingw32-g++ --ar=x86_64-w64-mingw32-gcc-ar --ranlib=x86_64-w64-mingw32-gcc-ranlib --nm=x86_64-w64-mingw32-gcc-nm --extra-version=20241204 libavutil 59. 47.101 / 59. 47.101 libavcodec 61. 26.100 / 61. 26.100 libavformat 61. 9.100 / 61. 9.100 libavdevice 61. 4.100 / 61. 4.100 libavfilter 10. 6.101 / 10. 6.101 libswscale 8. 12.100 / 8. 12.100 libswresample 5. 4.100 / 5. 4.100 libpostproc 58. 4.100 / 58. 4.100
Após executar "ffmpeg -codecs", vejo a seguinte linha:
DEV.LS h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (decoders: h264 h264_qsv libopenh264 h264_cuvid) (encoders: libx264 libx264rgb libopenh264 h264_amf h264_mf h264_nvenc h264_qsv h264_vaapi h264_vulkan)
Se eu usar o seguinte ffmpeg -f gdigrab -framerate 20 -i desktop C:\Action!\Video\output.mkv
, funciona bem, no entanto, ao observar a taxa de quadros, ela não chega a 20 fps, então eu queria usar uma opção de codificação mais rápida/eficiente para reduzir a sobrecarga...
Estou testando isso no meu laptop com uma placa de vídeo Intel HD Graphics 620, antes de passar para um desktop com uma placa de vídeo Nvidia.
Muito obrigado antecipadamente
Glyn
------------- editar -------------
A mensagem de erro foi corrigida, graças às informações sobre como alterar a ordem de algumas coisas. No entanto, não está atingindo a marca de 25 fps e perdendo quadros:
Duration: N/A, start: 1745794842.477476, bitrate: 1658890 kb/s Stream #0:0: Video: bmp, bgra, 1920x1080, 1658890 kb/s, 25 fps, 1000k tbr, 1000k tbn Stream mapping: Stream #0:0 -> #0:0 (bmp (native) -> h264 (libx264rgb)) Press [q] to stop, [?] for help [libx264rgb @ 000002943760d9c0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2 [libx264rgb @ 000002943760d9c0] profile High 4:4:4 Predictive, level 4.0, 4:4:4, 8-bit [libx264rgb @ 000002943760d9c0] 64 - core 164 - H.264/MPEG-4 AVC codec - Copyleft 2003-2024 - http://www.videolan.org/x264.html - options: cabac=0 ref=1 deblock=0:0:0 analyse=0:0 me=dia subme=0 psy=0 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=0 chroma_qp_offset=0 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=0 keyint=250 keyint_min=25 scenecut=0 intra_refresh=0 rc=cqp mbtree=0 qp=0 Output #0, matroska, to 'C:\Action!\Video\output.mkv': Metadata: encoder : Lavf61.9.100 Stream #0:0: Video: h264 (H264 / 0x34363248), rgb24(pc, gbr/unknown/unknown, progressive), 1920x1080, q=2-31, 25 fps, 1k tbn Metadata: encoder : Lavc61.26.100 libx264rgb Side data: cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A frame= 372 fps= 24 q=0.0 size= 3072KiB time=00:00:15.20 bitrate=1655.6kbits/s dup=0 drop=7 speed=0.982x
Achei que usar um codificador lib264rgb seria mais eficiente...
Abraços Glyn