LinuxでSkypeビデオ通話を録音する方法は?

LinuxでSkypeビデオ通話を録音する方法は?

私はSkypeを通じて録画されたビデオインタビューを行い、これを達成するための信頼できるツールを探しています。

ゆっくりも面倒でもないことがあるでしょうか?

私は(K)Ubuntuを実行しています。

答え1

このコマンドはデスクトップ全体をキャプチャします。したがって、Skypeの会話(またはその他)を録音したいときはいつでもこのコマンドを使用してください。

ffmpeg -f x11grab -s wxga -r 25 -i :0.0 -sameq /tmp/out.mpg   

答え2

ソフトウェア履歴がありますMyDesktophttp://recordmydesktop.sourceforge.net/about.php画面の好きな部分を録画できます。私はSkypeセッションを録音するために使用します。

sudo apt-get install recordmydesktop

メインチャンネルからインストールしてください。

答え3

背景

通話中(またはX11デスクトップ活動中)ライブビデオとオーディオを録音することは、ffmpegと利用可能な多くのヘルプ記事(このサイトを含む)のおかげで、それほど難しくありません。しかし、目標がより高品質であれば、メディアを同時にインポートして圧縮する簡単な方法の限界にすばやく到達します。したがって、次のことができるツール(またはツールセット)が必要です。

  1. 追加処理のためにファイルに圧縮せずに通話を録音します。電話をかけるときにオーディオにのみ興味があることを認識してください。
  2. 後で録音した通話を高品質に圧縮します。

次のBashスクリプト(myrec、、myrec-novideoおよびmyproc)はこの操作に対する私の試みです。このスクリプトを書くためのよりきれいな方法があると確信していますが、Bashスクリプトを学んでいます(追加することができ、それがうまくいくとかなり満足しています)。

前提条件

  1. ffmpeg
  2. pulseaudio
  3. skype

システムに存在するか存在しない1場合は、お気に入りのパッケージマネージャ(私が使用する)を使用してインストールしてください。見るために2synapticskypewww.スカイプ.com


ロスレスビデオとロスレスオーディオ記録 -myrec

  1. テキストファイルの作成
  2. myrec別の名前で保存するか、希望の名前で保存してください。
  3. myrec次のコマンドを実行して実行可能にします。chmod +x myrec
  4. 次のコードを貼り付け、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

  1. テキストファイルの作成
  2. myrec-novideo別の名前で保存するか、希望の名前で保存してください。
  3. myrec-novideo次のコマンドを実行して実行可能にします。chmod +x myrec-novideo
  4. 次のコードを貼り付け、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

  1. テキストファイルの作成
  2. myproc別の名前で保存するか、希望の名前で保存してください。
  3. myproc次のコマンドを実行して実行可能にします。chmod +x myproc
  4. 次のコードを貼り付け、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ビデオストリームを含めたり含めたりしない可能性があるファイルを処理できます。


スクリプトの使い方

  1. Skypeビデオ通話ウィンドウを画面に配置し、ウィンドウサイズを希望のサイズに設定します。 Skypeはこのウィンドウ設定を覚えているので、一度だけ実行できます。以降の各呼び出しでは、ウィンドウは同じサイズで同じ場所に表示されます。myrec設定を教えることを忘れないでください。通常、ビデオハングアウトウィンドウをウェブカメラの近くに配置して、相手が自分の目を見つめていると思うようにします。
  2. ターミナルウィンドウを開きます。録音を開始するには、いつでも次のコマンドを使用します。

    • オーディオとビデオの録画:. myrec some description
    • オーディオのみを録音する:. myrec-novideo some description

    some descriptionどちらのスクリプトでもオプションです。Tab一部の入力を保存するには、キーを使用してスクリプト名を拡張できます。録音日時のあるファイルffmpegに録音が始まります。temp_YYYYMMDD_HHMMSS_some_description.mkvYYYYMMDD_HHMMSS

  3. 停止する準備ができたら、録音q端末ウィンドウをタップします。ffmpeg
  4. . myprocファイルを処理(圧縮)するには実行してください。このタスクは、手動で実行したりcron不在時に実行するようにタスクを設定したりできます。
  5. 圧縮が期待どおりに機能していることを確認したら、ファイルを削除してくださいtemp_


質問

  1. マイクは名前で指定することはできず、特別な値のみを使用できますdefault。以前はマイク名がありましたが、システムアップデート後にこの設定が機能しなくなりました。これは私の設定に制限されているかpulseaudio
  2. マイクオーディオは私の声とスピーカーからの音で構成されています。スピーカーからのサウンドは、サウンドカードから直接録音されたオーディオストリームよりわずかに遅れます。Pulse響き除去モジュールが搭載されていますが、ただ本人の声の響きを取り消すレベルのようです。問題は、マイクオーディオがサウンドカードオーディオと混在しているときにわずかな遅延が原因で、ストリームがリスニングに不便になる可能性があることです。マイクがスピーカーの音を録音するのを防ぐ方法を知っている人はいますか?


最終メモ

このツールが役に立つことを願っています。改善のためのあなたのアイデアと意見をお待ちしています。

答え4

xvidcapを使用すると、デスクトップ上のゾーンを選択して録画できます。コマンドを使用して開始します。

xvidcap

デフォルトでは、ビデオは./test-0000.mpegにあります。

関連情報