Я использую ffmpeg для захвата активности chrome (благодаря драйверу chrome) и записи ее в файл mp4. Однако память, используемая ffmpeg, быстро взрывается, и примерно через минуту мои 8 ГБ памяти переполняются, и я должен перезагрузить P C.
Unbuntu 16.0 ALSA loopback (установленный modprobe snd -al oop) ffmpeg версия 4.2.2-1ubuntu1 ~ 16.04.york0
Это командная строка для ffmpeg:
ffmpeg -y -v info -f x11grab -draw_mouse 0 -r 30 -s 1280x720 -thread_queue_size 4096
-i :0.0+0,0 -f alsa -thread_queue_size 4096 -i plug:cloop -acodec aac -strict -2 -ar 44100
-c:v libx264 -preset veryfast -profile:v main -level 3.1 -pix_fmt yuv420p -r 30
-crf 25 -g 60 -tune zerolatency -f mp4 file.mp4
Если я удаляю все звуковые данные (-i plug: cl oop -acode c aa c -strict -2 -ar 44100), тогда память в порядке, стабильна, но сгенерированный файл не может быть воспроизведен с VL C или медиаплеером.
Логи от ffmpeg выглядят нормально для меня:
root$ ffmpeg -rtbufsize 15M -y -v info -f x11grab -draw_mouse 0 -r 30 -s 1280x720 -thread_queue_size 4096 -i :0.0+0,0 -f alsa -thread_queue_size 4096 -i hw:0 -acodec ac3_fixed -strict -2 -ar 44100 -c:v libx264 -preset veryfast -profile:v main -level 3.1 -pix_fmt yuv420p -r 30 -crf 25 -g 60 -tune zerolatency -f mp4 /tmp/recordings/stuff.mp4
ffmpeg version 2.8.15-0ubuntu0.16.04.1 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.10) 20160609
configuration: --prefix=/usr --extra-version=0ubuntu0.16.04.1 --build-suffix=-ffmpeg --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --cc=cc --cxx=g++ --enable-gpl --enable-shared --disable-stripping --disable-decoder=libopenjpeg --disable-decoder=libschroedinger --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librtmp --enable-libschroedinger --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzvbi --enable-openal --enable-opengl --enable-x11grab --enable-libdc1394 --enable-libiec61883 --enable-libzmq --enable-frei0r --enable-libx264 --enable-libopencv
libavutil 54. 31.100 / 54. 31.100
libavcodec 56. 60.100 / 56. 60.100
libavformat 56. 40.101 / 56. 40.101
libavdevice 56. 4.100 / 56. 4.100
libavfilter 5. 40.101 / 5. 40.101
libavresample 2. 1. 0 / 2. 1. 0
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 2.101 / 1. 2.101
libpostproc 53. 3.100 / 53. 3.100
Input #0, x11grab, from ':0.0+0,0':
Duration: N/A, start: 1587042601.295126, bitrate: N/A
Stream #0:0: Video: rawvideo (BGR[0] / 0x524742), bgr0, 1280x720, 30 fps, 30 tbr, 1000k tbn, 30 tbc
Guessed Channel Layout for Input Stream #1.0 : stereo
Input #1, alsa, from 'hw:0':
Duration: N/A, start: 1587042601.304179, bitrate: 1536 kb/s
Stream #1:0: Audio: pcm_s16le, 48000 Hz, 2 channels, s16, 1536 kb/s
[libx264 @ 0x928ee0] using cpu capabilities: MMX2 SSE Cache64
[libx264 @ 0x928ee0] profile Main, level 3.1
Output #0, mpegts, to '/tmp/recordings/stuff.ts':
Metadata:
encoder : Lavf56.40.101
Stream #0:0: Video: h264 (libx264), yuv420p, 1280x720, q=-1--1, 30 fps, 90k tbn, 30 tbc
Metadata:
encoder : Lavc56.60.100 libx264
Stream #0:1: Audio: ac3 (ac3_fixed), 44100 Hz, stereo, s16p, 192 kb/s
Metadata:
encoder : Lavc56.60.100 ac3_fixed
Stream mapping:
Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (libx264))
Stream #1:0 -> #0:1 (pcm_s16le (native) -> ac3 (ac3_fixed))
Press [q] to stop, [?] for help
frame= 7 fps=0.0 q=21.0 size= 5kB time=00:00:00.23 bitrate= 180.5kbits/s frame= 15 fps= 15 q=21.0 size= 15kB time=00:00:00.50 bitrate= 240.6kbits/s frame= 21 fps= 14 q=21.0 size= 21kB time=00:00:00.70 bitrate= 249.2kbits/s frame= 28 fps= 14 q=21.0 size= 28kB time=00:00:00.93 bitrate= 246.5kbits/s frame= 35 fps= 13 q=21.0 size= 35kB time=00:00:01.16 bitrate= 244.9kbits/s frame= 42 fps= 13 q=21.0 size= 44kB time=00:00:01.40 bitrate= 260.0kbits/s frame= 49 fps= 13 q=21.0 size= 51kB time=00:00:01.63 bitrate= 256.9kbits/s frame= 56 fps= 13 q=21.0 size= 58kB time=00:00:01.86 bitrate= 254.6kbits/s frame= 63 fps= 13 q=22.0 size= 66kB time=00:00:02.10 bitrate= 255.7kbits/s frame= 70 fps= 13 q=21.0 size= 75kB time=00:00:02.33 bitrate= 263.0kbits/s frame= 77 fps= 13 q=21.0 size= 82kB time=00:00:02.56 bitrate= 261.3kbits/s frame= 79 fps= 13 q=21.0 Lsize= 85kB time=00:00:02.63 bitrate= 264.4kbits/s
video:8kB audio:61kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 22.604090%
[libx264 @ 0x928ee0] frame I:2 Avg QP: 5.10 size: 760
[libx264 @ 0x928ee0] frame P:77 Avg QP: 6.78 size: 88
[libx264 @ 0x928ee0] mb I I16..4: 99.9% 0.0% 0.1%
[libx264 @ 0x928ee0] mb P I16..4: 0.0% 0.0% 0.0% P16..4: 0.0% 0.0% 0.0% 0.0% 0.0% skip:100.0%
[libx264 @ 0x928ee0] coded y,uvDC,uvAC intra: 0.0% 0.1% 0.0% inter: 0.0% 0.0% 0.0%
[libx264 @ 0x928ee0] i16 v,h,dc,p: 91% 0% 9% 0%
[libx264 @ 0x928ee0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 0% 0% 100% 0% 0% 0% 0% 0% 0%
[libx264 @ 0x928ee0] i8c dc,h,v,p: 98% 2% 0% 0%
[libx264 @ 0x928ee0] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 0x928ee0] kb/s:25.23
Exiting normally, received signal 2.
Это мой файл .asoundr c.
# playback PCM device: using loopback subdevice 0,0
pcm.amix {
type dmix
ipc_key 219345
slave.pcm "hw:Loopback,0,0"
}
# capture PCM device: using loopback subdevice 0,1
pcm.asnoop {
type dsnoop
ipc_key 219346
slave.pcm "hw:Loopback,0,1"
}
# duplex device combining our PCM devices defined above
pcm.aduplex {
type asym
playback.pcm "amix"
capture.pcm "asnoop"
}
# ------------------------------------------------------
# for jack alsa_in and alsa_out: looped-back signal at other ends
pcm.ploop {
type plug
slave.pcm "hw:Loopback,1,1"
}
pcm.cloop {
type dsnoop
ipc_key 219348
slave.pcm "hw:Loopback,1,0"
}
# ------------------------------------------------------
# default device
pcm.!default {
type plug
slave.pcm "aduplex"
}
Я не уверен, как отлаживать такого рода проблемы, есть идеи, почему память так быстро взрывается?