Skip to content

Instantly share code, notes, and snippets.

@DeltaWhy
Created October 25, 2014 20:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save DeltaWhy/bc57e43a725bdee13abd to your computer and use it in GitHub Desktop.
Save DeltaWhy/bc57e43a725bdee13abd to your computer and use it in GitHub Desktop.
#!/bin/sh
cd "/run/media/michael/Backup/Screencasts Raw/"
echo "Select monitor device:"
pactl list sinks | sed -rn 's/\s+Description: (.*)/\1/p' | nl
read -p "? "
monitor=$(pactl list sinks | sed -rn 's/\s+Name: (.*)/\1/p' | sed -n "${REPLY}p")
pacmd set-default-sink ${monitor}
echo "Select microphone:"
pactl list sources | sed -rn '/Monitor of/d; s/\s+Description: (.*)/\1/p' | nl
read -p "? "
mic=$(pactl list sources | sed -rn '/\.monitor/d; s/\s+Name: (.*)/\1/p' | sed -n "${REPLY}p")
pacmd set-default-source ${mic}
command="ffcast -w ffmpeg -- -f pulse -i ${mic}"
nstreams=1
read -p "Add application stream? (Y/n) " -n 1 -r
echo
while [[ ! $REPLY =~ [Nn] ]]; do
pactl list sink-inputs | nl | sed -rn 's/\s+application\.name = "(.*)"/\t\1/p'
read -p "? "
stream=$(pactl list sink-inputs | nl | tac | sed -rn "/^\s*${REPLY}/,/Sink Input/s/.*Sink Input \#([0-9]+)/\1/p")
sink_name="null${stream}"
null_idx=$(pactl load-module module-null-sink sink_name=$sink_name)
pacmd update-sink-proplist $sink_name device.description=$sink_name
loop_idx=$(pactl load-module module-loopback source=${sink_name}.monitor sink=$monitor sink_input_properties=media.name=loop${stream})
pactl move-sink-input $stream $sink_name
nstreams=$((nstreams+1))
command="${command} -f pulse -i ${sink_name}.monitor"
read -p "Add application stream? (Y/n) " -n 1 -r
echo
done
command="${command} -filter_complex amerge=inputs=${nstreams} -acodec pcm_s16le -vcodec libx264 -preset ultrafast -crf 0 -threads 0 screencast-$(date +%Y%m%d%H%M%S).mkv"
echo $command
$command
pactl unload-module module-null-sink
pactl unload-module module-loopback
#!/bin/sh
if [[ $# -eq 1 ]]; then
ffmpeg -i "$1" -acodec flac -vcodec libx264 -preset slow -crf 22 -threads 0 /run/media/michael/Backup/Screencasts\ Converted/$(basename "$1")
elif [[ $# -eq 2 ]]; then
ffmpeg -i "$1" -i "$2" -acodec copy -vcodec libx264 -preset slow -crf 22 -threads 0 -map 0:v:0 -map 1:a:0 /run/media/michael/Backup/Screencasts\ Converted/$(basename "$1")
else
echo "Usage: $0 video.mkv [audio.flac]"
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment