dots


dots / config / .local / bin
xxwhirlpool  ·  2026-03-23

vidtools

 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	for f in *.mp4; do ffmpeg -i "$f" '%04d.png' || break; done
14}
15
16vidsubs() {
17	shopt -s nullglob
18	for f in *.{mkv,mp4}; do mkvmerge -o "${f%.*} SUB.mkv" "$f" --language 0:eng "${f%.*}.srt" || break; done
19}
20
21vidhash() {
22	# borrowed from my buddy neckspike:
23	# https://pastebin.com/mg3CVDiU
24	for f in *.mkv; do
25		hash=$(crc32 "$f" | tr '[:lower:]' '[:upper:]')
26		ext="${f##*.}"
27		newname="${f%.*} [$hash]".$ext
28
29		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"
30	done
31}
32
33choice() {
34	choose=$(gum choose "avi2mkv" "any2hevc" "vid2frames" "vidsubs" "vidhash")
35	case "$choose" in
36		*avi2mkv) avi2mkv ;;
37		*any2hevc) any2hevc ;;
38		*vid2frames) vid2frames ;;
39		*vidsubs) vidsubs ;;
40		*vidhash) vidhash ;;
41		*) exit;;
42	esac
43}
44
45choice