忘れがちな技としてデスクトップを動画保存するにはどうするか?ってのがある。
LINUXだとFFMPEGですぐできるのだが、WINDOWSで同じことをやってもできなかった。
それはWINDOWSだとX11と違うからだ。
その方法をあらためて調べた。ffmpegでデスクトップ動画保存する手法の調査結果となります。
まず動画だけ音声なしで保存はすぐできた。
ffmpeg -y -rtbufsize 100M -f gdigrab -t 00:00:30 -framerate 30 -probesize 10M -draw_mouse 1 -i desktop -c:v libx264 -r 30 -preset ultrafast -tune zerolatency -crf 25 -pix_fmt yuv420p video_comapre2.mp4
どうもgdigrabってのがキーらしい。
しかしながら、これ用のDIRECTSHOWのドライバーがあった。
それを入れるともっと便利
UScreenCaptureってやつ↓
http://www.umediaserver.net/components/index.html
http://www.umediaserver.net/bin/UScreenCapture.zip
http://www.umediaserver.net/bin/UScreenCapture(x64).zip
これをインストールすると
ffmpeg -f dshow -i video="UScreenCapture" out.mp4
でMP4で保存できる。便利だ。
なおできないときは
ffmpeg -list_devices true -f dshow -i dummy
でデバイスリストがでるのでそれにUScreenCaptureが出るのを確認。
私の場合これが出力された。
ffmpeg started on 2018-12-08 at 20:56:30
Report written to "ffmpeg-20181208-205630.log"
ffmpeg version 4.1 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 8.2.1 (GCC) 20181017
configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth
libavutil 56. 22.100 / 56. 22.100
libavcodec 58. 35.100 / 58. 35.100
libavformat 58. 20.100 / 58. 20.100
libavdevice 58. 5.100 / 58. 5.100
libavfilter 7. 40.101 / 7. 40.101
libswscale 5. 3.100 / 5. 3.100
libswresample 3. 3.100 / 3. 3.100
libpostproc 55. 3.100 / 55. 3.100
[dshow @ 00000000004b2400] DirectShow video devices (some may be both video and audio devices)
[dshow @ 00000000004b2400] "HP HD Webcam [Fixed]"
[dshow @ 00000000004b2400] Alternative name "@device_pnp_\\?\usb#vid_1bcf&pid_2888&mi_00#7&2497575&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global"
[dshow @ 00000000004b2400] "UScreenCapture"
[dshow @ 00000000004b2400] Alternative name "@device_sw_{860BB310-5D01-11D0-BD3B-00A0C911CE86}\UScreenCapture"
[dshow @ 00000000004b2400] "screen-capture-recorder"
[dshow @ 00000000004b2400] Alternative name "@device_sw_{860BB310-5D01-11D0-BD3B-00A0C911CE86}\{4EA69364-2C8A-4AE6-A561-56E4B5044439}"
[dshow @ 00000000004b2400] DirectShow audio devices
[dshow @ 00000000004b2400] "集積マイク アレイ (2- IDT High Definiti"
[dshow @ 00000000004b2400] Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\集積マイク アレイ (2- IDT High Definiti"
[dshow @ 00000000004b2400] "virtual-audio-capturer"
[dshow @ 00000000004b2400] Alternative name "@device_sw_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\{8E146464-DB61-4309-AFA1-3578E927E935}"
[dshow @ 00000000004b2400] "ステレオ ミキサー (2- IDT High Definiti"
[dshow @ 00000000004b2400] Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\ステレオ ミキサー (2- IDT High Definiti"
次に音付きでキャプチャの方法だが、それはドライバーを入れないとだめらしい。
”らしい”というのははっきり確認できないの意味
とりあえずそのドライバーはこれ
virtual-audio-capturer
https://ja.osdn.net/projects/sfnet_virtualaudiodev/
20200715追記:
ドライバーなしでマイクを直接取れます。つまりこの記述は間違いです。すみません
ただマイクにアクセスすると下のタスクバーにマイクにアクセス中のアイコンが出ます。ドライバーを入れるとそれが避けられます。(少なくとも私のWINDOWS10では)
例えばmp3で音だけ保存のときは
ffmpeg -f dshow -i audio="virtual-audio-capturer" "out.mp3"
うまく行かないときは
おなじく
ffmpeg -list_devices true -f dshow -i dummy
で確認。
最後にmp4動画保存は
ffmpeg -f dshow -i video="UScreenCapture":audio="virtual-audio-capturer" output.mp4
で成功する。
rtmpとかにもつかえるはずです。
後日オフィシャルな説明を知りました
https://trac.ffmpeg.org/wiki/Capture/Desktop
さらに追記NvidiaのPCだとうまくいかない(色がおかしい)ことがある。そのときは
ffmpeg -f dshow -i video="UScreenCapture":audio="virtual-audio-capturer" -c:v h264_nvenc -qp 0 output.mkv
もしくは
ffmpeg -f gdigrab -framerate 30 -i desktop -c:v h264_nvenc -qp 0 output22.mkv
h264_nvencてマニアックな引数があるってのが上の公式に載っている。
追記
最近になってUScreenCaptureに代わってscreen capture recorder to video windows free(長い!)
https://github.com/rdp/screen-capture-recorder-to-video-windows-free/releases
を使うようにした。メリットはメモリがキツイPCでも動くこととVIDEO,AUDIOが一括で入ることです。
ffmpeg -f dshow -i video=screen-capture-recorder:audio=virtual-audio-capturer" .....
みたいに使います。