14
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

windowsでffmpegを使ってデスクトップ動画を保存

Last updated at Posted at 2018-12-08

忘れがちな技としてデスクトップを動画保存するにはどうするか?ってのがある。
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" .....
みたいに使います。

14
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?