基礎統計学の準備

そろそろ4月です。また講義のシーズンがやってきます。

29年度の基礎統計学では、動画もとりいれて、RStudioの使い方を説明したいと思っています。そのため、パソコン上の画面 (ブラウザのウィンドウ)を録画しながら、マイクからの音声も録音しなければならない。最初は既存のソフトを使おうと思っていたが、やりたかったことができない。何よやりたかったのかんというと、
  1. ブラウザのサイズを1280x720に固定する
  2. ffmpeg を使って、選んだウィンドウを録画する
  3. マイクからの音声を同時に録音する。
  4. マイクの音声をヘッドフォンを使ってミニたリングする。
実は、この4つの作業は簡単にできないので、次のBASHスクリプトを作ってみました。

#!/bin/bash
# This script is used to resize and select a window for recording. 
# It will also setup the mic so that you can monitor the output 
# with headphones. I am running this on Debian Wheezy
# 2017-03-16

if [ -n "$1" ]; then
  OUTFILE="initial_$1.mkv"
  OUTFILE2="final_$1.mkv"
else
  TIME=$(date +%d-%b-%y_%H%M-%Z)
  OUTFILE="initial_recording_$TIME.mkv"
  OUTFILE2="final_recording_$TIME.mkv"
fi

FPS=30
MAX_WIDTH=1920
MAX_HEIGHT=1080
MIC_DEV='AT2020USB' # This is the name of the mic
echo "Choose the window to resize. It will resize to 1280x720"
# This command is used to choose the size of the window.
wmctrl -r :SELECT: -e 0,-1,-1,1280,720  

echo "Choose the window to record."
# This command is used to select the window to record.
INFO=$(xwininfo) 

WIN_GEOM=$(echo $INFO | grep -oEe 'geometry [0-9]+x[0-9]+' | \
  grep -oEe '[0-9]+x[0-9]+')
WIN_XY=$(echo $INFO | grep -oEe 'Corners:\s+\+[0-9]+\+[0-9]+' | \
  grep -oEe '[0-9]+\+[0-9]+' | sed -e 's/\+/,/' )

# Set up the mic monitor with pactl.
ID=$(pactl load-module module-loopback)

# Run ffmpeg twice. The first time will save the x11 output to a 
# lossless uncompressed file. The second time, it will compress 
# the file in a lossless format. 
ffmpeg -thread_queue_size 512 -f pulse -ac 2 -i default \
  -video_size $WIN_GEOM -framerate $FPS -f x11grab \
  -i :0.0+$WIN_XY -vcodec libx264 -crf 0 \
  -preset ultrafast -acodec pcm_s16le -framerate $FPS $OUTFILE -y
ffmpeg -i $OUTFILE \
  -vf scale="iw*sar*min($MAX_WIDTH/(iw*sar)\,$MAX_HEIGHT/ih):\
  ih*min($MAX_WIDTH/(iw*sar)\,$MAX_HEIGHT/ih),pad=$MAX_WIDTH:\
  $MAX_HEIGHT:(ow-iw)/2:(oh-ih)/2" -vcodec libx264 -qp 0 \
  -preset veryslow -acodec copy $OUTFILE2 -y

# wait a few seconds before unloading the loopback module.
sleep 5
pactl unload-module $ID

# Remove the initial mkv file made by the first instance of ffmpeg.
rm $OUTFILE

コメント

このブログの人気の投稿

RStudioとggplot():プロットができないとき

光合成関連の単語

大村湾調査!! ~海藻・生き物編~