123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267 |
- #!/bin/bash
- version="0.0.5"
- picsFolder=''
- audioFile=''
- outputName=''
- outputFolder=''
- allowCacheStay=0
- allowOrigin=0
- frameRate='30'
- 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-img2video 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 "-p, --source=pic file folder path input the picture 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 "--allow-origin, allow maintain origin video output"
- echo "-rate, aka: 23/23.8/24/25/30/50/60 specify output video framerate"
- echo "-v, --version output verison"
- 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
- ;;
- -p)
- shift
- if test $# -gt 0; then
- export picsFolder=$1
- else
- echo "{$red}no video path specified"
- exit 1
- fi
- shift
- ;;
- --pic*)
- export picsFolder=$(echo $1 | sed -e 's/^[^=]*=//g')
- echo $1
- shift
- ;;
- -a)
- shift
- if test $# -gt 0; then
- export audioFile=$1
- else
- echo "{$red}no rectangle format specified"
- exit 1
- fi
- shift
- ;;
- -rate)
- shift
- export frameRate=$1
- shift
- ;;
- --allow-origin)
- export allowOrigin=1
- 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/4dage-ffmpeg-img2video-$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() {
- picsFolderType=${picsFolder##*.}
- allImages="$picsFolder/%06d.jpg"
- # -i $audioFile -filter_complex "[0:v]scale=1920:-1[vid];[vid]split=2[out1][out2]" \
- echo "frameRate: $frameRate"
- FFREPORT=file="$outputFolder/$outputName.txt":level=48 ffmpeg -vsync 0 -framerate $frameRate -hide_banner -y -i $allImages \
- -preset superfast -threads 2 -pix_fmt yuv420p -c:v libx264 "$outputFolder/$outputName.origin.mp4"
- FFREPORT=file="$outputFolder/$outputName.txt":level=48 ffmpeg -hide_banner -y -i "$outputFolder/$outputName.origin.mp4" \
- -i $audioFile -filter_complex "[0:v]scale=1920:-1[vid];[vid]split=2[out1][out2]" \
- -threads 2 -b 1.8M -minrate 1.8M -maxrate 1.8M -bufsize 2M \
- -map '[out1]' -map 1:a? -strict -2 -shortest -profile:v high -vcodec libx264 -c:a copy -ab 128k "$outputFolder/$outputName.mp4" \
- -map '[out2]' -map 1:a? -strict -2 -shortest -profile:v high -vcodec libx264 -c:a copy -ab 128k "$outputFolder/$outputName.flv"
- if test $allowOrigin -eq 0; then
- rm "$outputFolder/$outputName.origin.mp4"
- fi
- takeVideoCap
- mkVerison
- }
- clearDist() {
- rm -f $outputFolder/*.json
- rm -f $outputFolder/*.version
- }
- concatAllLogFile() {
- cat $outputFolder/*.txt >>"$outputFolder/$outputName.full.log"
- rm $outputFolder/*.txt
- }
- if [ ! -z $picsFolder ] && [ ! -z $audioFile ] && [ ! -z $outputName ] && [ ! -z $outputFolder ]; then
- if [ ! -d $outputFolder ]; then
- mkdir -p $outputFolder
- else
- clearDist
- fi
- echo "frameRate:$frameRate"
- 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 $picsFolder ]; then
- echo "${red}miss pics file folder path: 缺图像文件路径"
- fi
- if [ -z $audioFile ]; 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
|