Start work on client shell script

This commit is contained in:
Daniel Olsen 2020-07-15 04:19:34 +02:00
parent 90775ea37e
commit ef043548c7
3 changed files with 103 additions and 0 deletions

1
.gitignore vendored
View File

@ -1 +1,2 @@
/target /target
/result

21
default.nix Normal file
View File

@ -0,0 +1,21 @@
let
pkgs = import <nixpkgs> {};
in
with pkgs;
stdenv.mkDerivation {
pname = "triav1c";
version = "0.0.0-20200715-0";
src = ./. ;
nativeBuildInputs = [ makeWrapper ];
installPhase = ''
mkdir -p $out/bin
cp src/static/triav1c.sh $out/bin/triav1c
chmod +x $out/bin/triav1c
wrapProgram $out/bin/triav1c \
--prefix PATH : ${lib.makeBinPath [ ffmpeg libaom ]}
'';
}

81
src/static/triav1c.sh Normal file
View File

@ -0,0 +1,81 @@
#! /usr/bin/env bash
############################################################
# A simpler rewrite of av1master client.sh for prototyping #
############################################################
set -euo pipefail
IFS=$'\n\t'
#######################
# $1 - file #
# $2 - AOM Options #
# $3 - FFMPEG Options #
# $4 - do VMAF? #
#######################
encode_aomenc_two_pass() {
file="$1"
aom_options="$2"
# Remove any character that isn't a letter, an underscore, a dash, or =
# Hopefully "cleans" the commandline
# so that you can't just take over a system
# Still possible to misuse ffmpeg and aomenc to overwrite any file
# the user running the program has access to.
# THIS IS NOT SAFE
# But it's something
aom_options=${aom_options//[^a-zA-Z0-9_\- =]/}
# Same story as above but also
ffmpeg_options="$3"
ffmpeg_options=${ffmpego//[^a-zA-Z0-9_\- =:]/}
# set to boolean
doVMAF=$4
set +e
ffmpeg -nostats -hide_banner -loglevel warning \
-i "$file" "$ffmpeg_options" -f yuv4mpegpipe - | aomenc - "$aom_options" \
--pass=1 --passes=2 --fpf="$file".fpf --ivf -o "$file".out.ivf
retval=$?
if [[ $retval -ne 0 ]]; then
echo "Error running aomenc pass 1 of 2" >&2
curl -s -L "$base_url"/edit_status/"$job_id"/error || true
echo "" >&2
return 1
fi
ffmpeg -nostats -hide_banner -loglevel warning \
-i "$file" "$ffmpeg_options" -f yuv4mpegpipe - | aomenc - "$aom_options" \
--pass=1 --passes=2 --fpf="$file".fpf --ivf -o "$file".out.ivf
retval=$?
if [ $retval -ne 0 ]; then
echo "Error running aomenc pass 2 of 2" >&2
curl -s -L "$base_url"/edit_status/"$job_id"/error || true
echo "" >&2
return 2
fi
# This probably needs to be improved as well, so that it scales
# and sets the framerate automatically. This will likely never
# Actually get used though, so it's fine.
if [[ doVMAF -eq true ]]; then
ffmpeg -nostats -hide_banner -loglevel warning \
-r 24 -i "$file".out.ivf -r 24 "$file" -filter_complex \
"[0:v][1:v]libvmaf=log_fmt=json:log_path=$file.vmaf.json" -f null - >/dev/null
retval=$?
if [ $retval -ne 0 ]; then
echo "Error running VMAF scan" >&2
curl -s -L "$base_url"/edit_status/"$job_id"/error || true
echo "" >&2
return 3
fi
cat "$file".vmaf.json
fi
set -e
rm -f \
"$file" \
"$file".fpf \
"$file".vmaf.json
return 0
}