123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- #!/bin/bash
- version="1.0.4"
- videoFile=''
- rectspec=''
- outputName=''
- outputFolder=''
- allowCacheStay=0
- tempFolder=/tmp/4dage-ffmpeg
- time=$(date "+%Y%m%d-%H%M%S")
- tempFilePrefix="4dage-source-${time}"
- declare -a outputVideoList=('mp4 flv')
- red=$(tput setaf 1)
- green=$(tput setaf 2)
- reset=$(tput sgr0)
- command_exists() {
- if ! [[ -x $(command -v "$1") ]]; then
- return 1
- fi
- return 0
- }
- print_usage() {
- echo -e "\033[43;34m $package - 4dage ffmpeg v2 custom version for ffmpeg: \033[0m"
- echo "${green}If have problem with this, please contact with gemer AKA: 张宇鹏<zhangyupeng@cgaii.com>"
- echo "$package [options] application [arguments]"
- echo " "
- echo "${red}options:"
- echo "-h, --help show brief help"
- echo "-s, --source=source file path input the video source path"
- echo "-r, --rect=rectange size rectange size"
- echo "-n, --name=output file name output file name"
- echo "-o, --output=DIR specify a directory to store output in"
- echo "-v, --version output verison"
- echo "--cahche maintain the cahche file for tmp folder"
- echo " "
- echo -e "\033[0;33m"
- cat <<EOF
- _oo0oo_
- 088888880
- 88" . "88
- (| -_- |)
- 0\ = /0
- ___/'---'\___
- .' \\\\| |// '.
- / \\\\||| : |||// \\
- /_ ||||| -:- |||||- \\
- | | \\\\\\ - /// | |
- | \_| ''\---/'' |_/ |
- \ .-\__ '-' __/-. /
- ___'. .' /--.--\ '. .'___
- ."" '< '.___\_<|>_/___.' >' "".
- | | : '- \'.;'\ _ /';.'/ - ' : | |
- \ \ '_. \_ __\ /__ _/ .-' / /
- ====='-.____'.___ \_____/___.-'____.-'=====
- '=---='
-
-
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- 佛祖保佑 TTT 万无一失
- EOF
- echo -e "\033[m"
- }
- make_temp_dir() {
- # # Make a temp folder
- if [ ! -d $tempFolder ]; then
- mkdir -p $tempFolder && chmod 776 $tempFolder
- fi
- }
- make_temp_dir
- while test $# -gt 0; do
- case "$1" in
- -h | --help)
- print_usage
- exit 0
- ;;
- -s)
- shift
- if test $# -gt 0; then
- export videoFile=$1
- else
- echo "{$red}no video path specified"
- exit 1
- fi
- shift
- ;;
- --source*)
- export videoFile=$(echo $1 | sed -e 's/^[^=]*=//g')
- echo $1
- shift
- ;;
- -r)
- shift
- if test $# -gt 0; then
- export rectspec=$1
- else
- echo "{$red}no rectangle format specified"
- exit 1
- fi
- shift
- ;;
- --rect*)
- export rectspec=$(echo $1 | sed -e 's/^[^=]*=//g')
- shift
- ;;
- -o)
- shift
- if test $# -gt 0; then
- export outputFolder=$1
- else
- echo "{$red}no output dir folder specified"
- exit 1
- fi
- shift
- ;;
- --output*)
- export outputFolder=$(echo $1 | sed -e 's/^[^=]*=//g')
- shift
- ;;
- -n)
- shift
- if test $# -gt 0; then
- export outputName=$1
- else
- echo "no output video name specified"
- exit 1
- fi
- shift
- ;;
- --name*)
- export outputName=$(echo $1 | sed -e 's/^[^=]*=//g')
- shift
- ;;
- --cache)
- shift
- echo "allow cahche remain"
- export allowCacheStay=1
- shift
- ;;
- -v)
- echo "$version"
- shift
- ;;
- *)
- print_usage
- # echo "111"
- break
- ;;
- esac
- done
- mkVerison() {
- touch "$outputFolder/4dage-ffmpeg-v2-$version.version"
- }
- takeVideoCap() {
- FFREPORT=file="$outputFolder/$outputName.cap.txt":level=48 ffmpeg -hide_banner -loglevel error -y -i "$outputFolder/$outputName.mp4" -r 1 -ss 00:00:01 -vframes 1 -vf "transpose=1,scale=iw/5:ih/5,setsar=1:1" -f image2 "$outputFolder/$outputName.jpg"
- }
- covertVideoTask() {
- videoFileType=${videoFile##*.}
- FFREPORT=file="$outputFolder/$outputName.$videoFileType.txt":level=48 ffmpeg -hide_banner -y -i $videoFile \
- -filter_complex "[0:v]crop=$rectspec,scale=iw/2:ih/2,pad=ceil(iw/2)*2:ceil(ih/2)*2,split=2[out1][out2]" \
- -preset superfast -threads 2 -b 1.8M -minrate 1.8M -maxrate 1.8M -bufsize 2M \
- -map '[out1]' -map 0:a? -profile:v high -vcodec libx264 -ab 128k "$outputFolder/$outputName.mp4" \
- -map '[out2]' -map 0:a? -profile:v high -vcodec libx264 -ab 128k "$outputFolder/$outputName.flv"
- takeVideoCap
- mkVerison
- }
- clearDist() {
- rm -f $outputFolder/*.json
- rm -f $outputFolder/*.version
- }
- concatAllLogFile() {
- cat $outputFolder/*.txt >>"$outputFolder/$outputName.full.log"
- rm $outputFolder/*.txt
- }
- if [ ! -z $videoFile ] && [ ! -z $rectspec ] && [ ! -z $outputName ] && [ ! -z $outputFolder ]; then
- if [ ! -d $outputFolder ]; then
- mkdir -p $outputFolder
- else
- clearDist
- fi
- covertVideoTask
- concatAllLogFile
- if command_exists "mediainfo"; then
- mediainfo --fullscan "$outputFolder/$outputName.mp4" --Output=JSON >"$outputFolder/$outputName.json"
- mediainfo --fullscan "$outputFolder/$outputName.flv" --Output=JSON >"$outputFolder/$outputName.flv.json"
- fi
- echo -e "\033[0;32m"
- cat <<EOF
- _oo0oo_
- 088888880
- 88" . "88
- (| -_- |)
- 0\ = /0
- ___/'---'\___
- .' \\\\| |// '.
- / \\\\||| : |||// \\
- /_ ||||| -:- |||||- \\
- | | \\\\\\ - /// | |
- | \_| ''\---/'' |_/ |
- \ .-\__ '-' __/-. /
- ___'. .' /--.--\ '. .'___
- ."" '< '.___\_<|>_/___.' >' "".
- | | : '- \'.;'\ _ /';.'/ - ' : | |
- \ \ '_. \_ __\ /__ _/ .-' / /
- ====='-.____'.___ \_____/___.-'____.-'=====
- '=---='
-
-
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- 佛祖保佑 TTT 顺利转换
- EOF
- echo -e "\033[m"
- echo "covert done!"
- else
- if [ ! -n "$1" ]; then
- print_usage
- else
- if [ -z $videoFile ]; then
- echo "${red}miss video file path: 缺视频文件路径"
- fi
- if [ -z $rectspec ]; then
- echo "${red}miss rect spec : 缺少rect的技术参数"
- fi
- if [ -z $outputName ]; then
- echo "${red}miss file name : 缺少输出文件名称"
- fi
- if [ -z $outputFolder ]; then
- echo "${red}miss output path : 缺少输出路径"
- fi
- fi
- fi
|