Skip to content

Instantly share code, notes, and snippets.

@Seegras
Forked from AndreiDuma/subextract.sh
Last active January 10, 2019 10:55
Show Gist options
  • Save Seegras/d12fa42a0458dbd05160f78be76c2c81 to your computer and use it in GitHub Desktop.
Save Seegras/d12fa42a0458dbd05160f78be76c2c81 to your computer and use it in GitHub Desktop.
A little script to help with extracting subtitles from .mkv files.
#!/bin/sh
if ! command -v mkvmerge mkvextract >/dev/null 2>&1; then
echo >&2 "Tools mkvmerge & mkvextract are required. Install package mkvtoolnix."
exit 1
fi
filename=$1
if [ ! -f "$filename" ]; then
echo "File not found."
exit 1
fi
case "$filename" in
*.mkv )
filename_no_ext=$(basename "$filename" .mkv)
# old regexp doesn't work anymore since the idiots removed the display
# of the language
#sed_exp="s/Track\sID\s([0-9]{1,3}):.*language:([a-z]+).*/\1:'$filename_no_ext'-\1-\2/"
sed_exp="s/Track\sID\s([0-9]{1,3}):.*/\1:'$filename_no_ext'-\1/"
mkvmerge -i "${filename}" | grep subtitles | sed -r "${sed_exp}" | xargs mkvextract tracks "${filename}"
mkvmerge -J v.mkv | jq -r '
.tracks |
map((.id | tostring) + " " + .properties.language + " " + .codec) |
join("\n")
'
;;
*.mp4 )
filename_no_ext=$(basename "$filename" .mp4)
ffmpeg -i "$filename" -map 0:s:0 "$filename_no_ext.srt"
flip -ub "$filename_no_ext.srt"
#sed -n -i '/^$/!{s/<[^>]*>//g;p;}' "$filename_no_ext.srt"
sed -i 's/<[^>]\+>/ /g' "$filename_no_ext.srt"
;;
*.ogm )
filename_no_ext=$(basename "$filename" .ogm)
ffmpeg -i "$filename" -map 0:s:0 "$filename_no_ext.srt"
flip -ub "$filename_no_ext.srt"
#sed -n -i '/^$/!{s/<[^>]*>//g;p;}' "$filename_no_ext.srt"
sed -i 's/<[^>]\+>/ /g' "$filename_no_ext.srt"
;;
esac
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment