Created
March 24, 2026 19:20
-
-
Save sposmen/0cabfe4970b71d05e8270b39fb8ae320 to your computer and use it in GitHub Desktop.
ffmpeg simple screen Recorder for Mac
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/bash | |
| PIDFILE="$HOME/.ffmpeg_screen_record.pid" | |
| OUTDIR="$HOME/Movies" | |
| get_default_video() { | |
| ffmpeg -f avfoundation -list_devices true -i "" 2>&1 \ | |
| | grep "Capture screen" \ | |
| | head -n 1 \ | |
| | sed -E 's/.*\[(.*)\].*/\1/' | |
| } | |
| DEFAULT_VIDEO=$(get_default_video) | |
| DEFAULT_VIDEO=${DEFAULT_VIDEO:-0} | |
| DEFAULT_AUDIO="none" | |
| DEFAULT_DURATION=3600 # 1 hora | |
| choose_devices_and_options() { | |
| echo "🔍 Detectando dispositivos..." | |
| ffmpeg -f avfoundation -list_devices true -i "" 2>&1 | grep '\[' | |
| echo "" | |
| echo "⏳ Defaults en 10s:" | |
| echo " video=$DEFAULT_VIDEO audio=$DEFAULT_AUDIO duración=${DEFAULT_DURATION}s (~1h)" | |
| read -t 10 -p "🎥 Video ID [$DEFAULT_VIDEO]: " VIDEO_ID | |
| read -t 10 -p "🎤 Audio ID [$DEFAULT_AUDIO]: " AUDIO_ID | |
| read -t 10 -p "⏱️ Duración en segundos [$DEFAULT_DURATION]: " DURATION | |
| VIDEO_ID=${VIDEO_ID:-$DEFAULT_VIDEO} | |
| AUDIO_ID=${AUDIO_ID:-$DEFAULT_AUDIO} | |
| DURATION=${DURATION:-$DEFAULT_DURATION} | |
| if [ "$AUDIO_ID" = "none" ]; then | |
| INPUT="$VIDEO_ID:none" | |
| AUDIO_FLAG="-an" | |
| else | |
| INPUT="$VIDEO_ID:$AUDIO_ID" | |
| AUDIO_FLAG="-c:a aac -b:a 96k" | |
| fi | |
| } | |
| start_recording() { | |
| if [ -f "$PIDFILE" ]; then | |
| echo "⚠️ Ya hay una grabación en curso (PID $(cat $PIDFILE))" | |
| exit 1 | |
| fi | |
| choose_devices_and_options | |
| FILENAME="$OUTDIR/rec_$(date +%Y-%m-%d_%H-%M-%S).mp4" | |
| echo "🎬 Grabando en 1440p → $FILENAME" | |
| echo "📡 Input: $INPUT" | |
| echo "⏱️ Duración: $DURATION segundos" | |
| ffmpeg -f avfoundation \ | |
| -framerate 30 \ | |
| -use_wallclock_as_timestamps 1 \ | |
| -t "$DURATION" \ | |
| -i "$INPUT" \ | |
| -vf "scale=2560:1440:flags=lanczos" \ | |
| -c:v h264_videotoolbox -b:v 5M \ | |
| $AUDIO_FLAG \ | |
| -movflags +faststart \ | |
| "$FILENAME" \ | |
| > /dev/null 2>&1 & | |
| PID=$! | |
| echo $PID > "$PIDFILE" | |
| echo "✅ Grabando (PID $PID)" | |
| } | |
| stop_recording() { | |
| if [ ! -f "$PIDFILE" ]; then | |
| echo "⚠️ No hay grabación activa" | |
| exit 1 | |
| fi | |
| PID=$(cat "$PIDFILE") | |
| echo "🛑 Deteniendo grabación (PID $PID)..." | |
| kill -2 "$PID" | |
| wait "$PID" 2>/dev/null | |
| rm -f "$PIDFILE" | |
| echo "✅ Grabación finalizada correctamente" | |
| } | |
| status_recording() { | |
| if [ -f "$PIDFILE" ]; then | |
| PID=$(cat "$PIDFILE") | |
| if ps -p $PID > /dev/null 2>&1; then | |
| echo "🎥 Grabando (PID $PID)" | |
| else | |
| echo "⚠️ PID existe pero proceso no activo" | |
| fi | |
| else | |
| echo "⏹️ No hay grabación activa" | |
| fi | |
| } | |
| case "$1" in | |
| start) start_recording ;; | |
| stop) stop_recording ;; | |
| status) status_recording ;; | |
| *) | |
| echo "Uso: $0 {start|stop|status}" | |
| ;; | |
| esac |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment