nix

configuration files that power my machines
Log | Files | Refs | README | LICENSE

commit 132f5cb081d63146bf0710de850e34167629a220
parent 44946f61477d1eeb405159ff1c37229e4c00c023
Author: mtmn <miro@haravara.org>
Date:   Fri,  8 May 2026 16:03:35 +0200

bin: add `givecover` ffmpeg wrapper

Diffstat:
Amodules/mixins/dotfiles/bin/givecover | 41+++++++++++++++++++++++++++++++++++++++++
Mmodules/mixins/dotfiles/bin/gotcover | 16++++++++--------
2 files changed, 49 insertions(+), 8 deletions(-)

diff --git a/modules/mixins/dotfiles/bin/givecover b/modules/mixins/dotfiles/bin/givecover @@ -0,0 +1,41 @@ +#!/bin/bash +# Attach cover art to audio files using ffmpeg + +SEARCH_DIR="${1:-.}" +COVER_NAMES=("cover.jpg" "Cover.jpg" "cover.png" "Cover.png") + +cover="" +for name in "${COVER_NAMES[@]}"; do + if [ -f "$SEARCH_DIR/$name" ]; then + cover="$SEARCH_DIR/$name" + break + fi +done + +if [ -z "$cover" ]; then + echo "No cover image found in $SEARCH_DIR" + exit 1 +fi + +echo "Using cover: $cover" + +EXTENSIONS=("flac" "mp3" "m4a" "ogg" "wav" "aif" "aiff") + +find_args=() +for i in "${!EXTENSIONS[@]}"; do + if [ "$i" -gt 0 ]; then + find_args+=(-o) + fi + find_args+=(-iname "*.${EXTENSIONS[$i]}") +done + +while IFS= read -r -d '' file; do + tmpfile="${file}.givecover.tmp.${file##*.}" + if ffmpeg -nostdin -y -i "$file" -i "$cover" -map 0:a -map 1:0 -c copy -disposition:v:0 attached_pic "$tmpfile" 2>/dev/null; then + mv "$tmpfile" "$file" + echo "[✓] $file" + else + rm -f "$tmpfile" + echo "[✗] $file" + fi +done < <(find "$SEARCH_DIR" -type f \( "${find_args[@]}" \) -print0 | sort -z) diff --git a/modules/mixins/dotfiles/bin/gotcover b/modules/mixins/dotfiles/bin/gotcover @@ -6,16 +6,16 @@ EXTENSIONS=("flac" "mp3" "aiff" "aif" "m4a" "ogg" "wav") find_args=() for i in "${!EXTENSIONS[@]}"; do - if [ "$i" -gt 0 ]; then - find_args+=(-o) - fi - find_args+=(-iname "*.${EXTENSIONS[$i]}") + if [ "$i" -gt 0 ]; then + find_args+=(-o) + fi + find_args+=(-iname "*.${EXTENSIONS[$i]}") done while IFS= read -r -d '' file; do - has_cover=$(ffprobe -v error -select_streams v -show_entries stream=codec_type -of csv=p=0 "$file" 2>/dev/null | grep -c "video") + has_cover=$(ffprobe -v error -select_streams v -show_entries stream=codec_type -of csv=p=0 "$file" 2>/dev/null | grep -c "video") - if [ "$has_cover" -eq 0 ]; then - echo "[✗] $file" - fi + if [ "$has_cover" -eq 0 ]; then + echo "[✗] $file" + fi done < <(find "$SEARCH_DIR" -type f \( "${find_args[@]}" \) -print0 | sort -z)