xxwhirlpool
·
2026-06-06
1#!/usr/bin/env bash
2
3avi2mkv() {
4 for f in *.avi; do ffmpeg -fflags +genpts -i "$f" -c:v copy -c:a copy -c:s copy "${f%.*} AVI2MKV.mkv" || break; done
5}
6
7any2hevc() {
8 shopt -s nullglob
9 for f in *.{mkv,mp4,ts}; do ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i "$f" -c:v hevc_nvenc -qmin 24 -qmax 24 -vtag hvc1 -profile main -preset slow -rc vbr_hq -c:a copy -c:s copy -map 0 "${f%.*} HEVC.mkv" || break; done
10}
11
12vid2frames() {
13 shopt -s nullglob
14 for f in *.{mkv,mp4,webm}; do ffmpeg -i "$f" -vf mpdecimate,setpts=N/FRAME_RATE/TB "%04d.png" || break; done
15}
16
17vidsubs() {
18 shopt -s nullglob
19 for f in *.{mkv,mp4}; do mkvmerge -o "${f%.*} SUB.mkv" "$f" --language 0:eng "${f%.*}.srt" || break; done
20}
21
22vidhash() {
23 # borrowed from my buddy neckspike:
24 # https://pastebin.com/mg3CVDiU
25 for f in *.mkv; do
26 hash=$(crc32 "$f" | tr '[:lower:]' '[:upper:]')
27 ext="${f##*.}"
28 newname="${f%.*} [$hash]".$ext
29
30 gum confirm "are you sure you want to rename?" --default=yes --timeout=2s && mv "$f" "$newname" && echo -e "new name: $newname" || echo -e "no files renamed: $newname"
31 done
32}
33
34choice() {
35 choose=$(gum choose "avi2mkv" "any2hevc" "vid2frames" "vidsubs" "vidhash")
36 case "$choose" in
37 *avi2mkv) avi2mkv ;;
38 *any2hevc) any2hevc ;;
39 *vid2frames) vid2frames ;;
40 *vidsubs) vidsubs ;;
41 *vidhash) vidhash ;;
42 *) exit;;
43 esac
44}
45
46choice