#!/bin/bash function _help() { echo "command" echo -e "\t split | merge | transition | compress" echo "param" echo -e "\t-f split or merge data file" echo -e "\t-i input video file" echo -e "\t-h help" exit 1 } # 获取前缀 function _prefix() { [ "$DATA"x == ""x ] && _help PREFIX=`echo $DATA |cut -f1 -d'.'` } function _checkInput() { [ "$INPUT"x == ""x ] && _help FORMAT=`echo $INPUT |awk -F'.' '{print $NF}'` NAME=`echo $INPUT |awk -F'.' '{print $1}'` } # 将使用win10 创建的转场动画转为 4k 分辨率,和 GeForce Experience 保持一致 function _transition() { _checkInput ffmpeg.exe -y -i $INPUT -s 3840x2160 -r 60 -video_track_timescale 90k $NAME-4k.$FORMAT } # DATA 格式 # 开始时间 持续时长,如: # 00:00:00 00:00:10 function _split() { _checkInput _prefix [ ! -d $PREFIX ] && mkdir $PREFIX echo -n "" > $PREFIX/list.txt # 保证数据文件结尾换行 cp $DATA $PREFIX/tmp.txt echo "" >> $PREFIX/tmp.txt ID=1 while read line;do START=`echo $line |awk '{print $1}'` LENGTH=`echo $line |awk '{print $2}'` [ "$START"x == ""x ] && continue ffmpeg.exe -y -ss $START -t $LENGTH -accurate_seek -i $INPUT -codec copy -avoid_negative_ts 1 $PREFIX/$ID.$FORMAT echo "file $ID.$FORMAT" >> $PREFIX/list.txt ((ID=ID+1)) done < $PREFIX/tmp.txt rm -f $PREFIX/tmp.txt } function _merge() { _prefix FORMAT=`head -n1 $DATA |awk -F'.' '{print $NF}'` ffmpeg.exe -y -f concat -i $DATA -c copy $PREFIX-merge.$FORMAT } function _compress() { _checkInput ffmpeg.exe -y -i $INPUT -r 30 -vf scale=-2:1080 $NAME-1080p.$FORMAT ffmpeg.exe -y -i $INPUT -r 30 -vf scale=-2:720 $NAME-720p.$FORMAT } COMMAND=$1 for i in "$@" do key=$1 case $key in -f) DATA=$2; shift 2;; -i) INPUT=$2; shift 2;; -h) _help;; *) shift;; esac done # 功能 case $COMMAND in "split") _split;; "transition") _transition;; "merge") _merge;; "compress") _compress;; *) _help;; esac