Ubuntu や Linux Mint で、[Ctrl] + [Alt] + [Shift] + [R] を押せばスクリーンキャスト(デスクトップ画面の録画と録音)ができるという記事をネット上でちらほら見たのですが、残念ながら自分の環境では [Ctrl] + [Alt] + [Shift] + [R] を押しても何も起こらないので、フリーでオープンソースのエンコーダーである ffmpeg でデスクトップ画面の録画と録音をしてみたいと思います。
環境は Linux Mint 22 “Wilma” MATE Edition です。また、今回使用しているPCは AMD Ryzen 9 7900X (12コア / 24スレッド) を搭載したサブPC1 (自作PC)です。
自作PCの詳しいスペックについては About をご覧ください。
下準備
ffmpeg のインストール
まず最初に、ffmpegがインストールされているか確認します。
$ which ffmpeg
ffmpegがインストールされていなければ、以下のコマンドでインストールします。
$ sudo apt -y install ffmpeg
ffmpegをソースコードからコンパイルしても良いですが、かなり時間と手間がかかりそれなりの知識も必要になるので、中級者や上級者向けです。2年ほど前、ソースコードからffmpegをコンパイル方法を書いたので、興味のある方はどうぞ。
デスクトップの録画や録音をする
[Ctrl] + [Alt] + [T] で端末(ターミナル)を開き、後述するffmpeg設定を [Ctrl] + [Shift] + [V] で端末にコピペして実行すれば、デスクトップ画面の録画ができます。
デスクトップ画面の録画や録音を停止させるには、端末でキーボードの [Q] キーをタイプすれば終了します。
デスクトップ画面の録画や録音をするffmpeg設定
画面の録画などは低圧縮で録画して、後から高圧縮にエンコードするのが基本なのですが、自分の場合は面倒なので最初からある程度圧縮する設定にしています。
もしエンコード負荷が高すぎて画面の録画が追いつかない場合やうまく録画できない場合は、オプションやパラメーターをいじってください。
デスクトップ画面の録画 (音声なし)
MP4 (H.264) 形式でデスクトップの画面を録画
$ ffmpeg -threads 0 -y -f x11grab -probesize 50M -i :0.0 -c:v libx264 -s 1920x1080 -aspect 16:9 -r 60 -qp 15 -preset fast -an ~/Desktop/OutputFile_"$(date +'%Y%m%d_%H%M%S')".mp4
-c:v libx264 | 動画形式を指定 H.264 |
-s 1920×1080 | 動画の解像度を指定 1920×1080 |
-aspect 16:9 | 動画のアスペクト比 16:9 |
-r 60 | フレームレートを指定 60fps |
-qp 15 | 動画の品質指定 15 |
-preset fast | エンコードのプリセット設定を指定 fast |
-an | 音声を出力しない |
~/Desktop/OutputFile_”$(date +’%Y%m%d_%H%M%S’)”.mp4 | 録画した動画の出力先 Desktopディレクトリに「OutputFile_現在の日時.mp4」という名前で動画を出力 |
WebM (VP8) 形式でデスクトップ画面を録画
$ ffmpeg -threads 0 -y -f x11grab -s 1920x1080 -r 60 -probesize 50M -thread_queue_size 8192 -i :0.0 -c:v libvpx -aspect 16:9 -cpu-used 5 -b:v 4096k -an ~/Desktop/OutputFile_"$(date +'%Y%m%d_%H%M%S')".webm
-c:v libvpx | 動画形式を指定 VP8 |
-s 1920×1080 | 動画の解像度を指定 1920×1080 |
-aspect 16:9 | 動画のアスペクト比 16:9 |
-r 60 | フレームレートを指定 60fps |
-b:v 4096k | 動画のビットレートを指定 4096kbps |
-an | 音声を出力しない |
~/Desktop/OutputFile_”$(date +’%Y%m%d_%H%M%S’)”.webm | 録画した動画の出力先 Desktopディレクトリに「OutputFile_現在の日時.webm」という名前で動画を出力 |
デスクトップ画面の録音 (映像なし)
WAV形式でデスクトップの音声を録音
$ ffmpeg -threads 0 -y -f alsa -i default -vn -c:a pcm_s16le -ac 2 -ar 44100 ~/Desktop/OutputFile_"$(date +'%Y%m%d_%H%M%S')".wav
-c:a pcm_s16le | 音声形式を指定 16bitリニアPCM |
-ac 2 | 音声のチャンネル指定 2 (ステレオ) |
-ar 44100 | サンプリング周波数 44.1kHz / 44,100Hz |
-vn | 動画を出力しない |
~/Desktop/OutputFile_”$(date +’%Y%m%d_%H%M%S’)”.wav | 録音した音声の出力先 Desktopディレクトリに「OutputFile_現在の日時.wav」という名前で音声を出力 |
FLAC形式でデスクトップの音声を録音
$ ffmpeg -threads 0 -y -f alsa -i default -vn -c:a flac -ac 2 -ar 44100 -compression_level 3 ~/Desktop/OutputFile_"$(date +'%Y%m%d_%H%M%S')".flac
-c:a flac | 音声形式を指定 FLAC |
-ac 2 | 音声のチャンネル指定 2 (ステレオ) |
-ar 44100 | サンプリング周波数 44.1kHz / 44,100Hz |
-compression_level 3 | FLACの圧縮レベル指定 3 |
-vn | 動画を出力しない |
~/Desktop/OutputFile_”$(date +’%Y%m%d_%H%M%S’)”.flac | 録音した音声の出力先 Desktopディレクトリに「OutputFile_現在の日時.flac」という名前で音声を出力 |
-compression_level
は、圧縮レベルを指定するためのオプションです。指定範囲は 0~12 で数字が大きいほど圧縮率を重視し、数字が小さいほどエンコード速度を重視します。
録音ではエンコード速度が重要なので基本的に小さい値を指定します。
MP3形式でデスクトップの音声を録音
$ ffmpeg -threads 0 -y -f alsa -i default -vn -c:a libmp3lame -b:a 320k -ac 2 -ar 44100 ~/Desktop/OutputFile_"$(date +'%Y%m%d_%H%M%S')".mp3
-c:a libmp3lame | 音声形式を指定 MP3 |
-b:a 320k | 音声のビットレートを指定 320kbps |
-ac 2 | 音声のチャンネル指定 2 (ステレオ) |
-ar 44100 | サンプリング周波数 44.1kHz / 44,100Hz |
-vn | 動画を出力しない |
~/Desktop/OutputFile_”$(date +’%Y%m%d_%H%M%S’)”.mp3 | 録音した音声の出力先 Desktopディレクトリに「OutputFile_現在の日時.mp3」という名前で音声を出力 |
AAC形式でデスクトップの音声を録音
$ ffmpeg -threads 0 -y -f alsa -i default -vn -c:a aac -b:a 320k -ac 2 -ar 44100 ~/Desktop/OutputFile_"$(date +'%Y%m%d_%H%M%S')".m4a
-c:a aac | 音声形式を指定 AAC |
-b:a 320k | 音声のビットレートを指定 320kbps |
-ac 2 | 音声のチャンネル指定 2 (ステレオ) |
-ar 44100 | サンプリング周波数 44.1kHz / 44,100Hz |
-vn | 動画を出力しない |
~/Desktop/OutputFile_”$(date +’%Y%m%d_%H%M%S’)”.m4a | 録音した音声の出力先 Desktopディレクトリに「OutputFile_現在の日時.m4a」という名前で音声を出力 |
Ogg Vorbis形式でデスクトップの音声を録音
$ ffmpeg -threads 0 -y -f alsa -i default -vn -c:a libvorbis -b:a 128k -ac 2 -ar 44100 ~/Desktop/OutputFile_"$(date +'%Y%m%d_%H%M%S')".ogg
-c:a libvorbis | 音声形式を指定 Ogg Vorbis |
-b:a 128k | 音声のビットレートを指定 128kbps |
-ac 2 | 音声のチャンネル指定 2 (ステレオ) |
-ar 44100 | サンプリング周波数 44.1kHz / 44,100Hz |
-vn | 動画を出力しない |
~/Desktop/OutputFile_”$(date +’%Y%m%d_%H%M%S’)”.ogg | 録音した音声の出力先 Desktopディレクトリに「OutputFile_現在の日時.ogg」という名前で音声を出力 |
Opus形式でデスクトップの音声を録音
$ ffmpeg -threads 0 -y -vn -f alsa -i default -c:a libopus -b:a 128k -ac 2 -ar 48000 ~/Desktop/OutputFile_"$(date +'%Y%m%d_%H%M%S')".webm
-c:a libopus | 音声形式を指定 Opus |
-b:a 128k | 音声のビットレートを指定 128kbps |
-ac 2 | 音声のチャンネル指定 2 (ステレオ) |
-ar 48000 | サンプリング周波数 48kHz / 48,000Hz |
-vn | 動画を出力しない |
~/Desktop/OutputFile_”$(date +’%Y%m%d_%H%M%S’)”.opus | 録音した音声の出力先 Desktopディレクトリに OutputFile.webm という名前で動画を出力 |
デスクトップ画面の録画と録音 (映像+音声)
MP4 (H.264+AAC) 形式で録画と録音をする
$ ffmpeg -threads 0 -y -f x11grab -s 1920x1080 -r 60 -probesize 50M -thread_queue_size 8192 -i :0.0 -f alsa -i default -c:v libx264 -aspect 16:9 -qp 15 -preset ultrafast -c:a aac -b:a 320k -ac 2 -ar 44100 ~/Desktop/OutputFile_"$(date +'%Y%m%d_%H%M%S')".mp4
-c:v libx264 | 動画形式を指定 H.264 |
-c:a aac | 音声形式を指定 AAC |
-s 1920×1080 | 動画の解像度を指定 1920×1080 |
-aspect 16:9 | 動画へのアスペクト比 16:9 |
-r 60 | フレームレートを指定 60fps |
-qp 15 | 動画の品質指定 15 |
-preset ultrafast | エンコードのプリセット設定を指定 ultrafast |
-b:a 320k | 音声のビットレートを指定 320kbps |
-ac 2 | 音声のチャンネル指定 2 (ステレオ) |
-ar 44100 | サンプリング周波数 44.1kHz / 44,100Hz |
~/Desktop/OutputFile_”$(date +’%Y%m%d_%H%M%S’)”.mp4 | 録画した動画の出力先 Desktopディレクトリに「OutputFile_現在の日時.mp4」という名前で動画を出力 |
MP4 (H.265+AAC) 形式で録画と録音をする
$ ffmpeg -threads 0 -y -f x11grab -s 1920x1080 -r 60 -probesize 50M -thread_queue_size 8192 -i :0.0 -f alsa -i default -c:v hevc -aspect 16:9 -b:v 4096k -c:a aac -b:a 320k -ac 2 -ar 44100 ~/Desktop/OutputFile_"$(date +'%Y%m%d_%H%M%S')".mp4
-c:v hevc | 動画形式を指定 H.265 |
-c:a aac | 音声形式を指定 AAC |
-s 1920×1080 | 動画の解像度を指定 1920×1080 |
-aspect 16:9 | 動画のアスペクト比 16:9 |
-r 60 | フレームレートを指定 60fps |
-b:v 4096k | 動画のビットレートを指定 4096kbps |
-b:a 320k | 音声のビットレートを指定 320kbps |
-ac 2 | 音声のチャンネル指定 2 (ステレオ) |
-ar 44100 | サンプリング周波数 44.1kHz / 44,100Hz |
~/Desktop/OutputFile_”$(date +’%Y%m%d_%H%M%S’)”.mp4 | 録画した動画の出力先 Desktopディレクトリに「OutputFile_現在の日時.mp4」という名前で動画を出力 |
WebM (VP8+Opus) 形式で録画と録音をする
$ ffmpeg -threads 0 -y -f x11grab -s 1920x1080 -r 60 -probesize 50M -thread_queue_size 8192 -i :0.0 -f alsa -i default -c:v libvpx -aspect 16:9 -cpu-used 5 -b:v 4096k -c:a libopus -b:a 128k -ac 2 -ar 48000 ~/Desktop/OutputFile_"$(date +'%Y%m%d_%H%M%S')".webm
-c:v libvpx | 動画形式を指定 VP8 |
-c:a libopus | 音声形式を指定 Opus |
-s 1920×1080 | 動画の解像度を指定 1920×1080 |
-aspect 16:9 | 動画のアスペクト比 16:9 |
-r 60 | フレームレートを指定 60fps |
-b:v 4096k | 動画のビットレートを指定 4096kbps |
-b:a 128k | 音声のビットレートを指定 128kbps |
-ac 2 | 音声のチャンネル指定 2 (ステレオ) |
-ar 48000 | サンプリング周波数 48kHz / 48,000Hz |
~/Desktop/OutputFile_”$(date +’%Y%m%d_%H%M%S’)”.webm | 録画した動画の出力先 Desktopディレクトリに「OutputFile_現在の日時.webm」という名前で動画を出力 |
MKV (H.264+FLAC) 形式で録画と録音をする
この設定はロスレス(可逆圧縮)でエンコードしますが、4分50秒の録画でファイルサイズが 1.0GB 近くなりますので注意してください。
$ ffmpeg -threads 0 -y -f x11grab -s 1920x1080 -r 60 -probesize 50M -thread_queue_size 8192 -i :0.0 -f alsa -i default -c:v libx264 -aspect 16:9 -qp 0 -preset medium -c:a flac -ac 2 -ar 44100 -compression_level 0 ~/Desktop/OutputFile_"$(date +'%Y%m%d_%H%M%S')".mkv
-c:v libx264 | 動画形式を指定 H.264 |
-c:a flac | 音声形式を指定 FLAC |
-s 1920×1080 | 動画の解像度を指定 1920×1080 |
-aspect 16:9 | 動画のアスペクト比 16:9 |
-r 60 | フレームレートを指定 60fps |
-qp 0 | 動画の品質指定 0 (ロスレス) |
-compression_level 0 | FLACの圧縮レベル指定 0 |
-ac 2 | 音声のチャンネル指定 2 (ステレオ) |
-ar 44100 | サンプリング周波数 44.1kHz / 44,100Hz |
~/Desktop/OutputFile_”$(date +’%Y%m%d_%H%M%S’)”.mkv | 録画した動画の出力先 Desktopディレクトリに「OutputFile_現在の日時.mkv」という名前で動画を出力 |
コメント