You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
1.9 KiB
Bash
69 lines
1.9 KiB
Bash
### ffmpeg-x265-main10
|
|
# Transcode the videos in a given directory with x265's main10 profile, then put them in a
|
|
# subdirectory for easy replacement after manually checking results.
|
|
|
|
RESULTS_DIRECTORY_NAME="_x265_main10"
|
|
|
|
# TODO: This variable isn't referenced because I didn't figure out how to put it in the glob it
|
|
# needs to be in. Fix that.
|
|
VIDEO_EXTENSIONS="mkv,mp4,avi"
|
|
|
|
_ffmpeg_x265_main10_ffmpeg () {
|
|
original_file="$1"
|
|
results_directory="$2"
|
|
partial_file="${results_directory}/$(basename "${original_file}").part"
|
|
complete_file="${results_directory}/$(basename "${original_file}")"
|
|
mkdir -p "$results_directory"
|
|
|
|
if [ -e "$complete_file" ]; then
|
|
echo "${complete_file} already exists, skipping."
|
|
|
|
else
|
|
ffmpeg -n -i "$original_file" \
|
|
-map 0:v:0 -c:v libx265 -preset medium -profile:v main10 \
|
|
-map 0:a -c:a copy \
|
|
-map '0:s?' -c:s copy \
|
|
-f matroska \
|
|
"$partial_file" \
|
|
|| rm "$partial_file"
|
|
|
|
if [ -e "$partial_file" ]; then
|
|
mv "$partial_file" "$complete_file"
|
|
fi
|
|
fi
|
|
|
|
if [ -e "$destination" ]; then
|
|
rmdir --ignore-fail-on-non-empty "$destination"
|
|
fi
|
|
}
|
|
|
|
arg_file="$1"
|
|
|
|
if [ -z "$arg_file" ]; then
|
|
arg_file=.
|
|
fi
|
|
|
|
if [ -f "$arg_file" ]; then
|
|
destination="${arg_file:h}/${RESULTS_DIRECTORY_NAME}"
|
|
_ffmpeg_x265_main10_ffmpeg "$arg_file" "$destination"
|
|
|
|
elif [ -d "$arg_file" ]; then
|
|
destination="${arg_file}/${RESULTS_DIRECTORY_NAME}"
|
|
|
|
# List all the video files in an array for future expansions like:
|
|
# - A prompt before you commit to hours of transcoding.
|
|
# - Removing items that are already completed.
|
|
# - Interactively discarding list items
|
|
# - etc.
|
|
# TODO: Use $VIDEO_EXTENSIONS here instead of hard-coding extension names.
|
|
files=($arg_file/*.{mkv,mp4,avi}(N))
|
|
for fname in $files; do
|
|
_ffmpeg_x265_main10_ffmpeg "$fname" "$destination"
|
|
done
|
|
|
|
else
|
|
echo "ffmpeg_x265_main10: Error:${arg_file} is not a file or directory."
|
|
fi
|
|
|
|
# vim:syntax=sh filetype=sh
|