Newer
Older
file=""
lengths=""
quiet=0
debug=false
version() {
echo "ffmpegsplit v0.1"
}
display_help() {
cat << EOH
Usage:
Video file will be split into parts at times specified in times-file
Times file contains times in seconds each on separate line
Empty lines (except for trailing) will confuse this script
(Not implemented options are marked with !)
Options:
-q --quiet Surpresses ffmpeg output. Put twice to surpress all output
-d --debug Do not invoke ffmpeg and only show commands to run
-v --version Shows version information
-h --help Shows this help message
-i --input Input video file (required)
-t --times Input times file (required)
Written by Jakub Skořepa (jakub at skorepa.info) in 2015-4
Distributed under:
GNU General Public License 3 or newer as published by Free Software Foundation
EOH
}
while [ $# -gt 0 ]
do
key="$1"
case $key in
-q|--quiet)
let quiet++
;;
-d|--debug)
debug=true
;;
-v|--version)
version
exit
;;
-h|--help)
display_help
exit
;;
-i|--input)
file="$2"
shift
;;
-t|--times)
lengths="$2"
shift
;;
*)
echo "Warning: unknown option $key"
;;
esac
shift
done
if [ -z "$file" ] && [ -z "$lengths" ]
then
echo "File and times file was not specified"
echo "See $0 --help for more information"
exit
fi
if [ -z "$file" ]
then
echo "File was not specified"
echo "See $0 --help for more information"
exit
fi
if [ -z "$lengths" ]
then
echo "Times file was not specified"
echo "See $0 --help for more information"
exit
fi
echo "ffmpeg -i \"$file\" -to "$(sed "1q;d" $lengths)" 1.mp4"
if [ ! $debug ]
then
if [ $quiet -ge 1 ]
then
ffmpeg -i "$file" -to $(sed "1q;d" $lengths) 1.mp4 > /dev/null 2>&1
else
ffmpeg -i "$file" -to $(sed "1q;d" $lengths) 1.mp4
fi
fi
Nm=$[N-1]
for I in $(eval echo "{1..$Nm}")
do
t=$(sed $I"q;d" "$lengths") # start time
t2=$(sed $[I+1]"q;d" "$lengths") # end time
t0=$[t-10] # start time - 10
t1=$[t2-t0] # length of segment + 10
echo "ffmpeg -ss $t0 -i \"$file\" -ss 10 -to $t1 $I.mp4"
if [ ! $debug ]
then
if [ $quiet -ge 1 ]
then
ffmpeg -ss $t0 -i "$file" -ss 10 -to $t1 "$I"".mp4" > /dev/null 2>&1
else
ffmpeg -ss $t0 -i "$file" -ss 10 -to $t1 "$I"".mp4"
fi
fi
echo "ffmpeg -ss "$[t-10]" -i \"$file\" -ss 10 $N.mp4"