· 2 years ago · Jun 19, 2023, 08:40 PM
1#!/bin/sh
2
3src=$1
4dst=${1%.*}.mp4
5bak=${1%.*}.orig.${1##*.}
6
7sqldb=convert.db
8
9sqlinit() {
10 [ -f "$1" ] || sqlite3 "$1" 'CREATE TABLE encodings(path TEXT PRIMARY KEY NOT NULL, orig TEXT, backup TEXT, origsize INT, newsize INT)'
11}
12
13restore() {
14 rm -f "$dst"
15 mv "$bak" "$src"
16}
17
18sqlinit "$sqldb"
19
20[ -f "$src" ] || exec echo "fail to open $dst"
21[ -f "$bak" ] && exec echo "backup $bak already exists"
22
23exist=$(sqlite3 "$sqldb" "SELECT count(*) FROM encodings WHERE path = '$dst' OR orig = '$src'")
24
25[ "$exist" -gt 0 ] && exec echo "$dst already converted"
26
27mv "$src" "$bak"
28
29echo "Converting \"$dst\""
30#if /usr/local/bin/ffmpeg -v 16 -y -vaapi_device /dev/dri/renderD128 -i "$bak" -vf format=nv12,hwupload -c:v h264_vaapi -c:a libfdk_aac -vbr 4 "$dst" && [ -s "$dst" ]; then
31#if ffmpeg -v 16 -y -vaapi_device /dev/dri/renderD128 -i "$bak" -vf format=nv12,hwupload -c:v h264_vaapi -c:a copy -qp 24 "$dst" && [ -s "$dst" ]; then
32if ffmpeg -v 16 -y -i "$bak" -crf 22 -preset slow -c:a copy "$dst" && [ -s "$dst" ]; then
33 origsize=$(stat "$bak" -c %s)
34 newsize=$(stat "$dst" -c %s)
35 save=$((newsize * 100 / origsize))
36
37 echo "$((origsize >> 20)) => $((newsize >> 20)) MB, $save %"
38
39 if [ $save -le 90 ]; then
40 sqlite3 "$sqldb" "INSERT INTO encodings VALUES('$dst', '$src', '$bak', $origsize, $newsize)"
41 else
42 echo 'restoring old file'
43 sqlite3 "$sqldb" "INSERT INTO encodings VALUES('$src', NULL, NULL, NULL, NULL)"
44 restore
45 fi
46else
47 echo 'error, restoring'
48 restore
49fi
50