From c5aadb59fd5c09d997d2e99e139f5cf6a8baa646 Mon Sep 17 00:00:00 2001 From: Gabe Farrell Date: Fri, 21 Mar 2025 15:25:57 +0000 Subject: [PATCH] add some anime subtitle scripts --- .gitignore | 0 replace_anime_subs_asssrc.sh | 78 ++++++++++++++++++++++++++++++ replace_anime_subs_mkvsrc_flags.sh | 78 ++++++++++++++++++++++++++++++ set_anime_sub_titles.sh | 32 ++++++++++++ 4 files changed, 188 insertions(+) mode change 100644 => 100755 .gitignore create mode 100755 replace_anime_subs_asssrc.sh create mode 100755 replace_anime_subs_mkvsrc_flags.sh create mode 100755 set_anime_sub_titles.sh diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 diff --git a/replace_anime_subs_asssrc.sh b/replace_anime_subs_asssrc.sh new file mode 100755 index 0000000..f710599 --- /dev/null +++ b/replace_anime_subs_asssrc.sh @@ -0,0 +1,78 @@ +#!/bin/bash + +# Ensure mkvmerge is installed +if ! command -v mkvmerge &> /dev/null; then + echo "Error: mkvmerge is not installed. Please install mkvtoolnix." + exit 1 +fi + +# Default directories +VIDEO_DIR="" +SUBTITLE_DIR="" +MUXED_DIR="" + +# Parse arguments +while [[ "$#" -gt 0 ]]; do + case "$1" in + --vidsrc) + VIDEO_DIR="$2" + shift 2 + ;; + --subsrc) + SUBTITLE_DIR="$2" + shift 2 + ;; + -o) + MUXED_DIR="$2" + shift 2 + ;; + *) + echo "Unknown option: $1" + exit 1 + ;; + esac +done + +# Ensure required arguments are provided +if [[ -z "$VIDEO_DIR" || -z "$SUBTITLE_DIR" || -z "$MUXED_DIR" ]]; then + echo "Usage: $0 --vidsrc --subsrc -o " + exit 1 +fi + +# Create output directory +mkdir -p "$MUXED_DIR" + +# Process each video file +for video_file in "$VIDEO_DIR"/*.mkv; do + [[ -e "$video_file" ]] || continue + + # Extract SxxExx pattern + episode_id=$(basename "$video_file" | grep -oE 'S[0-9]{2}E[0-9]{2}') + + if [[ -z "$episode_id" ]]; then + echo "Skipping $video_file (no episode pattern found)" + continue + fi + + # Find matching subtitle files + mapfile -t subtitle_files < <(find "$SUBTITLE_DIR" -type f -name "*${episode_id}*.ass") + + if [[ ${#subtitle_files[@]} -eq 0 ]]; then + echo "Warning: No subtitle files found for $video_file" + continue + fi + + # Define output file + output_file="$MUXED_DIR/${episode_id}.mkv" + + echo "Muxing: $video_file + subtitles (${subtitle_files[*]}) -> $output_file" + + # Mux using mkvmerge (video+audio from video file, all matching .ass subtitle files, remove existing subtitles) + mkvmerge -o "$output_file" \ + --no-subtitles "$video_file" \ + "${subtitle_files[@]}" + +done + +echo "Muxing complete." + diff --git a/replace_anime_subs_mkvsrc_flags.sh b/replace_anime_subs_mkvsrc_flags.sh new file mode 100755 index 0000000..8164c91 --- /dev/null +++ b/replace_anime_subs_mkvsrc_flags.sh @@ -0,0 +1,78 @@ +#!/bin/bash + +# Ensure mkvmerge is installed +if ! command -v mkvmerge &> /dev/null; then + echo "Error: mkvmerge is not installed. Please install mkvtoolnix." + exit 1 +fi + +# Default directories +VIDEO_DIR="" +SUBTITLE_DIR="" +MUXED_DIR="" + +# Parse arguments +while [[ "$#" -gt 0 ]]; do + case "$1" in + --vidsrc) + VIDEO_DIR="$2" + shift 2 + ;; + --subsrc) + SUBTITLE_DIR="$2" + shift 2 + ;; + -o) + MUXED_DIR="$2" + shift 2 + ;; + *) + echo "Unknown option: $1" + exit 1 + ;; + esac +done + +# Ensure required arguments are provided +if [[ -z "$VIDEO_DIR" || -z "$SUBTITLE_DIR" || -z "$MUXED_DIR" ]]; then + echo "Usage: $0 --vidsrc --subsrc -o " + exit 1 +fi + +# Create output directory +mkdir -p "$MUXED_DIR" + +# Process each video file +for video_file in "$VIDEO_DIR"/*.mkv; do + [[ -e "$video_file" ]] || continue + + # Extract SxxExx pattern + episode_id=$(basename "$video_file" | grep -oE 'S[0-9]{2}E[0-9]{2}') + + if [[ -z "$episode_id" ]]; then + echo "Skipping $video_file (no episode pattern found)" + continue + fi + + # Find matching subtitle file + subtitle_file=$(find "$SUBTITLE_DIR" -type f -name "*${episode_id}*.mkv" | head -n 1) + + if [[ -z "$subtitle_file" ]]; then + echo "Warning: No subtitle file found for $video_file" + continue + fi + + # Define output file + output_file="$MUXED_DIR/${episode_id}.mkv" + + echo "Muxing: $video_file + $subtitle_file -> $output_file" + + # Mux using mkvmerge (video+audio from video file, subtitles+attachments from subtitle file) + mkvmerge -o "$output_file" \ + --no-subtitles "$video_file" \ + --no-video --no-audio "$subtitle_file" + +done + +echo "Muxing complete." + diff --git a/set_anime_sub_titles.sh b/set_anime_sub_titles.sh new file mode 100755 index 0000000..db4531b --- /dev/null +++ b/set_anime_sub_titles.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +# Ensure mkvpropedit and mkvmerge are installed +if ! command -v mkvpropedit &> /dev/null || ! command -v mkvmerge &> /dev/null; then + echo "Error: mkvpropedit and mkvmerge are required. Please install mkvtoolnix." + exit 1 +fi + +# Check if input file is provided +if [[ -z "$1" ]]; then + echo "Usage: $0 " + exit 1 +fi + +INPUT_FILE="$1" + +echo "Processing: $INPUT_FILE" + +# Get all subtitle track IDs +subtitle_tracks=($(mkvmerge -i "$INPUT_FILE" | awk -F ': ' '/subtitles/ {print $1}' | awk '{print $3}')) + +if [[ ${#subtitle_tracks[@]} -gt 0 ]]; then + echo "Setting track:s1 name to Dialogue" + mkvpropedit "$INPUT_FILE" --edit track:s1 --set name="Dialogue" + if [[ ${#subtitle_tracks[@]} -gt 1 ]]; then + echo "Setting track:s2 name to Signs & Songs" + mkvpropedit "$INPUT_FILE" --edit track:s2 --set name="Signs & Songs" + fi +fi + +echo "Subtitle track titles updated successfully." +