diff --git a/README.md b/README.md index cbf0542..a6b3354 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,48 @@ # dwm-anime-wallpaper -wallpaper animation using bmp file and feh app +wallpaper animation using bmp file and feh app + +## MP4 to BMP + +take an mp4 video file (pay attention to the length of the video) and use ffmpeg to generate the bmp files. It is possible to manage the quality and number of frames generated. + +### Manual convert + +```bash +File=[absolute path of mp4 file] +BaseFile=$(echo ${File} | sed 's/\.mp4//g') +mkdir ${HOME}/$(xdg-user-dir PICTURES)/dwm-anime-wallpaper/${BaseFile} +ffmpeg -i ${File} -pix_fmt bgr8 ${BaseFile}/${BaseFile}_%04d.bmp +``` + +### Tools + +In the repository you will find a script which does essentially the same thing as the manual chapter work + +* mp4tobmp.sh + +![mp4tobmp.sh](mp4tobmp.png "mp4tobmp.sh") + +## Launch + +Main process + +```bash +./dwm-anime-wallpaper.sh +``` + +Test with arg (to preview a specific foleder) + +```bash +./dwm-anime-wallpaper.sh [DIR] +``` + +## Preview + + +![dwm-anime-wallpaper.sh](dwm-anime-wallpaper.png "dwm-anime-wallpaper.sh") + + + + + diff --git a/dwm-anime-wallpaper.gif b/dwm-anime-wallpaper.gif new file mode 100644 index 0000000..aee58a4 Binary files /dev/null and b/dwm-anime-wallpaper.gif differ diff --git a/dwm-anime-wallpaper.sh b/dwm-anime-wallpaper.sh new file mode 100755 index 0000000..24f2947 --- /dev/null +++ b/dwm-anime-wallpaper.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +SwitchTime=60 +DirAnime=$(xdg-user-dir PICTURES)/dwm-anime-wallpaper/ + +while true + do + + [[ ! -z ${1} ]] && RDir=$(ls -1 ${DirAnime}| grep ${1}) || RDir=$(ls -1 ${DirAnime} | sort -R | head -n1) + Adate=$(date +%s) + for Img in $(find "${DirAnime}"/"${RDir}"/ -name *.bmp | sort -n) + do + feh --bg-scale "${Img}" + sleep 0.01 + Pdate=$(date +%s) + [[ ${SwitchTime} -lt $((Pdate-Adate)) ]] && break + done + done + + diff --git a/mp4tobmp.png b/mp4tobmp.png new file mode 100644 index 0000000..e868795 Binary files /dev/null and b/mp4tobmp.png differ diff --git a/mp4tobmp.sh b/mp4tobmp.sh new file mode 100755 index 0000000..3684cac --- /dev/null +++ b/mp4tobmp.sh @@ -0,0 +1,83 @@ +#!/bin/bash + +## Set color +Red="\e[31m" +Green="\e[32m" +Yellow="\e[33m" +NoColor="\e[0m" + + +## help +Usage(){ + + echo "$(basename "${0}") [mp4 file path]" + exit +} + +Action () { + + echo -ne "$1 : " + shift + ResStdout=$("${@}" 2> /dev/null) + Res=$? + if [[ ${Res} -eq 0 ]] + then + echo -e "[${Green}OK${NoColor}] ${ResStdout}" + else + if [[ ${Res} -eq 255 ]] + then + echo -e "[${Yellow}N/A${NoColor}] ${ResStdout}" + else + echo -e "[${Red}Failed${NoColor}] ${ResStdout}" + exit + fi + fi +} + +CheckFile() { + Return=0 + [[ ! -e ${File} ]] && ((Return++)) + file "${File}"| grep -q "ISO Media, MP4 v2" + Res=${?} + [[ ${Res} -ne 0 ]] && ((Return++)) + return "${Return}" +} + +CreateEnv() { + if [[ ! -d "${BaseDir}" ]] + then + mkdir -p "${BaseDir}" + Return=$? + else + Return=1 + echo " - Directory \"${BaseDir}\" exist" + fi + return "${Return}" +} + +Generate() { + ffmpeg -i "${File}" -pix_fmt bgr8 "${BaseDir}"/"${BaseName}"_%04d.bmp &> /dev/null + Res=${?} + if [[ "${Res}" -eq 0 ]] + then + Return=0 + echo "- $(find "${BaseDir}" -name "*.bmp" | wc -l) Files generated" + else + Return=1 + rm -Rf "${BaseDir}" + echo " - FFmpeg FAILED - ${BaseDir} deleted" + fi + return ${Return} +} + +[[ -z $1 ]] && Usage + +# Env +File=$(realpath "${1}") +BaseName=$(basename "${1}" | sed 's/\.mp4$//g') +BaseDir="$(xdg-user-dir PICTURES)/dwm-anime-wallpaper/${BaseName}" + +# Main +Action "Check File" CheckFile +Action "Create Env" CreateEnv +Action "Generate bmp files" Generate