#!/bin/bash version="0.1.6" videoFile='' audioFile='' 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 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 "-a, --audio=audio file path audio file path" 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 ;; -a) shift if test $# -gt 0; then export audioFile=$1 else echo "{$red}no audioFile specified" exit 1 fi shift ;; --audio*) export audioFile=$(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/$version.version" } takeVideoCap() { FFREPORT=file="$outputFolder/$outputName.cap.txt":level=32 ffmpeg -hide_banner -loglevel error -y -i $tempVideo -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##*.} audioFileType=${audioFile##*.} tempbaseAudio="$tempFolder/$tempFilePrefix-base.$audioFileType" tempAudio="$tempFolder/$tempFilePrefix.$audioFileType" tempVideo="$tempFolder/$tempFilePrefix.$videoFileType" # FFREPORT=file="$outputFolder/audio.log":level=32 ffmpeg -i $tempAudio -filter_complex 'lv2=plugin=https\\://github.com/lucianodato/speech-denoiser' $tempAudio -y FFREPORT=file="$outputFolder/$outputName.audio.txt":level=32 ffmpeg -i $audioFile -af "lv2=p=https\\\\://github.com/lucianodato/speech-denoiser" -ac 1 $tempAudio -y RC=$? if [ "${RC}" -ne "0" ]; then FFREPORT=file="$outputFolder/$outputName.audio.txt":level=32 ffmpeg -i $audioFile -af "highpass=f=200, lowpass=f=3000" $tempAudio -y fi # -vf "scale=iw/2:ih/2" ffmpeg -i $videoFile -i $tempAudio -c:v copy -c:a aac -strict -2 $tempVideo -y FFREPORT=file="$outputFolder/$outputName.$videoFileType.txt":level=32 ffmpeg -i $tempVideo -s 1056x792 -c:v libx264 -profile:v high -level:v 4.1 -vf "scale=iw/2:ih/2" -pix_fmt yuv420p -movflags +faststart -bf 2 -c:a copy "$outputFolder/$outputName.$videoFileType" -y FFREPORT=file="$outputFolder/$outputName.flv.txt":level=32 ffmpeg -i $tempVideo -s 1056x792 -c:v libx264 -ar 44100 -profile:v high -level:v 4.1 -vf "scale=iw/2:ih/2" -pix_fmt yuv420p -movflags +faststart -bf 2 -c:a copy "$outputFolder/$outputName.flv" -y takeVideoCap mkVerison # ffmpeg -i $tempVideo -s 1056x792 -c:v libx265 -movflags faststart -bf 2 -c:a copy "$outputFolder/$outputName.265.$videoFileType" -y # export lastOutPutVideo=$outputFolder/$outputName.$videoFileType # export lastOutPutVideoFlv="$outputFolder/$outputName.flv" if test $allowCacheStay -eq 0; then rm $tempAudio $tempVideo fi } concatAllLogFile() { cat $outputFolder/*.txt >>"$outputFolder/$outputName.full.log" rm $outputFolder/*.txt # rm "$outputFolder/$outputName.$videoFileType.log" "$outputFolder/$outputName.audio.log" "$outputFolder/$outputName.flv.log" } if [ ! -z $videoFile ] && [ ! -z $audioFile ] && [ ! -z $outputName ] && [ ! -z $outputFolder ]; then # ffmpeg -i $audioFile -af "highpass=f=200, lowpass=f=3000" temp.mp3 -y # ffmpeg -i $audioFile -filter_complex 'lv2=plugin=https\\://github.com/lucianodato/speech-denoiser' $tempAudio -y # ffmpeg -i $videoFile -i $tempAudio -c:v copy -c:a aac $tempVideo -y # ffmpeg -i $tempVideo -s 1056x792 -c:v libx264 -profile:v high -level:v 4.0 -movflags faststart -bf 2 -c:a copy $outputFolder/$outputName.$i -y # for i in "${outputVideoList[@]}"; do # done # ffmpeg -i temp.mp4 -s 1056x792 -c:v libx264 -profile:v high -level:v 4.0 -movflags faststart -bf 2 -c:a copy temp1.mp4 -y # ffmpeg -i temp1.mp4 -pix_fmt rgb24 -color_range 2 $output -y # rm temp.mp4 temp1.mp4 temp.mp3 if [ ! -d $outputFolder ]; then mkdir -p $outputFolder fi covertVideoTask concatAllLogFile if command_exists "mediainfo"; then mediainfo --fullscan "$outputFolder/$outputName.$videoFileType" --Output=JSON >"$outputFolder/$outputName.json" mediainfo --fullscan "$outputFolder/$outputName.flv" --Output=JSON >"$outputFolder/$outputName.flv.json" fi echo "\033[0;32m" cat <_/___.' >' "". | | : '- \'.;'\ _ /';.'/ - ' : | | \ \ '_. \_ __\ /__ _/ .-' / / ====='-.____'.___ \_____/___.-'____.-'===== '=---=' ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 佛祖保佑 TTT 顺利转换 EOF echo "\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 $audioFile ]; then echo "${red}miss audio file path : 缺音频少文件路径" fi if [ -z $outputName ]; then echo "${red}miss file name : 缺音输出文件名称" fi if [ -z $outputFolder ]; then echo "${red}miss output path : 缺音输出路径" fi fi fi