Jak nagrywać rozmowy wideo Skype w systemie Linux?


28

Chciałbym przeprowadzić nagrane wywiady wideo ze Skype i szukam niezawodnego narzędzia do tego.

Czy jest tam coś, co nie jest powolne lub wadliwe?

Używam (K) Ubuntu.


próbowałeś gtk-recordmydesktop? mogę nagrać z nim prawie wszystko. Działa także ffmpeg -i x11grab. jeśli masz problemy z uruchomieniem pętli audio alsa.
RobotHumans

Spróbuj zapytać na askubuntu.com .
Adam Byrtek

Odpowiedzi:


11

Istnieje oprogramowanie recordMyDesktop http://recordmydesktop.sourceforge.net/about.php, w którym można nagrać dowolną część ekranu. Używam go do nagrywania sesji na skype.

sudo apt-get install recordmydesktop

zainstalować z głównych kanałów.


Użyłem tego podczas noszenia zestawu słuchawkowego i nagrywa on dźwięk drugiej osoby. Wydaje mi się, że nagrywa dźwięk z domyślnego mikrofonu (więc przechwytuje mój własny głos, ale nie drugiego). Masz pomysł, jak to naprawić?
Marcus Junius Brutus

11

To polecenie przechwytuje cały pulpit: Więc użyj tego polecenia, gdy chcesz nagrać rozmowę na skype (lub cokolwiek innego)

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

1
Dzięki! Jak mogę nagrywać tylko określone okna, np. Okno mojej kamery internetowej i okno drugiej osoby? Być może nawet jak nagrywać je osobno, aby ułatwić edycję.
ciekawy

1
@curiousguy, aby nagrać określone okno za pomocą recordmydesktop, użyj „xwininfo”, aby uzyskać identyfikator okna, a następnie w recordmydesktop użyj parametru „--windowid”. Jeśli chcesz przeskalować okno do określonego rozmiaru (w pikselach), możesz to zrobić na różne sposoby - uważam, że Compiz ma to jako opcję, również Openbox poda ci wymiary okna. (Używam Fedory.) Również wierzę, że Openbox pozwoli ci „cofnąć dekorację” okna, co jest przydatne, jeśli recordmydesktop rejestruje obramowanie okna. Nie jestem jednak pewien, czy jest to możliwe w przypadku ffmpeg?
PJ Brunet

Jak można skompilować z włączonym x11grab pod Ubuntu? Jakiego pakietu potrzebuje?
v010dya

8

tło

Nagrywanie wideo na żywo i dźwięku podczas rozmowy (lub podczas dowolnej aktywności X11 na pulpicie) nie jest bardzo trudne dzięki ffmpeg i ilości dostępnych artykułów pomocy (w tym tej strony). Jeśli jednak dążysz do wyższej jakości, szybko osiągniesz granice prostego podejścia polegającego na jednoczesnym pobieraniu i kompresji multimediów. Stąd potrzeba narzędzia (lub zestawu narzędzi), które umożliwiłyby:

  1. Nagrywaj połączenia bez kompresji do pliku w celu dalszego przetwarzania, rozpoznając, że dzwoniąc na telefon interesuje nas tylko dźwięk.
  2. Kompresuj nagrane połączenia w późniejszym czasie.

Poniższe skrypty bash ( myrec, myrec-novideoi myproc) to moja próba realizacji tego zadania. Jestem pewien, że istnieją fajniejsze sposoby pisania tych skryptów, ale uczyłem się skryptów Bash w podróży (z ogromną satysfakcją, gdy już dostałem do pracy, mogę dodać).

Wymagania wstępne

  1. ffmpeg
  2. pulseaudio
  3. skype

Jeśli 1ani 2nie są obecne w systemie, zainstaluj je z preferowanego menedżera pakietów (używam synaptic). Do skypeodwiedzenia www.skype.com .


Nagrywaj bezstratne wideo i bezstratny dźwięk - myrec

  1. Utwórz plik tekstowy
  2. Zapisz go jako myrec(lub dowolną inną nazwę dla siebie)
  3. Wykonaj myrec, wydając polecenie:chmod +x myrec
  4. Wklej do niego następujący kod i zmodyfikuj User settingssekcję, aby dostosować ją do konfiguracji:

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

Nagrywanie tylko dźwięku jest obsługiwane przez osobny skrypt w poniższej sekcji.


Nagrywaj tylko bezstratny dźwięk - myrec-novideo

  1. Utwórz plik tekstowy
  2. Zapisz go jako myrec-novideo(lub dowolną inną nazwę dla siebie)
  3. Wykonaj myrec-novideo, wydając polecenie:chmod +x myrec-novideo
  4. Wklej do niego następujący kod i zmodyfikuj User settingssekcję, aby dostosować ją do konfiguracji:

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


Przetwarzaj nagrane pliki - myproc

  1. Utwórz plik tekstowy
  2. Zapisz go jako myproc(lub dowolną inną nazwę dla siebie)
  3. Wykonaj myproc, wydając polecenie:chmod +x myproc
  4. Wklej do niego następujący kod i zmodyfikuj User settingssekcję, aby dostosować ją do konfiguracji:


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


Dzięki ffmpegelastyczności myprocmoże przetwarzać pliki, które mogą zawierać strumień wideo lub nie.


Jak korzystać ze skryptów

  1. Zdecyduj, gdzie okno rozmowy wideo Skype będzie na ekranie, i ustaw rozmiar okna na pożądany wymiar. Skype zapamięta to ustawienie okna, więc musisz to zrobić tylko raz. Przy każdym kolejnym połączeniu okno pojawi się w tym samym miejscu w tym samym rozmiarze. Pamiętaj, aby powiedzieć myreco swoich ustawieniach. Ogólnie staraj się, aby okno rozmowy wideo znajdowało się gdzieś w pobliżu kamery internetowej, aby osoba po drugiej stronie mogła pomyśleć, że patrzysz jej w oczy.
  2. Otwórz okno terminala. Ilekroć chcesz rozpocząć nagrywanie, użyj polecenia:

    • nagrywać audio i wideo: . myrec some description
    • nagrywać tylko dźwięk: . myrec-novideo some description

    some descriptionjest opcjonalny w obu skryptach. Możesz użyć Tabklawisza, aby rozwinąć nazwy skryptów, aby zaoszczędzić trochę pisania. ffmpegrozpocznie nagrywanie do pliku o nazwie temp_YYYYMMDD_HHMMSS_some_description.mkv, gdzie YYYYMMDD_HHMMSSjest data i godzina nagrania.

  3. Naciśnij qw oknie terminala, w którym ffmpegnagrywasz, gdy będziesz gotowy do zatrzymania.
  4. Uruchom, . myprocaby przetworzyć (skompresować) pliki. Możesz to zrobić ręcznie lub skonfigurować cronzadanie, aby wykonywać je podczas nieobecności.
  5. Po sprawdzeniu, czy kompresja przebiegła zgodnie z oczekiwaniami, usuń temp_plik.


Zagadnienia

  1. Nie można określić mikrofonu według nazwy, można użyć tylko wartości specjalnej default. Kiedyś miałem tam nazwę mikrofonu, ale to ustawienie przestało działać po aktualizacji systemu. Może to być coś ograniczonego tylko do mojej konfiguracji lub do pulseaudio.
  2. Mikrofon zawiera mój głos i dźwięk z głośników. Dźwięk z głośników znajduje się nieco za strumieniem audio nagranym bezpośrednio z karty dźwiękowej. PulseModuł anulowania echa jest załadowany, ale myślę, że służy tylko do anulowania własnego echa głosu. Chodzi o to, że gdy mikrofon jest miksowany z kartą dźwiękową, niewielkie opóźnienie sprawia, że ​​wynikowy strumień jest trudny do słuchania. Czy ktoś ma pomysł, jak uniemożliwić mikrofonowi nagrywanie dźwięków z głośników?


Uwagi końcowe

Mam nadzieję, że te narzędzia okażą się przydatne. Czekam na Wasze opinie na temat ulepszeń i komentarzy.


2
Łał. Możesz założyć konto git, jeśli go nie masz, a także przechowywać tam te skrypty.
RobertL,

Drodzy Xavras, poprawiłem wszystkie ustawienia użytkownika i zmieniłem tymczasowy prefiks pliku oraz wykluczyłem sekundy z formatu pliku. Po uruchomieniu skryptu pojawia się błąd „... ~ / Desktop / sky_20160506_12-10h.mkv: Brak takiego pliku lub katalogu” Tworzenie pliku z wyprzedzeniem lub uruchamianie go jako root nie pomaga. Dlaczego to może być?
superAnnoyingUser

Witaj @Student, być może już to rozwiązałeś, ale otrzymałem powiadomienie o twoim komentarzu dopiero dziś. Patrząc na cytowany przez ciebie błąd, pomyślałem, że tylda (~) nie została rozwiązana na właściwej ścieżce. Spróbuj podać ścieżkę w pełnej formie, na przykład / home / student /. Czy napotkałeś problem w skrypcie nagrywania lub przetwarzania?
Xavras Wyzryn

4

Studio Open Broadcaster Software (OBS) łączy wszystkie te wymagania w łatwą w użyciu nakładkę.

Jest to oprogramowanie typu open source i wieloplatformowe:

W przypadku Ubuntu 15.04 i nowszych:

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

W przypadku innych dystrybucji / wcześniejszych wersji Ubuntu, sprawdź wiki git


0

xvidcap pozwala wybrać obszar z pulpitu i nagrać go. Zacznij od polecenia

xvidcap

znajdź swój film domyślnie na ./test-0000.mpeg.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.