memo: add VVenC

This commit is contained in:
2026-01-21 03:38:18 +01:00
parent 274710ae56
commit 87415d387d
4 changed files with 235 additions and 22 deletions
+16 -17
View File
@@ -1,26 +1,25 @@
[Settings]
gtk-theme-name=catppuccin-mocha-blue-standard+default
gtk-icon-theme-name=Papirus
gtk-font-name=Noto Sans 10
gtk-application-prefer-dark-theme=true
gtk-button-images=true
gtk-cursor-blink=true
gtk-cursor-blink-time=1000
gtk-cursor-theme-name=Bibata-Modern-Ice
gtk-cursor-theme-size=24
gtk-toolbar-style=3
gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR
gtk-button-images=0
gtk-menu-images=0
gtk-decoration-layout=icon:minimize,maximize,close
gtk-enable-animations=true
gtk-enable-event-sounds=1
gtk-enable-input-feedback-sounds=0
gtk-font-name=Noto Sans, 10
gtk-icon-theme-name=Papirus
gtk-menu-images=true
gtk-modules=colorreload-gtk-module
gtk-primary-button-warps-slider=true
gtk-sound-theme-name=ocean
gtk-theme-name=catppuccin-mocha-blue-standard+default
gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR
gtk-toolbar-style=3
gtk-xft-antialias=1
gtk-xft-dpi=122880
gtk-xft-hinting=1
gtk-xft-hintstyle=hintslight
gtk-xft-rgba=rgb
gtk-application-prefer-dark-theme=1
gtk-cursor-blink=true
gtk-cursor-blink-time=1000
gtk-decoration-layout=icon:minimize,maximize,close
gtk-enable-animations=true
gtk-modules=colorreload-gtk-module:appmenu-gtk-module
gtk-primary-button-warps-slider=true
gtk-shell-shows-menubar=1
gtk-sound-theme-name=ocean
gtk-xft-dpi=122880
+11 -4
View File
@@ -1,7 +1,14 @@
[Settings]
gtk-theme-name=catppuccin-mocha-blue-standard+default
gtk-icon-theme-name=Papirus
gtk-font-name=Noto Sans 10
gtk-application-prefer-dark-theme=true
gtk-cursor-blink=true
gtk-cursor-blink-time=1000
gtk-cursor-theme-name=Bibata-Modern-Ice
gtk-cursor-theme-size=24
gtk-application-prefer-dark-theme=1
gtk-decoration-layout=icon:minimize,maximize,close
gtk-enable-animations=true
gtk-font-name=Noto Sans, 10
gtk-icon-theme-name=Papirus
gtk-primary-button-warps-slider=true
gtk-sound-theme-name=ocean
gtk-theme-name=catppuccin-mocha-blue-standard+default
gtk-xft-dpi=122880
+1 -1
View File
@@ -324,7 +324,7 @@ DKIM (DomainKeys Identified Mail) 用于验证邮件的完整性和真实性.
- 值: 上一步获取的公钥内容. 大概是这样的:
```plain
v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQ...
v=DKIM1; k=rsa; p=MIISncASjsASK...
```
解释:
+207
View File
@@ -0,0 +1,207 @@
> some sample scripts and personal notes regarding VVenC usage.
## VBR with 2 passes
```bash
#!/bin/bash
set -euo pipefail
# path = directory of this script
path="$(dirname "$0")"
# name = identifier of the script and its outputs
name="$(basename "$0" .sh)"
# io paths
input="$1"
output="${path}/${name}.266"
# slice options
slice_start=510
slice_duration=30
slice_arg=()
#slice_arg=(-ss "$slice_start" -t "$slice_duration")
# video properties
size=1920x1080
frame_rate="24000/1001" # 23.976
pix_fmt="yuv420p"
# VMAF threads (should leave some for 266 decoding)
vmaf_threads=$(($(nproc) / 2))
# mailto address, leave empty to use desktop notifications instead.
mailto=""
# encoder params
params=(
--y4m 1
--preset fast -b 3000k --passes 2 --rcstatsfile stats.json -rs 4
--profile main_10 --tier high --threads 2 --qpa 0
)
mail_error() {
local subject="$name: Error occurred"
local body="An error occurred on line $1 while executing the script $0."
if [ -n "$mailto" ]; then
echo "$body" | mail -s "$subject" "$mailto"
else
notify-send "$subject" "$body"
fi
}
mail_success() {
local subject="$name: Completed successfully"
local body
body=$(printf "VMAF: %s\nSize in bytes: %s\n" \
"$(jq '.pooled_metrics.vmaf' "${path}/${name}.vmaf.json")" \
"$(stat -c%s "$output")")
if [ -n "$mailto" ]; then
echo "$body" | mail -s "$subject" "$mailto"
else
notify-send "$subject" "$body"
fi
}
trap 'mail_error $LINENO' ERR
decode() {
ffmpeg -hide_banner -nostdin \
-hwaccel auto -r "$frame_rate" "${slice_arg[@]}" -i "$1" \
-pix_fmt "$pix_fmt" -f yuv4mpegpipe - 2>/dev/null
}
pass1() {
vvencapp -i "$1" "${params[@]}" --pass 1 -o /dev/null
}
pass2() {
vvencapp -i "$1" "${params[@]}" --pass 2 -o "$2"
}
calc_vmaf() {
ffmpeg -hide_banner -nostdin \
-hwaccel auto -r "$frame_rate" "${slice_arg[@]}" -i "$1" \
-r "$frame_rate" -i "$2" \
-filter_complex "[0:v][1:v]libvmaf=log_fmt=json:log_path=${path}/${name}.vmaf.json:n_threads=$vmaf_threads" \
-f null -
}
decode "$input" | pass1 "-"
decode "$input" | pass2 "-" "$output"
calc_vmaf "$input" "$output"
mail_success
```
- script explained:
- `input="$1"`: The source video file is passed as the first argument to the script.
- Use `vvencapp` or `vvencFFapp` for better control over encoding parameters instead of `ffmpeg -c:v libvvenc`.
- `slice_start` and `slice_duration`: Define the start time and duration of the video slice to be processed. Uncomment the `slice_arg` line to enable slicing.
- `mailto=""`: Requires capability to send emails from command line. That is to say, a MTA (Mail Transfer Agent) must be installed and configured in the system. Leave empty to use notify-send instead.
- encoder parameters explained:
- `-b 3000k`: Target bitrate. The output bitrate could be significantly different, better test before use.
- `-rs 4`: Intra period/refresh in seconds. Higher for better compression, lower for better seeking.
- `--profile main_10`: 10-bit Main profile. Change to `main` for 8-bit encoding.
- `--tier high`: High tier for better quality at higher bitrates.
- `--threads 2`: Generally fewer threads yield better encoding quality yet slower speed. The maximum number of parallel frames is determined automatically according to frame size, and might be lower than the thread count specified here.
- `--qpa 0`: Disable "perceptually motivated QP adaptation", do so if you care about quality metrics or with archival purposes.
- `-q` or `--qp` will be ignored in VBR mode even if specified.
## Ccrashes in
```bash
#!/bin/bash
set -euo pipefail
# path = directory of this script
path="$(dirname "$0")"
# name = identifier of the script and its outputs
name="$(basename "$0" .sh)"
# io paths
input="$1"
output="${path}/${name}.266"
# slice options
slice_start=510
#slice_arg=(-ss "$slice_start" -t "$slice_duration")
slice_duration=30
slice_arg=()
# video properties
size=1920x1080
frame_rate="24000/1001" # 23.976
pix_fmt="yuv420p"
# VMAF threads (should leave some for 266 decoding)
vmaf_threads=$(($(nproc) / 2))
# mailto address
mailto=""
# encoder params
params=(
--y4m 1
--preset fast -q 16 -rs 4
--profile main_10 --tier high --qpa 0
)
mail_error() {
local subject="$name: Error occurred"
local body="An error occurred on line $1 while executing the script $0."
if [ -n "$mailto" ]; then
echo "$body" | mail -s "$subject" "$mailto"
else
notify-send "$subject" "$body"
fi
}
mail_success() {
local subject="$name: Completed successfully"
local body
body=$(printf "VMAF: %s\nSize in bytes: %s\n" \
"$(jq '.pooled_metrics.vmaf' "${path}/${name}.vmaf.json")" \
"$(stat -c%s "$output")")
if [ -n "$mailto" ]; then
echo "$body" | mail -s "$subject" "$mailto"
else
notify-send "$subject" "$body"
fi
}
trap 'mail_error $LINENO' ERR
decode() {
ffmpeg -hide_banner -nostdin \
-hwaccel auto -r "$frame_rate" "${slice_arg[@]}" -i "$1" \
-pix_fmt "$pix_fmt" -f yuv4mpegpipe - 2>/dev/null
}
encode() {
vvencapp -i "$1" "${params[@]}" -o "$2"
}
calc_vmaf() {
ffmpeg -hide_banner -nostdin \
-hwaccel auto -r "$frame_rate" "${slice_arg[@]}" -i "$1" \
-r "$frame_rate" -i "$2" \
-filter_complex "[0:v][1:v]libvmaf=log_fmt=json:log_path=${path}/${name}.vmaf.json:n_threads=$vmaf_threads" \
-f null -
}
decode "$input" | encode "-" "$output"
calc_vmaf "$input" "$output"
mail_success
```
- script explained:
same as above.
- encoder parameters explained:
- `-q 16`: QP, lower is better quality.
- `-rs 4 --profile main_10 --tier high --qpa 0`: Same as above.
- `--fga 0`: Disable "film grain analysis" (default disabled). fga in current version of VVenC (1.13.1) is kinda buggy and may lead crashes in CQP mode. Enable with caution.