Skip to content

Add Richly-Typed loadscript VapourSynth Script to Source Control #2158

Add Richly-Typed loadscript VapourSynth Script to Source Control

Add Richly-Typed loadscript VapourSynth Script to Source Control #2158

Workflow file for this run

name: tests
on:
- push
- pull_request
env:
DEBIAN_FRONTEND: noninteractive
jobs:
all-tests:
runs-on: ubuntu-latest
container: shssoichiro/av1an-ci:latest
steps:
- uses: actions/checkout@v3
- uses: Swatinem/rust-cache@v2
- name: Validate encoders
run: |
which aomenc
which SvtAv1EncApp
which rav1e
which vpxenc
which x265
which x264
- name: Validate formatting
run: |
cargo fmt --all -- --check
- name: Build Av1an
run: |
cargo clippy --profile ci -- -D warnings
cargo build --profile ci
# 352x240 112 frames test video
- name: Download test video
run: |
curl -LO https://media.xiph.org/video/derf/y4m/tt_sif.y4m
- name: Testing unit tests
working-directory: ./av1an-core
run: |
cargo test --profile ci
# The baseline tests should not include the faster default params, because we want to also test that
# it works without params passed
- name: Testing baseline aom
run: |
target/ci/av1an -i tt_sif.y4m -e aom --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv"
du -h tt_sif.mkv
- name: Testing baseline rav1e
run: |
target/ci/av1an -i tt_sif.y4m -e rav1e --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv"
du -h tt_sif.mkv
- name: Testing baseline svt-av1
run: |
target/ci/av1an -i tt_sif.y4m -e svt-av1 --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv"
du -h tt_sif.mkv
- name: Testing baseline vpx
run: |
target/ci/av1an -i tt_sif.y4m -e vpx --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv"
du -h tt_sif.mkv
- name: Testing baseline x265
run: |
target/ci/av1an -i tt_sif.y4m -e x265 --pix-format yuv420p -c mkvmerge --sc-method fast -y -o "tt_sif.mkv"
du -h tt_sif.mkv
- name: Testing baseline x264
run: |
target/ci/av1an -i tt_sif.y4m -e x264 --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv"
du -h tt_sif.mkv
- name: Testing baseline-select aom
run: |
target/ci/av1an -i tt_sif.y4m -e aom --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --cpu-used=10 --rt --threads=4" --chunk-method select
du -h tt_sif.mkv
- name: Testing baseline-select rav1e
run: |
target/ci/av1an -i tt_sif.y4m -e rav1e --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --speed 10 --low-latency" --chunk-method select
du -h tt_sif.mkv
- name: Testing baseline-select svt-av1
run: |
target/ci/av1an -i tt_sif.y4m -e svt-av1 --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --preset 8" --chunk-method select
du -h tt_sif.mkv
- name: Testing baseline-select vpx
run: |
target/ci/av1an -i tt_sif.y4m -e vpx --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --cpu-used=9 --rt --threads=4" --chunk-method select
du -h tt_sif.mkv
- name: Testing baseline-select x265
run: |
target/ci/av1an -i tt_sif.y4m -e x265 --pix-format yuv420p -c mkvmerge --sc-method fast -y -o "tt_sif.mkv" -v " --preset ultrafast" --chunk-method select
du -h tt_sif.mkv
- name: Testing baseline-select x264
run: |
target/ci/av1an -i tt_sif.y4m -e x264 --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --preset ultrafast" --chunk-method select
du -h tt_sif.mkv
- name: Testing target-quality
run: |
target/ci/av1an -i tt_sif.y4m -e x265 --pix-format yuv420p -c mkvmerge --sc-method fast -y -v " --preset ultrafast" --target-quality 95 -o "95.mkv" --log-file 95
target/ci/av1an -i tt_sif.y4m -e x265 --pix-format yuv420p -c mkvmerge --sc-method fast -y -v " --preset ultrafast" --target-quality 80 -o "80.mkv" --log-file 80
du -h 95.mkv 80.mkv
# compare the size of the two files to make sure 95.mkv is larger than 80.mkv
if [ $(stat -c%s "95.mkv") -gt $(stat -c%s "80.mkv") ]; then echo "Target quality is working correctly"; else echo "95.mkv is smaller than 80.mkv"; cat 95.log 80.log; exit 1; fi
- name: Testing target-quality aom
run: |
target/ci/av1an -i tt_sif.y4m -e aom --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --cpu-used=10 --rt --threads=4" --target-quality 95
du -h tt_sif.mkv
- name: Testing target-quality rav1e
run: |
target/ci/av1an -i tt_sif.y4m -e rav1e --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --speed 10 --low-latency" --target-quality 95
du -h tt_sif.mkv
- name: Testing target-quality svt-av1
run: |
target/ci/av1an -i tt_sif.y4m -e svt-av1 --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --preset 8" --target-quality 95
du -h tt_sif.mkv
- name: Testing target-quality vpx
run: |
target/ci/av1an -i tt_sif.y4m -e vpx --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --cpu-used=9 --rt --threads=4" --target-quality 95
du -h tt_sif.mkv
- name: Testing target-quality x265
run: |
target/ci/av1an -i tt_sif.y4m -e x265 --pix-format yuv420p -c mkvmerge --sc-method fast -y -o "tt_sif.mkv" -v " --preset ultrafast" --target-quality 95
du -h tt_sif.mkv
- name: Testing target-quality x264
run: |
target/ci/av1an -i tt_sif.y4m -e x264 --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --preset ultrafast" --target-quality 95
du -h tt_sif.mkv
- name: Testing target-quality replace crf
run: |
target/ci/av1an -i tt_sif.y4m -e x264 --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --preset ultrafast --crf 0" --target-quality 95
du -h tt_sif.mkv
- name: Testing probe-slow aom
run: |
target/ci/av1an -i tt_sif.y4m -e aom --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --cpu-used=10 --rt --threads=4" --target-quality 95 --probe-slow
du -h tt_sif.mkv
- name: Testing probe-slow rav1e
run: |
target/ci/av1an -i tt_sif.y4m -e rav1e --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --speed 10 --low-latency" --target-quality 95 --probe-slow
du -h tt_sif.mkv
- name: Testing probe-slow svt-av1
run: |
target/ci/av1an -i tt_sif.y4m -e svt-av1 --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --preset 8" --target-quality 95 --probe-slow
du -h tt_sif.mkv
- name: Testing probe-slow vpx
run: |
target/ci/av1an -i tt_sif.y4m -e vpx --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --cpu-used=9 --rt --threads=4" --target-quality 95 --probe-slow
du -h tt_sif.mkv
- name: Testing probe-slow x265
run: |
target/ci/av1an -i tt_sif.y4m -e x265 --pix-format yuv420p -c mkvmerge --sc-method fast -y -o "tt_sif.mkv" -v " --preset ultrafast" --target-quality 95 --probe-slow
du -h tt_sif.mkv
- name: Testing probe-slow x264
run: |
target/ci/av1an -i tt_sif.y4m -e x264 --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --preset ultrafast" --target-quality 95 --probe-slow
du -h tt_sif.mkv
- name: Testing chunk_hybrid aom
run: |
target/ci/av1an -i tt_sif.y4m -e aom --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --cpu-used=10 --rt --threads=4" --chunk-method hybrid
du -h tt_sif.mkv
- name: Testing chunk_select aom
run: |
target/ci/av1an -i tt_sif.y4m -e aom --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --cpu-used=10 --rt --threads=4" --chunk-method select
du -h tt_sif.mkv
- name: Testing chunk_ffms2 aom
run: |
target/ci/av1an -i tt_sif.y4m -e aom --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --cpu-used=10 --rt --threads=4" --chunk-method ffms2
du -h tt_sif.mkv
- name: Testing chunk_lsmash aom
run: |
target/ci/av1an -i tt_sif.y4m -e aom --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --cpu-used=10 --rt --threads=4" --chunk-method lsmash
du -h tt_sif.mkv
- name: Testing scenes aom
run: |
target/ci/av1an -i tt_sif.y4m -e aom --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --cpu-used=10 --rt --threads=4" -s scenes.json
du -h tt_sif.mkv
- name: Testing workers aom
run: |
target/ci/av1an -i tt_sif.y4m -e aom --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --cpu-used=10 --rt --threads=4" -w 2
du -h tt_sif.mkv
- name: Testing vmaf aom
run: |
target/ci/av1an -i tt_sif.y4m -e aom --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --cpu-used=10 --rt --threads=4" --vmaf
du -h tt_sif.mkv
- name: Testing extra_splits aom
run: |
target/ci/av1an -i tt_sif.y4m -e aom --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --cpu-used=10 --rt --threads=4" -x 10
du -h tt_sif.mkv
- name: Testing temp aom
run: |
target/ci/av1an -i tt_sif.y4m -e aom --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --cpu-used=10 --rt --threads=4" --temp temporary
du -h tt_sif.mkv
- name: Testing concat mkvmerge aom
run: |
target/ci/av1an -i tt_sif.y4m -e aom --pix-format yuv420p --sc-method fast -y -o "tt_sif.mkv" -v " --cpu-used=10 --rt --threads=4" -c mkvmerge
du -h tt_sif.mkv
- name: Testing slow scenechange aom
run: |
target/ci/av1an -i tt_sif.y4m -e aom --pix-format yuv420p -y -o "tt_sif.mkv" -v " --cpu-used=10 --rt --threads=4" -c mkvmerge
du -h tt_sif.mkv
- name: Testing sc-only
run: |
target/ci/av1an -i tt_sif.y4m --sc-only --sc-method fast -s "tt_sif_scenes.json"
du -h tt_sif_scenes.json
continue-on-error: true
docker:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Cache Docker layers
uses: actions/cache@v3
with:
path: /tmp/.buildx-cache
key: ${{ runner.os }}-buildx-${{ github.sha }}
restore-keys: |
${{ runner.os }}-buildx-
- name: Build
id: docker_build
uses: docker/build-push-action@v4
with:
context: .
file: ./Dockerfile
push: false
tags: av1an:action
cache-from: type=local,src=/tmp/.buildx-cache
cache-to: type=local,dest=/tmp/.buildx-cache-new,mode=max
- name: Move cache
# Temp fix
# https://github.com/docker/build-push-action/issues/252
# https://github.com/moby/buildkit/issues/1896
run: |
rm -rf /tmp/.buildx-cache
mv /tmp/.buildx-cache-new /tmp/.buildx-cache
# Job to output if docker-publish should run or not based on if DOCKERHUB_USERNAME and DOCKERHUB_TOKEN are set
publish-check:
runs-on: ubuntu-latest
outputs:
should_publish: ${{ steps.publish_check.outputs.should_publish }}
steps:
- name: Check for DOCKERHUB_USERNAME and DOCKERHUB_TOKEN
id: publish_check
run: |
if [ -z ${{ secrets.DOCKERHUB_USERNAME }} ] || [ -z ${{ secrets.DOCKERHUB_TOKEN }} ]; then
echo "should_publish=false" >> $GITHUB_OUTPUT
else
echo "should_publish=true" >> $GITHUB_OUTPUT
fi
docker-publish:
needs: [all-tests, docker, publish-check]
runs-on: ubuntu-latest
if: needs.publish-check.outputs.should_publish == 'true'
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Docker meta
id: docker_meta
uses: docker/metadata-action@v4
with:
images: ${{ secrets.DOCKERHUB_USERNAME }}/av1an
tags: |
type=raw,value=latest,enable=${{ startsWith(github.ref, 'refs/tags/') }}
type=ref,event=branch
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
type=sha
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to DockerHub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Cache Docker layers
uses: actions/cache@v3
with:
path: /tmp/.buildx-cache
key: ${{ runner.os }}-buildx-${{ github.sha }}
restore-keys: |
${{ runner.os }}-buildx-
- name: Build and push
id: docker_build
uses: docker/build-push-action@v4
with:
context: .
file: ./Dockerfile
push: true
tags: ${{ steps.docker_meta.outputs.tags }}
labels: ${{ steps.docker_meta.outputs.labels }}
cache-from: type=local,src=/tmp/.buildx-cache
- name: Image digest
run: echo ${{ steps.docker_build.outputs.digest }}