Wie zeichnet man Skype-Videoanrufe unter Linux auf?

28

Ich möchte mit Skype aufgezeichnete Videointerviews führen und suche ein zuverlässiges Tool, um dies zu erreichen.

Gibt es irgendetwas, das nicht langsam oder fehlerhaft ist?

Ich lasse (K) Ubuntu laufen.

neugierig
quelle
hast du gtk-recordmydesktop ausprobiert? Ich kann fast alles damit aufnehmen. ffmpeg -i x11grab funktioniert auch. Wenn Sie Probleme haben, funktioniert der Audio-Alsa-Loop.
RobotHumans
Versuchen Sie es unter askubuntu.com .
Adam Byrtek

Antworten:

11

Es gibt die Software recordMyDesktop http://recordmydesktop.sourceforge.net/about.php, mit der Sie einen beliebigen Teil Ihres Bildschirms aufzeichnen können. Ich benutze es, um meine Skype-Sitzungen aufzuzeichnen.

sudo apt-get install recordmydesktop

um es von den Hauptkanälen zu installieren.

Chris-Top
quelle
Ich habe das verwendet, während ich ein Headset trug, und es zeichnete die Audiodaten der anderen Partei auf. Ich vermute, es wurde Audio vom Standardmikrofon aufgenommen (also wurde meine eigene Stimme aufgenommen, aber nicht die der anderen Partei). Irgendeine Idee, wie man das behebt?
Marcus Junius Brutus
11

Dieser Befehl erfasst Ihren gesamten Desktop: Verwenden Sie diesen Befehl, wenn Sie Skype-Konversationen (oder etwas anderes) aufzeichnen möchten.

ffmpeg -f x11grab -s wxga -r 25 -i :0.0 -sameq /tmp/out.mpg   
SHW
quelle
1
Vielen Dank! Wie kann ich nur bestimmte Fenster aufzeichnen, z. B. das Fenster meiner Webcam und das Fenster des anderen? Vielleicht sogar, wie man sie separat aufzeichnet, um die Bearbeitung zu vereinfachen.
neugierig
1
@curiousguy, um ein bestimmtes Fenster mit recordmydesktop aufzuzeichnen, verwenden Sie "xwininfo", um die Fenster-ID abzurufen, und verwenden Sie dann mit recordmydesktop den Parameter "--windowid". Wenn Sie Ihr Fenster auf eine bestimmte Größe (in Pixel) skalieren möchten, gibt es verschiedene Möglichkeiten - ich glaube, Compiz hat diese Option, und Openbox gibt Ihnen auch die Fensterabmessungen an. (Ich benutze Fedora.) Außerdem glaube ich, dass Sie mit Openbox ein Fenster "dekorieren" können, was hilfreich ist, wenn recordmydesktop Ihren Fensterrahmen aufzeichnet. Ich bin mir aber nicht sicher, ob das mit ffmpeg möglich ist?
PJ Brunet
Wie würde man mit x11grab kompilieren, das unter Ubuntu aktiviert ist? Welches Paket braucht es?
v010dya
8

Hintergrund

Die Aufzeichnung von Live-Video- und Audioinhalten während eines Anrufs (oder während einer X11-Desktopaktivität) ist dank ffmpeg und der Menge der verfügbaren Hilfeartikel (einschließlich dieser Website) nicht sehr schwierig. Wenn Sie jedoch eine höhere Qualität anstreben, stoßen Sie schnell an die Grenzen des einfachen Ansatzes, Medien gleichzeitig zu erfassen und zu komprimieren. Daher ist ein Werkzeug (oder eine Reihe von Werkzeugen) erforderlich, das Folgendes ermöglicht:

  1. Zeichnen Sie Anrufe ohne Komprimierung zur weiteren Verarbeitung in einer Datei auf, wobei Sie erkennen, dass wir uns beim Anrufen eines Telefons nur für Audio interessieren.
  2. Komprimieren Sie die aufgezeichneten Anrufe zu einem späteren Zeitpunkt in hoher Qualität.

Der folgende Bash - Skripte ( myrec, myrec-novideound myproc) ist mein Versuch, diese Aufgabe. Ich bin mir sicher, dass es bessere Möglichkeiten gibt, diese Skripte zu schreiben, aber ich habe Bash-Skripte unterwegs gelernt (mit großer Befriedigung, wenn ich sie erst einmal zum Laufen gebracht habe, könnte ich hinzufügen).

Voraussetzungen

  1. ffmpeg
  2. pulseaudio
  3. skype

Wenn in Ihrem System vorhanden 1oder 2nicht vorhanden, installieren Sie sie mit Ihrem bevorzugten Paketmanager (den ich verwende synaptic). Für skypeBesuch www.skype.com .


Verlustfreies Video und verlustfreies Audio aufnehmen - myrec

  1. Erstellen Sie eine Textdatei
  2. Speichern unter myrec(oder wie auch immer der Name für Sie lautet)
  3. Machen Sie myrecausführbar, indem Sie den folgenden Befehl eingeben:chmod +x myrec
  4. Fügen Sie den folgenden Code ein und User settingspassen Sie den Abschnitt an Ihr Setup an:

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

Das Aufnehmen von Audio wird nur von einem separaten Skript im folgenden Abschnitt behandelt.


Nur verlustfreies Audio aufnehmen - myrec-novideo

  1. Erstellen Sie eine Textdatei
  2. Speichern unter myrec-novideo(oder wie auch immer der Name für Sie lautet)
  3. Machen Sie myrec-novideoausführbar, indem Sie den folgenden Befehl eingeben:chmod +x myrec-novideo
  4. Fügen Sie den folgenden Code ein und User settingspassen Sie den Abschnitt an Ihr Setup an:

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


Verarbeiten Sie die aufgenommenen Dateien - myproc

  1. Erstellen Sie eine Textdatei
  2. Speichern unter myproc(oder wie auch immer der Name für Sie lautet)
  3. Machen Sie myprocausführbar, indem Sie den folgenden Befehl eingeben:chmod +x myproc
  4. Fügen Sie den folgenden Code ein und User settingspassen Sie den Abschnitt an Ihr Setup an:


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


Kann dank der ffmpegFlexibilität myprocDateien verarbeiten, die den Videostream enthalten oder nicht.


Verwendung der Skripte

  1. Entscheiden Sie, wo sich das Videoanruffenster von Skype auf Ihrem Bildschirm befindet, und stellen Sie die Fenstergröße auf die gewünschte Größe ein. Skype speichert diese Fenstereinstellung, sodass Sie sie nur einmal ausführen müssen. Bei jedem weiteren Aufruf erscheint das Fenster an der gleichen Stelle in der gleichen Größe. Denken Sie daran, myrecIhre Einstellungen mitzuteilen . Versuchen Sie im Allgemeinen, das Videoanruffenster in der Nähe Ihrer Webcam anzuzeigen, damit die Person auf der anderen Seite die Möglichkeit hat, zu glauben, dass Sie ihnen in die Augen schauen.
  2. Öffnen Sie ein Terminalfenster. Verwenden Sie den folgenden Befehl, wenn Sie die Aufnahme starten möchten:

    • Audio und Video aufnehmen: . myrec some description
    • Nur Audio aufnehmen: . myrec-novideo some description

    some descriptionist in beiden Skripten optional. Mit der TabTaste können Sie die Skriptnamen erweitern, um Tippfehler zu vermeiden. ffmpegstartet die Aufnahme in eine Datei mit dem Namen temp_YYYYMMDD_HHMMSS_some_description.mkv, in YYYYMMDD_HHMMSSder Datum und Uhrzeit der Aufnahme angegeben sind.

  3. Drücken Sie qim Terminalfenster, in dem gerade aufgenommen ffmpegwird, auf, wenn Sie zum Stoppen bereit sind.
  4. Führen Sie aus . myproc, um die Dateien zu verarbeiten (zu komprimieren). Sie können dies entweder manuell tun oder einen cronJob einrichten , der dies während Ihrer Abwesenheit erledigt.
  5. Nachdem Sie sichergestellt haben, dass die Komprimierung wie erwartet durchgeführt wurde, löschen Sie die temp_Datei.


Probleme

  1. Das Mikrofon kann nicht namentlich angegeben werden. Es kann nur der spezielle Wert verwendet werden default. Früher hatte ich dort den Namen des Mikrofons, aber diese Einstellung funktionierte nach einem System-Update nicht mehr. Es könnte etwas sein, das nur auf mein Setup beschränkt ist, oder auf pulseaudio.
  2. Mic Audio enthält meine Stimme und den Ton aus den Lautsprechern. Der Ton aus den Lautsprechern ist etwas hinter dem Audio-Stream, der direkt von der Soundkarte aufgenommen wurde. PulseDas Echounterdrückungsmodul von ist geladen, aber ich denke, es ist nur dazu gedacht, mein eigenes Stimmergebnis zu unterdrücken. Die Sache ist, dass, wenn Mikrofon-Audio mit Soundkarten-Audio gemischt wird, die leichte Verzögerung den resultierenden Stream schwer zu hören macht. Hat jemand eine Idee, wie man verhindert, dass das Mikrofon die Töne von den Lautsprechern aufzeichnet?


Schlussnoten

Ich hoffe, Sie finden diese Tools hilfreich. Ich freue mich auf Ihre Verbesserungsvorschläge und Kommentare.

Xavras Wyzryn
quelle
2
Wow. Möglicherweise möchten Sie ein Git-Konto eröffnen, wenn Sie keines haben, und diese Skripte auch dort behalten.
RobertL
Sehr geehrte Xavras, ich habe alle Benutzereinstellungen korrigiert und das Präfix der temporären Datei geändert und die Sekunden aus dem Dateiformat ausgeschlossen. Beim Ausführen des Skripts erhalte ich die Fehlermeldung "... ~ / Desktop / sky_20160506_12-10h.mkv: Keine solche Datei oder kein solches Verzeichnis". Das Erstellen der Datei im Voraus oder das Ausführen als root hilft nicht. Warum kann das sein?
SuperAnnoyingUser
Hallo @Student, Sie haben es vielleicht schon erledigt, aber ich habe erst heute eine Benachrichtigung über Ihren Kommentar erhalten. Wenn Sie den von Ihnen angegebenen Fehler betrachten, würde ich denken, dass die Tilde (~) nicht in den entsprechenden Pfad aufgelöst wurde. Versuchen Sie, den Pfad in seiner vollständigen Form anzugeben, z. B. / home / student /. Ist Ihnen das Problem im Aufnahme- oder Verarbeitungsskript begegnet?
Xavras Wyzryn
4

Open Broadcaster Software (OBS) Studio vereint all diese Anforderungen in einem benutzerfreundlichen Frontend.

Es ist Open Source und plattformübergreifend:

Für Ubuntu 15.04 und höher:

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

Für andere Distributionen / frühere Ubuntu-Versionen, checke das Git- Wiki

klar
quelle
0

Mit xvidcap können Sie einen Bereich auf Ihrem Desktop auswählen und aufzeichnen. Starten Sie es mit dem Befehl

xvidcap

Finden Sie Ihr Video standardmäßig unter ./test-0000.mpeg.

Thorsten Staerk
quelle