51 hours to 31 hours

This commit is contained in:
2024-10-19 22:21:50 -07:00
parent 999c6660e9
commit fecb7f5f04
5 changed files with 389 additions and 72 deletions

102
notebooks/create_full_matted.sh Executable file
View File

@@ -0,0 +1,102 @@
#!/bin/bash
# Exit immediately if a command exits with a non-zero status.
set -e
# Function to display informational messages in blue
echo_info() {
echo -e "\033[1;34m[INFO]\033[0m $1"
}
# Function to display error messages in red
echo_error() {
echo -e "\033[1;31m[ERROR]\033[0m $1"
}
# Function to display usage instructions
usage() {
echo "Usage: $0 <segments_directory>"
echo "Example: $0 606-short_segments"
exit 1
}
# Check if exactly one argument is provided
if [ "$#" -ne 1 ]; then
echo_error "Incorrect number of arguments."
usage
fi
# Assign the first argument to SEGMENTS_DIR
SEGMENTS_DIR="$1"
# Resolve the absolute path of SEGMENTS_DIR
SEGMENTS_DIR=$(realpath "$SEGMENTS_DIR")
# Check if the provided argument is a directory
if [ ! -d "$SEGMENTS_DIR" ]; then
echo_error "The provided path '$SEGMENTS_DIR' is not a directory or does not exist."
exit 1
fi
echo_info "Segments directory set to: $SEGMENTS_DIR"
# Check if ffmpeg is installed
if ! command -v ffmpeg &> /dev/null; then
echo_error "ffmpeg could not be found. Please install ffmpeg and ensure it's in your PATH."
exit 1
fi
# Create a temporary file to store the list of videos to concatenate
concat_list=$(mktemp)
# Ensure the temporary file is deleted on script exit
trap "rm -f $concat_list" EXIT
# Iterate over each segment directory within SEGMENTS_DIR in sorted order
# Assuming segments are named as segment_1, segment_2, etc.
for segment_dir in "$SEGMENTS_DIR"/segment_*; do
if [ -d "$segment_dir" ]; then
segment_name=$(basename "$segment_dir")
echo_info "Processing segment: $segment_name"
# Define the path to output-matted.mp4
output_matted="$segment_dir/output-matted.mp4"
# Check if output-matted.mp4 exists
if [ ! -f "$output_matted" ]; then
echo_error " '$output_matted' does not exist. Skipping this segment."
continue
fi
# Append the file path to the concat list in the required format
echo "file '$output_matted'" >> "$concat_list"
echo_info " Added '$output_matted' to the concatenation list."
else
echo_error "'$segment_dir' is not a directory. Skipping."
fi
done
# Check if the concat list has at least one file
if [ ! -s "$concat_list" ]; then
echo_error "No 'output-matted.mp4' files found in the provided segments directory."
exit 1
fi
echo_info "Starting concatenation of videos..."
# Define the output file path
output_full="full_output_matted.mp4"
# Execute ffmpeg to concatenate videos using the concat demuxer
ffmpeg -f concat -safe 0 -i "$concat_list" -c copy "$output_full" \
&& echo_info "Successfully created '$output_full' in $(pwd)"
echo_info "Concatenation process completed."