Skypeでビデオインタビューを録画したいのですが、そのための信頼できるツールを探しています。
遅くもバギーもない何かがありますか?
(K)Ubuntuを実行しています。
このコマンドは、デスクトップ全体をキャプチャします。スカイプ会話(または他の何か)を記録したいときはいつでも、このコマンドを使用してください。
ffmpeg -f x11grab -s wxga -r 25 -i :0.0 -sameq /tmp/out.mpg
ソフトウェアrecordMyDesktop http://recordmydesktop.sourceforge.net/about.php を使用すると、画面の任意の部分を記録できます。私はそれを使ってスカイプセッションを記録します。
Sudo apt-get install recordmydesktop
メインチャネルからインストールします。
Ffmpegと利用可能なヘルプ記事(このサイトを含む)の数のおかげで、通話中(またはX11デスクトップアクティビティ中)にライブビデオとオーディオを録画することはそれほど難しくありません。ただし、より高い品質を目指すと、メディアを同時に取得して圧縮するという単純なアプローチの限界にすぐに到達してしまいます。したがって、次のことを可能にするツール(またはツールのセット)の必要性。
次のBashスクリプト(myrec
、myrec-novideo
およびmyproc
)は、このタスクでの私の試みです。これらのスクリプトを書く方法はきちんと整っていると思いますが、私は外出先でBashスクリプトを学習していました(動作するようになったら、非常に満足して、追加する可能性があります)。
ffmpeg
pulseaudio
skype
1
または2
がシステムにない場合は、お好みのパッケージマネージャーでインストールします(私はsynaptic
を使用しています)。 skype
については www.skype.com にアクセスしてください。
myrec
myrec
(またはあなたのために機能する任意の名前)として保存しますmyrec
を実行可能にします:chmod +x myrec
User settings
セクションを設定に合わせて変更します。
#!/bin/bash
echo "Record lossless audio and lossless video for further processing."
echo "Created file name always starts with temp_YYYYMMDD_HHMMSS."
echo "Syntax:"
echo "myrec [optional file description]"
echo "Optional file description is appended to the file name, with spaces replaced by underscores."
echo
echo
### User settings - adjust values to suit your system and needs
# I used to have the name of my webcam mic here, but that stopped working after a system update. "default" was the only fix I found. If you have more than one microphone connected, you may need to tell Pulseaudio which mic you want to be the default, I think pavucontrol is the utility for it.
# If you want to try supplying a name here, run pacmd, then within it the command list-sources will give you a list of possible microphones. Use the name field value without angle brackets.
microphone_audio_device="default"
# Run pacmd, within it the command list-sinks will give you a list of devices to choose from. Use the name field value without angle brackets.
speakers_audio_device="alsa_output.pci-0000_00_1b.0.analog-stereo.monitor"
# Select frame size.
# Some standard frame sizes for reference:
# wvga 852x480
# wxga 1366x768
# wsxga 1600x1024
# wuxga 1920x1200
# woxga 2560x1600
# wqsxga 3200x2048
# wquxga 3840x2400
# whsxga 6400x4096
# whuxga 7680x4800
frame_size="wsxga"
# Framerate in frames per second
framerate="30"
# Indicate which screen the video should be recorded from and an optional offset.
# For example:
# :0.0+10,20
# where 0.0 is display.screen number of your X11 server, same as the DISPLAY environment variable. 10 is the x-offset and 20 the y-offset of the frame, measured from the top left corner of the screen to the top left corner of the frame.
frame_position=":0.0"
# Include the trailing slash after target directory name.
# Expect a very large file!
target_directory="/target/directory/name/"
### End of user settings
record_command="ffmpeg -f Pulse -thread_queue_size 512k -i $speakers_audio_device -f Pulse -thread_queue_size 512k -i $microphone_audio_device -f x11grab -s $frame_size -r $framerate -thread_queue_size 512k -i $frame_position -map 0 -map 1 -map 2 -codec:a copy -codec:v libx264 -qp 0 -preset ultrafast"
temporary_file_prefix="temp_"
# The IFS (Internal Field Separator) system variable stores the character that separates command line arguments.
# We can use it to replace spaces with underscores.
temp=$IFS
IFS='_'
description="$*"
IFS=$temp
if [ $# -eq 0 ]; then
$record_command $target_directory$temporary_file_prefix`date +%Y%m%d_%H%M%S`.mkv
else
$record_command $target_directory$temporary_file_prefix`date +%Y%m%d_%H%M%S`_$description.mkv
fi
オーディオのみの録音は、次のセクションの別のスクリプトで処理されます。
myrec-novideo
myrec-novideo
(またはあなたのために働くどんな名前でも)として保存してくださいmyrec-novideo
を実行可能にします:chmod +x myrec-novideo
User settings
セクションを設定に合わせて変更します。
#!/bin/bash
echo "Record lossless audio for further processing."
echo "Created file name always starts with temp_YYYYMMDD_HHMMSS."
echo "Syntax:"
echo "myrec-novideo [optional file description]"
echo "Optional file description is appended to the file name, with spaces replaced by underscores."
echo
echo
### User settings - adjust values to suit your system
# I used to have the name of my webcam mic here, but that stopped working after a system update. "default" was the only fix I found. If you have more than one microphone connected, you may need to tell Pulseaudio which mic you want to be the default, I think pavucontrol is the utility for it.
# If you want to try supplying a name here, run pacmd, then within it the command list-sources will give you a list of possible microphones. Use the name field value without angle brackets.
microphone_audio_device="default"
# Run pacmd, within it the command list-sinks will give you a list of devices to choose from. Use the name field value without angle brackets.
speakers_audio_device="alsa_output.pci-0000_00_1b.0.analog-stereo.monitor"
# Include the trailing slash after target directory name.
# Expect a large file!
target_directory="/target/directory/name/"
### End of user settings
record_command="ffmpeg -f Pulse -thread_queue_size 512k -i $speakers_audio_device -f Pulse -thread_queue_size 512k -i $microphone_audio_device -map 0 -map 1 -codec:a copy -codec:a copy"
temporary_file_prefix="temp_"
# The IFS (Internal Field Separator) system variable stores the character that separates command line arguments.
# We can use it to replace spaces with underscores.
temp=$IFS
IFS='_'
description="$*"
IFS=$temp
if [ $# -eq 0 ]; then
$record_command $target_directory$temporary_file_prefix`date +%Y%m%d_%H%M%S`.mkv
else
$record_command $target_directory$temporary_file_prefix`date +%Y%m%d_%H%M%S`_$description.mkv
fi
myproc
myproc
(またはあなたのために機能する任意の名前)として保存しますmyproc
を実行可能にします:chmod +x myproc
User settings
セクションを設定に合わせて変更します。
#!/bin/bash
echo "Compress files recorded with myrec or myrec-novideo."
echo "For files to be processed they need to reside in the storage directory and start with temp_"
echo "The two audio tracks (mic and speakers) are mixed together into one new stream, but they are also available as separate tracks in the final file."
# Mixing is because players I know cannot play two audio tracks from the same file simultaneously.
# The mic also captures sounds produced by the speakers. It has two effects:
# 1. You can use this single track to hear both yourself (the mic) and whatever came out of your speakers. Personally I did not like the degraded quality of recorded speaker sounds, hence the direct recording off the sound card and mixing that with the mic track.
# 2. Speaker sounds recorded by the mic are slightly delayed when compared to the direct recording off the sound card. The mixed track is thus hard to listen to.
# I do have echo cancellation module loaded in Pulseaudio, perhaps there is something wrong with my configuration?
### User settings
# Indicate storage directory without the trailing slash
storage_directory="/storage/directory/name"
### End of user settings
# Any temp_ file may contain 3 streams (audio, audio, video) indexed as (0, 1, 2), or just 2 streams (audio, audio) indexed as (0, 1).
# A file temp2_ contains just one stream: both audio streams from temp_ mixed.
# The step with temp2_ is necessary as the mixing option (-filter_complex) is a global option (i.e. not stream-specific). Attempts at doing it all in one go prevent the separate tracks from being copied into the final file.
for f in $storage_directory/temp_*
do
if [ -e ${f/temp_/} ]
then
# Do not overwrite an existing final file. Prevents unnecessary work when the script is run regularly as a cron job.
echo "$f: A final file (without temp_) already exists. Skipping. If you want to reencode, please delete the final file manually."
else
# Variable g will contain the name of the second temporary file with both audio streams mixed into one.
g=${f/temp_/temp2_}
# Mixing mic and sound card tracks into one stream
ffmpeg -i "$f" -map 0:0 -map 0:1 -filter_complex amix=inputs=2:duration=longest:dropout_transition=2 -codec:a libvorbis -n "$g"
# Create the final file: copy the mixed audio stream from temp2_, add and compress both separate audio streams from temp_, compress at high quality the video stream from temp_.
# The question mark in -map 0:2? tells ffmpeg to ignore the error if this stream (video) is missing. Allows this same script to be used for audio-only recordings.
ffmpeg -i "$f" -i "$g" -map 1:0 -map 0:0 -map 0:1 -map 0:2? -codec:a:0 copy -codec:a:1 libvorbis -codec:a:2 libvorbis -codec:v libx264 -qp 18 -preset slow -threads 0 -n "${g/temp2_/}"
# Delete temp2_
rm "$g"
fi
done
ffmpeg
の柔軟性のおかげで、myproc
は、ビデオストリームが含まれているファイルと含まれていないファイルを処理できます。
myrec
に設定を伝えてください。一般に、ビデオコールウィンドウをWebカメラの近くのどこかに配置して、反対側の人があなたが自分の目を見ているかのように思わせるようにします。端末ウィンドウを開いておきます。記録を開始したいときはいつでも、次のコマンドを使用します。
. myrec some description
. myrec-novideo some description
some description
は両方のスクリプトでオプションです。 Tab
キーを使用すると、スクリプト名を拡張して入力を節約できます。 ffmpeg
は、temp_YYYYMMDD_HHMMSS_some_description.mkv
という名前のファイルへの記録を開始します。ここで、YYYYMMDD_HHMMSS
は記録の日付と時刻です。
q
が記録しているターミナルウィンドウでffmpeg
を押します。. myproc
を実行して、ファイルを処理(圧縮)します。手動で行うことも、不在時にcron
ジョブを設定して行うこともできます。temp_
ファイルを削除します。default
のみを使用できます。以前はそこにマイク名がありましたが、この設定はシステムアップデート後に機能しなくなりました。それは、私のセットアップのみ、またはpulseaudio
に制限されている可能性があります。Pulse
のエコーキャンセレーションモジュールがロードされていますが、これは自分の音声エコーをキャンセルすることのみを目的としています。重要なのは、マイクオーディオがサウンドカードオーディオとミキシングされると、わずかな遅延により、結果のストリームが聞き取りにくくなることです。誰かがマイクがスピーカーからの音を録音しないようにする方法を知っていますか?これらのツールがお役に立てば幸いです。改善やコメントをお待ちしております。
Open Broadcaster Software(OBS)Studioは、これらすべての要件を使いやすいフロントエンドに結び付けます。
オープンソースであり、クロスプラットフォームです。
Ubuntu 15.04以降の場合:
Sudo add-apt-repository ppa:obsproject/obs-studio
Sudo apt-get update && Sudo apt-get install obs-studio ffmpeg
他のディストリビューション/以前のUbuntuバージョンについては、git wiki をチェックアウトしてください
xvidcapを使用すると、デスクトップから領域を選択して記録できます。次のコマンドで開始します
xvidcap
デフォルトで./test-0000.mpegでビデオを見つけます。