Files
dotfiles/.config/waybar/scripts/longshot-sh/longshot-wf-recorder.sh
2026-02-06 17:17:48 +08:00

80 lines
2.1 KiB
Bash
Executable File

#!/bin/bash
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
VENV_PYTHON="$SCRIPT_DIR/venv/bin/python"
PY_STITCH="$SCRIPT_DIR/stitch.py"
CONFIG_DIR="$HOME/.cache/longshot-sh"
CONFIG_FILE="$CONFIG_DIR/mode"
SAVE_DIR="$HOME/Pictures/Screenshots/longshots"
mkdir -p "$SAVE_DIR"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
TMP_VIDEO="/tmp/longshot_${TIMESTAMP}.mp4"
OUTPUT_IMG="${SAVE_DIR}/longshot_${TIMESTAMP}.png"
# 语言
if env | grep -q "zh_CN"; then
TXT_REC="录制中"
TXT_MSG="正在拼接..."
TXT_SAVED="已保存并复制"
WIDTH=6
else
TXT_REC="Recording"
TXT_MSG="Stitching..."
TXT_SAVED="Saved"
WIDTH=10
fi
# 录制菜单
if command -v fuzzel &> /dev/null; then
MENU_REC_CMD="fuzzel -d --anchor top --y-margin 20 --width $WIDTH --lines 0"
elif command -v wofi &> /dev/null; then
MENU_REC_CMD="wofi -d -i -p Rec"
else
MENU_REC_CMD="rofi -dmenu -p Rec"
fi
# Step 1: 选区
GEOMETRY=$(slurp)
if [ -z "$GEOMETRY" ]; then exit 1; fi
# Step 2: 录制
wf-recorder -g "$GEOMETRY" -f "$TMP_VIDEO" \
-c libx264 -p crf=0 -p preset=ultrafast -p pixel_format=yuv420p \
&> /dev/null &
REC_PID=$!
sleep 0.5
if ! kill -0 $REC_PID 2>/dev/null; then
notify-send "Error" "wf-recorder failed"
exit 1
fi
# Step 3: 停止菜单
echo "Stop" | $MENU_REC_CMD -p "$TXT_REC" > /dev/null
kill -SIGINT $REC_PID
wait $REC_PID 2>/dev/null
# Step 4: 处理
if [ -f "$TMP_VIDEO" ]; then
notify-send -t 2000 "Longshot" "$TXT_MSG"
"$VENV_PYTHON" "$PY_STITCH" "$TMP_VIDEO" "$OUTPUT_IMG"
rm -f "$TMP_VIDEO"
if [ -f "$OUTPUT_IMG" ]; then
if command -v wl-copy &> /dev/null; then wl-copy < "$OUTPUT_IMG"; fi
# 自动执行动作
FINAL_MODE=$(cat "$CONFIG_FILE" 2>/dev/null || echo "PREVIEW")
case "$FINAL_MODE" in
"PREVIEW") imv "$OUTPUT_IMG" ;;
"EDIT") if command -v satty &> /dev/null; then satty -f "$OUTPUT_IMG"; else imv "$OUTPUT_IMG"; fi ;;
"SAVE") notify-send "Longshot" "$TXT_SAVED: $(basename "$OUTPUT_IMG")" ;;
esac
fi
else
notify-send "Error" "No video"
fi