Skip to content

Instantly share code, notes, and snippets.

View ryanfb's full-sized avatar

Ryan Baumann ryanfb

View GitHub Profile
@ryanfb
ryanfb / truth-social.patch
Created April 16, 2024 15:39
Diff of current Truth Social code release against previous 2022 code release
This file has been truncated, but you can view the full file.
diff -ru truth-old/opensource/.buildpacks truth-new/opensource/.buildpacks
--- truth-old/opensource/.buildpacks 2022-06-08 09:15:38
+++ truth-new/opensource/.buildpacks 2024-04-01 14:59:13
@@ -1,3 +1,3 @@
https://github.com/heroku/heroku-buildpack-apt
https://github.com/Scalingo/ffmpeg-buildpack
-https://github.com/Scalingo/ruby-buildpack
+https://github.com/heroku/heroku-buildpack-ruby
Only in truth-new/opensource: .bundle
Only in truth-new/opensource: .circleci
@ryanfb
ryanfb / transcribe-and-burn.sh
Created March 28, 2024 18:13
Auto-transcribe and burn subtitles for all videos without existing subtitles
for ext in avi mp4 mpg mkv; do
for i in *.${ext}; do
if [ ! -e "$(basename "$i" ".${ext}").srt" ]; then
echo "Transcribing: $i"
time whisperx "$i" --model large-v3 --language en --task transcribe --hf_token $HUGGINGFACE_TOKEN --compute_type int8 --chunk_size 5
echo "Burning subtitles: $i"
ffmpeg -i "$i" -vf subtitles="$(basename "$i" ".${ext}").srt" "$(basename "$i" ".${ext}")-burned.${ext}"
else
echo "Skipping: $i"
fi
@ryanfb
ryanfb / checkzip.sh
Created October 3, 2023 16:37
Verify that all files in a given zip file exist (i.e. have been extracted). NB: no checksum verification, just existence.
#!/bin/bash
7z l -slt -ba "$1" | grep '^Path' | sed -e 's/^Path = //' | while read i; do if [ ! -e "$i" ]; then echo "$i"; fi; done
@ryanfb
ryanfb / m4adetag.sh
Created March 17, 2023 13:38
Undo accidentally running id3tag on an M4A or M4B audio file. Assumes GNU grep and head are available at ggrep and ghead respectively (`brew install coreutils` on macOS).
#!/bin/bash
OFFSET=$(ggrep --only-matching --byte-offset --max-count=1 --binary --text --perl-regexp "\x00\x00\x00\x1c" "$1" | head -1 | cut -d':' -f1)
tail -c +$(( $OFFSET + 1 )) "$1" | ghead -c -128 > untagged.m4b
if ffprobe -loglevel quiet untagged.m4b ; then
echo "Untagging succeeded for: $1"
mv untagged.m4b "$1"
else
echo "Untagging failed for: $1"
fi
@ryanfb
ryanfb / bookmarks_export.rb
Last active November 21, 2022 22:13
Export your Twitter Bookmarks to JSON. This will also delete all your Twitter Bookmarks, 50 Bookmarks at a time, to get around API limits. Now at: https://github.com/ryanfb/twitter-bookmarks-export
#!/usr/bin/env ruby
# Based on: https://github.com/twitterdev/Twitter-API-v2-sample-code/blob/main/Bookmarks-lookup/bookmarks_lookup.rb
# See: https://github.com/ryanfb/twitter-bookmarks-export
require 'json'
require 'typhoeus'
require 'twitter_oauth2'
# First, you will need to enable OAuth 2.0 in your App’s auth settings in the Developer Portal to get your client ID.
# Inside your terminal you will need to set an enviornment variable
# export CLIENT_ID='your-client-id'
@ryanfb
ryanfb / mbox-size.rb
Created July 11, 2022 21:49
Get the total number of bytes used for each sender in an Mbox email file
#!/usr/bin/env ruby
emails = {}
email_length = 0
last_email_from = nil
File.open(ARGV[0], "r:ASCII-8BIT").each_line do |line|
if line.start_with?('From ')
unless last_email_from.nil?
emails[last_email_from] ||= 0
@ryanfb
ryanfb / bl-dl.sh
Created May 31, 2022 13:06
Command Line Script for Downloading a Manuscript from the British Library using dezoomify-rs
#!/bin/bash
wget -O - "$1" | fgrep 'id="PageList"' | sed -e 's/^.*value="//' -e 's/" \/>.*//' -e "s/||/\n/g" | grep -v '^##$' | sort | uniq | while read i; do echo "$i"; dezoomify-rs -l "http://www.bl.uk/manuscripts/Proxy.ashx?view=${i}.xml" "${i}.jpg"; done
@ryanfb
ryanfb / wait_for_deploy.rb
Created July 9, 2021 14:24
Run from a Git repository with a properly configured Rapporteur (https://github.com/envylabs/rapporteur) status endpoint as the first argument, this script will wait until the live revision matches the latest local revision
#!/usr/bin/env ruby
require 'json'
require 'shellwords'
unless ARGV.length == 1
$stderr.puts "Usage: wait_for_deploy.rb https://example.com/status.json"
exit 1
end
@ryanfb
ryanfb / ffmpegconcat.sh
Last active July 17, 2023 10:41
Short shell script for concatenating video files with ffmpeg's "concat" demuxer, using command line arguments.
#!/bin/bash
# Usage:
# ./ffmpegconcat.sh input1.mp4 input2.mp4 input3.mp4 output.mp4
# See: https://trac.ffmpeg.org/wiki/Concatenate
for input in "${@:1:$#-1}"; do echo "file '$input'"; done > filelist.txt
ffmpeg -f concat -safe 0 -i filelist.txt -c copy "${@: -1}"
echo "Concatenated:" && cat filelist.txt && rm -f filelist.txt
@ryanfb
ryanfb / id3v2len.sh
Last active June 12, 2020 14:33
Set MP3 id3v2 duration from actual MP3 duration
#!/bin/bash
for i in *.mp3; do
duration=`echo "$(( $(sox "$i" -n stat 2>&1|fgrep 'Length'|cut -d':' -f2|xargs) * 1000 ))"| awk '{printf("%d\n",$0+=$0<0?0:0.9)}'`
echo "$i: $duration"
id3v2 --TLEN "$duration" "$i"
done