Làm cách nào để ghi lại các cuộc gọi video Skype trên Linux?


28

Tôi muốn thực hiện các cuộc phỏng vấn video được ghi lại với Skype và đang tìm kiếm một công cụ đáng tin cậy để thực hiện điều đó.

Có bất cứ điều gì ngoài đó không phải là chậm hoặc lỗi?

Tôi đang chạy (K) Ubuntu.


bạn đã thử gtk-recordmydesktop chưa? tôi có thể ghi lại hầu hết mọi thứ với nó. ffmpeg -i x11grab cũng hoạt động. nếu bạn gặp vấn đề với việc vòng lặp âm thanh hoạt động.
RobotHumans

Hãy thử hỏi tại Askubfox.com .
Adam Byrtek

Câu trả lời:


11

Có phần mềm recordMyDesktop http://recordmydesktop.sourceforge.net/about.php mà bạn có thể ghi lại bất kỳ phần nào của màn hình bạn muốn. Tôi sử dụng nó để ghi lại các phiên skype của tôi.

sudo apt-get install recordmydesktop

để cài đặt nó từ các kênh chính.


Tôi đã sử dụng nó trong khi đeo tai nghe và nó sẽ ghi lại âm thanh của bên kia. Tôi đoán nó đang ghi âm thanh từ micrô mặc định (vì vậy nó đã thu được giọng nói của chính tôi chứ không phải của bên kia). Bất cứ ý tưởng làm thế nào để khắc phục điều đó ?
Marcus Junius Brutus

11

Lệnh này sẽ chụp toàn bộ máy tính để bàn của bạn: Vì vậy, hãy sử dụng lệnh này, bất cứ khi nào bạn muốn ghi lại cuộc hội thoại skype (hoặc bất cứ điều gì khác)

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

1
Cảm ơn! Làm cách nào tôi chỉ có thể ghi lại các cửa sổ cụ thể, ví dụ cửa sổ webcam của tôi và cửa sổ của người khác? Có lẽ ngay cả cách ghi chúng riêng biệt để dễ chỉnh sửa hơn.
tò mò

1
@cquilguy, để ghi lại một cửa sổ cụ thể bằng recordmydesktop, hãy sử dụng "xwininfo" để lấy id cửa sổ, sau đó với recordmydesktop sử dụng tham số "--windowid". Nếu bạn muốn chia tỷ lệ cửa sổ của mình thành một kích thước cụ thể (tính bằng pixel), có nhiều cách khác nhau để thực hiện - Tôi tin rằng Compiz có tùy chọn này, Openbox cũng sẽ cho bạn biết kích thước cửa sổ. (Tôi đang sử dụng Fedora.) Ngoài ra tôi tin rằng Openbox sẽ cho phép bạn "hủy hoại" một cửa sổ, điều này rất hữu ích nếu recordmydesktop đang ghi lại đường viền cửa sổ của bạn. Tuy nhiên, tôi không chắc chắn nếu điều này là có thể với ffmpeg?
PJ Brunet

Làm thế nào một người biên dịch với x11grab được kích hoạt trong Ubuntu? Nó cần gói gì?
v010dya

8

Lý lịch

Ghi video và âm thanh trực tiếp trong khi gọi (hoặc trong bất kỳ hoạt động X11 nào trên máy tính để bàn) không khó lắm nhờ ffmpeg và số lượng bài viết trợ giúp có sẵn (bao gồm cả trang web này). Tuy nhiên, nếu bạn nhắm đến chất lượng cao hơn, bạn sẽ nhanh chóng đạt đến giới hạn của phương pháp đơn giản là lấy và nén phương tiện đồng thời. Do đó, cần có một công cụ (hoặc một bộ công cụ) có thể cho phép:

  1. Ghi lại các cuộc gọi mà không nén vào một tệp để xử lý thêm, nhận ra rằng khi gọi điện thoại, chúng tôi chỉ quan tâm đến âm thanh.
  2. Nén các cuộc gọi được ghi lại với chất lượng cao sau đó.

Các kịch bản Bash sau ( myrec, myrec-novideomyproc) là nỗ lực của tôi ở nhiệm vụ này. Tôi chắc chắn có nhiều cách viết các kịch bản này gọn gàng hơn, nhưng tôi đã học Bash scripting khi đang di chuyển (với sự hài lòng to lớn khi tôi đã làm được, tôi có thể thêm vào).

Điều kiện tiên quyết

  1. ffmpeg
  2. pulseaudio
  3. skype

Nếu 1hoặc 2không có trong hệ thống của bạn, hãy cài đặt chúng với trình quản lý gói ưa thích của bạn (tôi sử dụng synaptic). Để skypetruy cập www.skype.com .


Ghi lại video lossless và âm thanh lossless - myrec

  1. Tạo một tệp văn bản
  2. Lưu nó dưới dạng myrec(hoặc bất cứ tên nào phù hợp với bạn)
  3. Thực hiện myrecbằng cách ban hành lệnh:chmod +x myrec
  4. Dán đoạn mã sau vào nó và sửa đổi User settingsphần cho phù hợp với thiết lập của bạn:

#!/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

Chỉ ghi âm thanh được xử lý bởi một tập lệnh riêng biệt trong phần sau.


Chỉ ghi lại âm thanh lossless - myrec-novideo

  1. Tạo một tệp văn bản
  2. Lưu nó dưới dạng myrec-novideo(hoặc bất cứ tên nào phù hợp với bạn)
  3. Thực hiện myrec-novideobằng cách ban hành lệnh:chmod +x myrec-novideo
  4. Dán đoạn mã sau vào nó và sửa đổi User settingsphần cho phù hợp với thiết lập của bạn:

#!/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


Xử lý các tệp đã ghi - myproc

  1. Tạo một tệp văn bản
  2. Lưu nó dưới dạng myproc(hoặc bất cứ tên nào phù hợp với bạn)
  3. Thực hiện myprocbằng cách ban hành lệnh:chmod +x myproc
  4. Dán đoạn mã sau vào nó và sửa đổi User settingsphần cho phù hợp với thiết lập của bạn:


#!/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


Nhờ ffmpegtính linh hoạt, myproccó thể xử lý các tệp có thể có hoặc không chứa luồng video.


Cách sử dụng tập lệnh

  1. Quyết định nơi cửa sổ cuộc gọi video của Skype sẽ xuất hiện trên màn hình của bạn và đặt kích thước cửa sổ thành kích thước mong muốn. Skype sẽ ghi nhớ cài đặt cửa sổ này, vì vậy bạn chỉ phải thực hiện một lần. Tại mỗi cuộc gọi tiếp theo, cửa sổ sẽ xuất hiện ở cùng một nơi với cùng kích thước. Hãy nhớ nói myrecvề các thiết lập của bạn. Nói chung, hãy cố gắng để cửa sổ cuộc gọi video ở đâu đó gần webcam của bạn, để người ở phía bên kia có cơ hội nghĩ rằng bạn đang nhìn vào mắt họ.
  2. Có một cửa sổ đầu cuối mở. Bất cứ khi nào bạn muốn bắt đầu ghi âm, hãy sử dụng lệnh:

    • để ghi lại âm thanh và video: . myrec some description
    • chỉ ghi âm thanh: . myrec-novideo some description

    some descriptionlà tùy chọn trong cả hai tập lệnh. Bạn có thể sử dụng Tabphím để mở rộng tên tập lệnh để lưu một số thao tác gõ. ffmpegsẽ bắt đầu ghi vào một tệp có tên temp_YYYYMMDD_HHMMSS_some_description.mkv, YYYYMMDD_HHMMSSngày và giờ ghi.

  3. Nhấn qtại cửa sổ terminal, nơi ffmpegđang ghi âm khi bạn sẵn sàng dừng lại.
  4. Chạy . myprocđể xử lý (nén) các tập tin. Bạn có thể làm thủ công hoặc thiết lập croncông việc để thực hiện khi bạn đi vắng.
  5. Khi bạn xác minh rằng việc nén đã diễn ra như mong đợi, hãy xóa temp_tệp.


Các vấn đề

  1. Không thể chỉ định micrô theo tên, chỉ có thể sử dụng giá trị đặc biệt default. Tôi đã từng có tên mic ở đó, nhưng cài đặt này đã ngừng hoạt động sau khi cập nhật hệ thống. Nó có thể là một cái gì đó bị hạn chế chỉ thiết lập của tôi, hoặc pulseaudio.
  2. Mic âm thanh chứa giọng nói của tôi và âm thanh từ loa. Âm thanh từ loa hơi phía sau luồng âm thanh được ghi trực tiếp từ card âm thanh. PulseMô-đun khử tiếng vang được tải, nhưng tôi nghĩ nó chỉ có nghĩa là hủy tiếng vang của chính tôi. Có một điều là khi âm thanh mic được trộn với âm thanh của card âm thanh, độ trễ nhỏ làm cho luồng kết quả khó nghe. Có ai có ý tưởng làm thế nào để ngăn mic ghi lại âm thanh từ loa không?


Ghi chú cuối cùng

Tôi hy vọng bạn tìm thấy những công cụ này hữu ích. Tôi mong muốn được nghe những suy nghĩ của bạn để cải thiện và bình luận.


2
Ồ Bạn có thể muốn bắt đầu một tài khoản git nếu bạn không có tài khoản và cũng giữ các tập lệnh này ở đó.
RobertL

Kính gửi Xavras, tôi đã sửa tất cả các cài đặt người dùng và tôi đã thay đổi tiền tố tệp tạm thời và loại trừ các giây khỏi định dạng tệp. Khi chạy tập lệnh, tôi gặp lỗi "... ~ / Desktop / sky_20160506_12-10h.mkv: Không có tập tin hoặc thư mục như vậy" Tạo tập tin trước hoặc chạy dưới dạng root không giúp ích gì. Tại sao điều này có thể được?
superAnnoyingUser

Xin chào @Student, bạn có thể đã sắp xếp nó ngay bây giờ, nhưng tôi đã nhận được thông báo về nhận xét của bạn chỉ ngày hôm nay. Nhìn vào lỗi bạn trích dẫn tôi sẽ nghĩ rằng dấu ngã (~) không được giải quyết vào đường dẫn thích hợp của nó. Hãy thử cung cấp đường dẫn ở dạng đầy đủ của nó, như / home / student /. Bạn có gặp phải vấn đề trong bản ghi hoặc xử lý tập lệnh không?
Xavras Wyzryn

4

Studio Phần mềm Broadcaster (OBS) liên kết tất cả các yêu cầu này thành một lối vào dễ sử dụng.

Đó là mã nguồn mở và đa nền tảng:

Đối với Ubuntu 15.04 trở lên:

sudo add-apt-repository ppa:obsproject/obs-studio
sudo apt-get update && sudo apt-get install obs-studio ffmpeg

Đối với các bản phân phối khác / các phiên bản Ubuntu cũ hơn, hãy kiểm tra wiki git


0

xvidcap cho phép bạn chọn một khu vực từ máy tính để bàn của bạn và ghi lại nó. Bắt đầu với lệnh

xvidcap

tìm video của bạn tại ./test-0000.mpeg theo mặc định.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.