#!/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: 张宇鹏" 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 <_/___.' >' "". | | : '- \'.;'\ _ /';.'/ - ' : | | \ \ '_. \_ __\ /__ _/ .-' / / ====='-.____'.___ \_____/___.-'____.-'===== '=---=' ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 佛祖保佑 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 <_/___.' >' "". | | : '- \'.;'\ _ /';.'/ - ' : | | \ \ '_. \_ __\ /__ _/ .-' / / ====='-.____'.___ \_____/___.-'____.-'===== '=---=' ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 佛祖保佑 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