Add new files and change fps to 30
This commit is contained in:
parent
d4ab65bf19
commit
890cf28a09
1
.gitignore
vendored
1
.gitignore
vendored
@ -4,4 +4,5 @@ vars
|
|||||||
mailer.log
|
mailer.log
|
||||||
process.log
|
process.log
|
||||||
upload.log
|
upload.log
|
||||||
|
library.log
|
||||||
web/streams/*
|
web/streams/*
|
||||||
|
|||||||
48
convert
Executable file
48
convert
Executable file
@ -0,0 +1,48 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set +vx
|
||||||
|
# convert - Encode for Library display
|
||||||
|
# Usage: convert
|
||||||
|
# Called by cron every minute; process oldest .library file in ./web/streams
|
||||||
|
# and upload it to the Library display server
|
||||||
|
# Required: file coreutils(readlink ls head mv tail rm) ffmpeg
|
||||||
|
|
||||||
|
# Check for oldest uploaded file
|
||||||
|
_=$(readlink -f -- "${BASH_SOURCE:-$0}") path=${_%/*}
|
||||||
|
log=$path/library.log dir=$path/web/streams
|
||||||
|
upload=$(ls -Atr "$dir"/*.library 2>/dev/null |head -1)
|
||||||
|
|
||||||
|
# Finished if no videos/*.library videos found
|
||||||
|
[[ $upload ]] || exit 0
|
||||||
|
|
||||||
|
Log(){ # 1:message 2:returncode(empty: no exit) I:log
|
||||||
|
echo -e "$(date +'%Y-%m-%d at %H:%M:%S') $1">>"$log"
|
||||||
|
[[ $2 ]] && exit $2 || return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# Rename upload and check type
|
||||||
|
file=${upload%.library} video=$file.mp4 name=${file##*/}
|
||||||
|
mv "$upload" "$file"
|
||||||
|
|
||||||
|
type=$(file -bL --mime-type "$file")
|
||||||
|
[[ ! ${type:0:5} = video ]] && Log "File $name is of type $type" 1
|
||||||
|
|
||||||
|
# Encode video
|
||||||
|
b= F= s= d= f= t=
|
||||||
|
[[ $bitrate ]] && bi="-b:v $bitrate -maxrate $bitrate -bufsize $((bitrate*2))"
|
||||||
|
[[ $format ]] && fo="format=$format,"
|
||||||
|
[[ $scale ]] && sc="scale=${scale//:/x},"
|
||||||
|
[[ $dar ]] && da="setdar=${dar//://},"
|
||||||
|
[[ $fps ]] && fp="fps=$fps,"
|
||||||
|
[[ $fo || $sc || $da || $fp ]] && vf="-vf '$fo$sc$da$fp" vf="${vf%,}'"
|
||||||
|
[[ $tbn ]] && tb="-video_track_timescale $tbn"
|
||||||
|
cmd="ffmpeg -y -i $file -c:v libx264 -x264opts no-scenecut $bi $vf $tb -c:a copy $video"
|
||||||
|
set -o pipefail # to get ffmpeg's returncode
|
||||||
|
ffmpeg -y -i "$file" -c:v libx264 -x264opts no-scenecut -vf "scale=1920x980,fps=15" "$video" 2>&1 |tail -n 20 >"$log" ||
|
||||||
|
Log "Error encoding $name" 2
|
||||||
|
|
||||||
|
Log "Encoding $video done"
|
||||||
|
|
||||||
|
curl -v -F video=@$dir/$name.mp4 -F type=play http://192.168.7.21:8888/process.php &&
|
||||||
|
Log "Dispatching video done" 0 ||
|
||||||
|
Log "Error dispatching video" 3
|
||||||
|
|
||||||
4
encode
4
encode
@ -74,8 +74,8 @@ error=0
|
|||||||
#ffmpeg -y -i "$file" -c:v libx264 -x264opts no-scenecut -b:v 6M -force_key_frames 'expr:gte(t,n_forced*2)' -c:a copy -tune zerolatency -f mp4 "$video" |tail -n 20 >"$file.0log" || error=1
|
#ffmpeg -y -i "$file" -c:v libx264 -x264opts no-scenecut -b:v 6M -force_key_frames 'expr:gte(t,n_forced*2)' -c:a copy -tune zerolatency -f mp4 "$video" |tail -n 20 >"$file.0log" || error=1
|
||||||
# Double pass
|
# Double pass
|
||||||
set -o pipefail # to get ffmpeg's returncode
|
set -o pipefail # to get ffmpeg's returncode
|
||||||
ffmpeg -y -i "$file" -c:v libx264 -x264opts no-scenecut -b:v 6M -maxrate 6M -bufsize 12M -force_key_frames 'expr:gte(t,n_forced*2)' -vf "format=yuv420p,scale=1920x1080,setdar=16/9,fps=25" -video_track_timescale 18000 -movflags faststart -tune zerolatency -pass 1 -passlogfile "$file" -f mp4 "$video" 2>&1 |tail -n 20 >"$file.1log" &&
|
ffmpeg -y -i "$file" -c:v libx264 -x264opts no-scenecut -b:v 6M -maxrate 6M -bufsize 12M -force_key_frames 'expr:gte(t,n_forced*2)' -vf "format=yuv420p,scale=1920x1080,setdar=16/9,fps=30" -video_track_timescale 18000 -movflags faststart -tune zerolatency -pass 1 -passlogfile "$file" -f mp4 "$video" 2>&1 |tail -n 20 >"$file.1log" &&
|
||||||
ffmpeg -y -i "$file" -c:v libx264 -x264opts no-scenecut -b:v 6M -maxrate 6M -bufsize 12M -force_key_frames 'expr:gte(t,n_forced*2)' -vf "format=yuv420p,scale=1920x1080,setdar=16/9,fps=25" -video_track_timescale 18000 -movflags faststart -tune zerolatency -pass 2 -passlogfile "$file" -f mp4 "$video" 2>&1 |tail -n 20 >"$file.2log" ||
|
ffmpeg -y -i "$file" -c:v libx264 -x264opts no-scenecut -b:v 6M -maxrate 6M -bufsize 12M -force_key_frames 'expr:gte(t,n_forced*2)' -vf "format=yuv420p,scale=1920x1080,setdar=16/9,fps=30" -video_track_timescale 18000 -movflags faststart -tune zerolatency -pass 2 -passlogfile "$file" -f mp4 "$video" 2>&1 |tail -n 20 >"$file.2log" ||
|
||||||
error=1
|
error=1
|
||||||
|
|
||||||
# Remove logfiles
|
# Remove logfiles
|
||||||
|
|||||||
20
getcron
Executable file
20
getcron
Executable file
@ -0,0 +1,20 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set +vx
|
||||||
|
# getcron - Process crontab stream entries
|
||||||
|
# Usage: getcron [<user>]
|
||||||
|
# If <user> is given, only show entries of that user
|
||||||
|
|
||||||
|
# Get uncommented crontab stream entries
|
||||||
|
mapfile -t lines < <(crontab -l |grep -v '^#' |grep ' *\s/var/www/stream ')
|
||||||
|
|
||||||
|
#echo "User: $1"
|
||||||
|
#now=$(date '+%Y-%m-%d %H:%M')
|
||||||
|
for line in "${lines[@]}"
|
||||||
|
do
|
||||||
|
#tag=${line##* } _=${tag#*.} dt="${_:0:10} ${_:11:2}:${_:13:2}" _=${_:16} user=${_%%[@:]*}
|
||||||
|
#[[ $dt > $now && $user = $1 ]] && echo "$dt $tag"
|
||||||
|
read m h d M _ _ tag <<<"$line"
|
||||||
|
_=${tag#*.} _=${_:16} user=${_%%[@:]*}
|
||||||
|
dt=$(printf "%02d:%02d %s %d" $h $m $(date -d 2022-$M-01 +%B) $d)
|
||||||
|
[[ -z $1 || $user = $1 ]] && printf "%-20s %s\n" "$dt" $tag
|
||||||
|
done |sort
|
||||||
Loading…
Reference in New Issue
Block a user