50 lines
1.1 KiB
Bash
Executable File
50 lines
1.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
usage() {
|
|
echo "Usage: $(basename "$0") file_name start end"
|
|
}
|
|
|
|
extract_images() {
|
|
local video_file=$1
|
|
local start=$2
|
|
local end=$3
|
|
local start_in_seconds
|
|
local end_in_seconds
|
|
local date_diff
|
|
|
|
start_in_seconds=$(date --date "${start}" +%s)
|
|
end_in_seconds=$(date --date "${end}" +%s)
|
|
date_diff=$((end_in_seconds - start_in_seconds))
|
|
|
|
ffmpeg -ss "${start}" -t ${date_diff} -i "${video_file}" -qscale:v 2 output_%03d.jpg
|
|
}
|
|
|
|
if [[ $# -ne 3 ]]; then
|
|
usage
|
|
exit 0
|
|
fi
|
|
|
|
if ! command -v ffmpeg >/dev/null 2>&1; then
|
|
echo "ffmpeg: command not found"
|
|
exit 1
|
|
fi
|
|
|
|
FILENAME=$1
|
|
START=$2
|
|
END=$3
|
|
|
|
if [ ! -f "${FILENAME}" ]; then
|
|
echo "${FILENAME}: not a file"
|
|
exit 1
|
|
fi
|
|
if ! { [[ ${START} =~ ^([0-9]{2}:)?[0-9]{2}:[0-9]{2}$ ]] && date -d "${START}" >/dev/null 2>&1; }; then
|
|
echo "${START}: incorrect time"
|
|
exit 1
|
|
fi
|
|
if ! { [[ ${END} =~ ^([0-9]{2}:)?[0-9]{2}:[0-9]{2}$ ]] && date -d "${END}" >/dev/null 2>&1; }; then
|
|
echo "${END}: incorrect time"
|
|
exit 1
|
|
fi
|
|
|
|
extract_images "${FILENAME}" "${START}" "${END}"
|