Initialer Push, Grundsätzlich funktioniert das Programm
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
#!/usr/bin/env bash
|
||||
# ~/bin/call-recorder.sh
|
||||
set -euo pipefail
|
||||
|
||||
REC_DIR="$HOME"
|
||||
PIDFILE="/tmp/call-recorder.pid"
|
||||
LOGFILE="/tmp/call-recorder.log"
|
||||
|
||||
start_recording() {
|
||||
if [[ -f "$PIDFILE" ]] && kill -0 "$(cat "$PIDFILE")" 2>/dev/null; then
|
||||
notify-send "Call Recorder" "Läuft bereits (PID $(cat "$PIDFILE"))"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
local sink source outfile
|
||||
sink="$(pactl get-default-sink).monitor"
|
||||
source="$(pactl get-default-source)"
|
||||
outfile="${REC_DIR}/call_$(date +%Y-%m-%d_%H-%M-%S).mp3"
|
||||
|
||||
ffmpeg -nostdin -y \
|
||||
-f pulse -i "$sink" \
|
||||
-f pulse -i "$source" \
|
||||
-filter_complex "[0:a]pan=mono|c0=0.5*c0+0.5*c1[browser];[1:a]pan=mono|c0=c0[mic];[browser][mic]amerge=inputs=2[aout]" \
|
||||
-map "[aout]" -ac 2 -c:a libmp3lame -q:a 2 \
|
||||
"$outfile" \
|
||||
> "$LOGFILE" 2>&1 &
|
||||
|
||||
echo $! > "$PIDFILE"
|
||||
notify-send "Call Recorder" "Aufnahme gestartet: $(basename "$outfile")"
|
||||
}
|
||||
|
||||
stop_recording() {
|
||||
if [[ ! -f "$PIDFILE" ]]; then
|
||||
notify-send "Call Recorder" "Keine laufende Aufnahme."
|
||||
exit 1
|
||||
fi
|
||||
local pid
|
||||
pid="$(cat "$PIDFILE")"
|
||||
kill -INT "$pid" 2>/dev/null || true
|
||||
# ffmpeg braucht einen Moment, um den MP3-Frame sauber abzuschließen
|
||||
for _ in {1..20}; do
|
||||
kill -0 "$pid" 2>/dev/null || break
|
||||
sleep 0.2
|
||||
done
|
||||
rm -f "$PIDFILE"
|
||||
notify-send "Call Recorder" "Aufnahme gestoppt."
|
||||
}
|
||||
|
||||
case "${1:-toggle}" in
|
||||
start) start_recording ;;
|
||||
stop) stop_recording ;;
|
||||
toggle) if [[ -f "$PIDFILE" ]]; then stop_recording; else start_recording; fi ;;
|
||||
*) echo "Usage: $0 {start|stop|toggle}"; exit 1 ;;
|
||||
esac
|
||||
Reference in New Issue
Block a user