more scripts

main
Gabe Farrell 9 months ago
parent a90a40eb58
commit 3a223888ac

1
.gitignore vendored

@ -0,0 +1 @@
my-venv

@ -0,0 +1,2 @@
#!/bin/bash
for file in *.mkv; do mkvpropedit "$file" --add-track-statistics-tags; done

@ -0,0 +1,30 @@
#!/bin/bash
# Check if argument is provided
if [ -z "$1" ]; then
echo "Usage: $0 <file_or_directory>"
exit 1
fi
# Function to process a single file
process_file() {
local input_file="$1"
local output_file="${input_file%.*}_converted.mkv"
echo "Processing: $input_file -> $output_file"
ffmpeg -i "$input_file" -map 0 -pix_fmt yuv420p10le -c:v libx265 -preset slow -crf 18 -c:a aac -b:a 192k -c:s copy -x265-params profile=main10 "$output_file"
}
# If argument is a file, process it
if [ -f "$1" ]; then
process_file "$1"
elif [ -d "$1" ]; then
# If argument is a directory, process all .mkv files in it
for file in "$1"/*.mkv; do
[ -e "$file" ] || continue # Skip if no matching files
process_file "$file"
done
else
echo "Error: $1 is not a valid file or directory."
exit 1
fi

@ -0,0 +1,37 @@
#!/bin/bash
# Check if mkvmerge is installed
if ! command -v mkvmerge &> /dev/null; then
echo "Error: mkvmerge not found. Please install mkvtoolnix."
exit 1
fi
# Process each .mkv file in the current directory
for mkv in *.mkv; do
# Skip if no .mkv files exist
[[ -e "$mkv" ]] || continue
base_name="${mkv%.mkv}"
# Unset all subtitle tracks in the MKV file before adding new ones
echo "Executing command: mkvmerge -o temp.mkv --no-subtitles \"$mkv\""
if mkvmerge -o temp.mkv --no-subtitles "$mkv"; then
echo "Subtitle tracks unset successfully."
# Mux the new subtitle files with the language "eng"
echo "Executing command: mkvmerge -o out.mkv \"temp.mkv\" --language 0:eng \"${base_name}\"*.srt"
if mkvmerge -o out.mkv "temp.mkv" --language 0:eng "${base_name}"*.srt; then
echo "Muxing successful, replacing original file and deleting subtitles."
mv out.mkv "$mkv"
rm -f "${base_name}"*.srt
else
echo "Muxing failed, keeping original files."
fi
# Clean up temporary file
rm -f temp.mkv
else
echo "Failed to unset subtitles, keeping original files."
fi
done

@ -0,0 +1,27 @@
#!/bin/bash
# Check if mkvmerge is installed
if ! command -v mkvmerge &> /dev/null; then
echo "Error: mkvmerge not found. Please install mkvtoolnix."
exit 1
fi
# Process each .mkv file in the current directory
for mkv in *.mkv; do
# Skip if no .mkv files exist
[[ -e "$mkv" ]] || continue
base_name="${mkv%.mkv}"
# Execute the mkvmerge command with a simplified approach
echo "Executing command: mkvmerge -o out.mkv \"$mkv\" \"${base_name}\"*.srt"
if mkvmerge -o out.mkv "$mkv" "${base_name}"*.srt; then
echo "Muxing successful, replacing original file and deleting subtitles."
mv out.mkv "$mkv"
rm -f "${base_name}"*.srt
else
echo "Muxing failed, keeping original files."
fi
done

@ -0,0 +1,65 @@
import os
import sys
import glob
from lxml import etree
def parse_xml(file_path):
"""Parse XML content from a file and return an ElementTree object."""
try:
with open(file_path, "r", encoding="utf-8") as file:
return etree.parse(file)
except etree.XMLSyntaxError:
print(f"Error parsing XML in {file_path}")
return None
def update_target_file(source_tree, target_tree):
"""Update XML properties in the target file only if they exist in the source file."""
source_root = source_tree.getroot()
target_root = target_tree.getroot()
source_elements = {elem.tag: elem for elem in source_root}
for target_elem in target_root:
if target_elem.tag in source_elements:
target_elem.text = source_elements[target_elem.tag].text
def process_files(source_dir, target_dir):
"""Process all .nfo files in source_dir and update matching files in target_dir."""
source_files = glob.glob(os.path.join(source_dir, "*.nfo"))
target_files = glob.glob(os.path.join(target_dir, "*.nfo"))
for src_file in source_files:
src_filename_base = os.path.splitext(os.path.basename(src_file))[0] # Remove .nfo extension
matching_targets = [tgt for tgt in target_files if src_filename_base in os.path.splitext(os.path.basename(tgt))[0]]
if not matching_targets:
print(f"No matching target file found for: {src_filename_base}")
continue
source_tree = parse_xml(src_file)
if source_tree is None:
continue
for tgt_file in matching_targets:
target_tree = parse_xml(tgt_file)
if target_tree is None:
continue
update_target_file(source_tree, target_tree)
# Save the updated target file
with open(tgt_file, "wb") as f:
target_tree.write(f, encoding="utf-8", xml_declaration=True)
print(f"Updated: {tgt_file}")
if __name__ == "__main__":
if len(sys.argv) != 3:
print("Usage: python script.py <source_directory> <target_directory>")
sys.exit(1)
source_directory = sys.argv[1]
target_directory = sys.argv[2]
process_files(source_directory, target_directory)

@ -0,0 +1,43 @@
#!/bin/bash
# Check if mkvpropedit is installed
if ! command -v mkvpropedit &> /dev/null; then
echo "Error: mkvpropedit not found. Please install mkvtoolnix."
exit 1
fi
# Ensure correct number of arguments
if [ "$#" -ne 2 ]; then
echo "Usage: $0 <mkv-file> <track-number>"
exit 1
fi
mkv_file="$1"
default_track="$2"
# Ensure the file exists
if [[ ! -f "$mkv_file" ]]; then
echo "Error: File '$mkv_file' not found."
exit 1
fi
# Get subtitle track IDs
subtitle_tracks=$(mkvmerge -i "$mkv_file" | grep 'subtitles' | awk -F ': ' '{print $1}' | awk '{print $3}')
if [[ -z "$subtitle_tracks" ]]; then
echo "No subtitle tracks found in '$mkv_file'."
exit 1
fi
# Remove default and forced flags from all subtitle tracks
for track_id in $subtitle_tracks; do
echo "Running: mkvpropedit \"$mkv_file\" --edit track:$track_id --set flag-default=0 --set flag-forced=0"
mkvpropedit "$mkv_file" --edit track:$track_id --set flag-default=0 --set flag-forced=0
done
# Set the specified track as default
echo "Running: mkvpropedit \"$mkv_file\" --edit track:$default_track --set flag-default=1"
mkvpropedit "$mkv_file" --edit track:$default_track --set flag-default=1
echo "Subtitle track $default_track set as default in '$mkv_file'."
Loading…
Cancel
Save