I am trying to capture my windows10 desktop with desktop duplication api and on-gpu D3D11 textures, in the form of ffmpeg D3D11VA frames @60 fps. Required command is given here. On top of that I am trying to also intercept my mic audio and Desktop audio. For that I am using this command,
ffmpeg -f dshow -fflags nobuffer -i audio="Microphone (Realtek High Definition Audio)" -f dshow -fflags nobuffer -i audio="Stereo Mix (Realtek High Definition Audio)" -filter_complex ddagrab=framerate=60;amix=inputs=2:duration=longest:dropout_transition=0 -c:v h264_nvenc -rc vbr -cq 24 -qmin 24 -qmax 24 -profile:v main -b:v 0K output.mp4
libavutil 58. 2.100 / 58. 2.100
libavcodec 60. 3.100 / 60. 3.100
libavformat 60. 3.100 / 60. 3.100
libavdevice 60. 1.100 / 60. 1.100
libavfilter 9. 3.100 / 9. 3.100
libswscale 7. 1.100 / 7. 1.100
libswresample 4. 10.100 / 4. 10.100
libpostproc 57. 1.100 / 57. 1.100
Guessed Channel Layout for Input Stream #0.0 : stereo
Input #0, dshow, from 'audio=Microphone (Realtek High Definition Audio)':
Duration: N/A, start: 9251.652000, bitrate: 1411 kb/s
Stream #0:0: Audio: pcm_s16le, 44100 Hz, 2 channels, s16, 1411 kb/s
Guessed Channel Layout for Input Stream #1.0 : stereo
Input #1, dshow, from 'audio=Stereo Mix (Realtek High Definition Audio)':
Duration: N/A, start: 9252.378000, bitrate: 1411 kb/s
Stream #1:0: Audio: pcm_s16le, 44100 Hz, 2 channels, s16, 1411 kb/s
Stream mapping:
Stream #0:0 (pcm_s16le) -> amix
Stream #1:0 (pcm_s16le) -> amix
ddagrab:default -> Stream #0:0 (h264_nvenc)
amix:default -> Stream #0:1 (aac)
Press [q] to stop, [?] for help
Output #0, mp4, to 'output.mp4':
Metadata:
encoder : Lavf60.3.100
Stream #0:0: Video: h264 (Main) (avc1 / 0x31637661), d3d11(pc, gbr/bt709/iec61966-2-1, progressive), 1600x900 [SAR 1:1 DAR 16:9], q=2-31, 60 fps, 15360 tbn
Metadata:
encoder : Lavc60.3.100 h264_nvenc
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s
Metadata:
encoder : Lavc60.3.100 aac
frame= 170 fps= 46 q=23.0 size= 512kB time=00:00:03.43 bitrate=1220.6kbits/s dup=8 drop=1 speed=0.924x
[q] command received. Exiting.
frame= 202 fps= 50 q=23.0 Lsize= 719kB time=00:00:03.48 bitrate=1691.4kbits/s dup=8 drop=1 speed=0.864x
video:666kB audio:47kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.901717%
[aac @ 0000022af0d5c100] Qavg: 242.688
Input #0 start:9251.65200,
Input #2 start:9252.378000
these two audio inputs are having minimal delay. But no information for ddagrab starttime maybe because it is acting as a filter and not a input device.
Whatever, It was just an observation.
After the desktop capture process when I am watching output.mp4 I am facing an audio delay.
I tried to capture @30fps but no improvement.
One possible solution could be to delay my video using -itsoffset option. These stack overflow and superuser solutions only work with pre-recorded videos,
https://stackoverflow.com/questions/63237572/ffmpeg-delay-video-in-overlay
In ffmpeg, how to delay only the audio of a .mp4 video without converting the audio?
But I am capturing and encoding on the go (ie. at same time).
I am a novice at video editing and ffmpeg. I am using latest release build from gyan.dev.
ffmpeg version 6.0-full_build-www.gyan.dev Copyright (c) 2000-2023 the FFmpeg developers
built with gcc 12.2.0 (Rev10, Built by MSYS2 project)
configuration:
--enable-gpl --enable-version3 --enable-static --disable-w32threads
--disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls
--enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma
--enable-libsnappy --enable-zlib --enable-librist --enable-libsrt
--enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray
--enable-libcaca --enable-sdl2 --enable-libaribb24 --enable-libdav1d
--enable-libdavs2 --enable-libuavs3d --enable-libzvbi --enable-librav1e
--enable-libsvtav1 --enable-libwebp --enable-libx264 --enable-libx265
--enable-libxavs2 --enable-libxvid --enable-libaom --enable-libjxl
--enable-libopenjpeg --enable-libvpx --enable-mediafoundation
--enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi
--enable-liblensfun --enable-libvidstab --enable-libvmaf --enable-libzimg
--enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec
--enable-nvdec --enable-nvenc --enable-d3d11va --enable-dxva2
--enable-libvpl --enable-libshaderc --enable-vulkan --enable-libplacebo
--enable-opencl --enable-libcdio --enable-libgme --enable-libmodplug
--enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame
--enable-libshine --enable-libtheora --enable-libtwolame
--enable-libvo-amrwbenc --enable-libilbc --enable-libgsm
--enable-libopencore-amrnb --enable-libopus --enable-libspeex
--enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite
--enable-libmysofa --enable-librubberband --enable-libsoxr
--enable-chromaprint
libavutil 58. 2.100 / 58. 2.100
libavcodec 60. 3.100 / 60. 3.100
libavformat 60. 3.100 / 60. 3.100
libavdevice 60. 1.100 / 60. 1.100
libavfilter 9. 3.100 / 9. 3.100
libswscale 7. 1.100 / 7. 1.100
libswresample 4. 10.100 / 4. 10.100
libpostproc 57. 1.100 / 57. 1.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...