Allow images and videos in new deface filter. - annna - Annna the nice friendly… | |
git clone git://bitreich.org/annna/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws6… | |
Log | |
Files | |
Refs | |
Tags | |
README | |
--- | |
commit a7b6271d25d1e871de322f700ab5fc352b87b4ed | |
parent 8178121cf184328ccf2dbd37f7ff2b97d1cfd08c | |
Author: Annna Robert-Houdin <[email protected]> | |
Date: Sun, 7 Aug 2022 01:00:32 +0200 | |
Allow images and videos in new deface filter. | |
Diffstat: | |
M annna-message-common | 44 ++++++++++++++++++++++-------… | |
M ffmpeg-effect | 207 ++++++++++++++++++-----------… | |
2 files changed, 149 insertions(+), 102 deletions(-) | |
--- | |
diff --git a/annna-message-common b/annna-message-common | |
@@ -889,6 +889,28 @@ case "${text}" in | |
[ ! -f "${inpath}" ] && exit 0 | |
+ # outfile and outpath filtering for the cache. | |
+ case "${filter}" in | |
+ antidepressant) | |
+ outfile="${outfile%.*}.jpg" | |
+ outpath="${outpath%.*}.jpg" | |
+ ;; | |
+ putin) | |
+ outfile="${outfile%.*}.jpg" | |
+ outpath="${outpath%.*}.jpg" | |
+ ;; | |
+ wat|smith|zucc) | |
+ mimetype="$(file --mime-type "$inpath" | cut -d':' -f … | |
+ # Only allow images to be free. | |
+ case "$mimetype" in | |
+ image/*) | |
+ outfile="${outfile%.*}.${origext}" | |
+ outpath="${outpath%.*}.${origext}" | |
+ ;; | |
+ esac | |
+ esac | |
+ | |
+ # Cleanup if outpath file is empty. | |
[ -f "${outpath}" -a ! -s "${outpath}" ] && rm "${outpath}" | |
if [ -s "${outpath}" ]; | |
@@ -898,19 +920,15 @@ case "${text}" in | |
fi | |
case "${filter}" in | |
- antidepressant) | |
- outfile="${outfile%.*}.jpg" | |
- outpath="${outpath%.*}.jpg" | |
- antidepressant "${inpath}" "${outpath}" 2>&1 >… | |
- ;; | |
- putin) | |
- outfile="${outfile%.*}.jpg" | |
- outpath="${outpath%.*}.jpg" | |
- putin-os "${inpath}" "${outpath}" 2>&1 >/dev/n… | |
- ;; | |
- *) | |
- ffmpeg-effect "${filter}" "${inpath}" "${outpa… | |
- ;; | |
+ antidepressant) | |
+ antidepressant "${inpath}" "${outpath}" 2>&1 >/dev/null | |
+ ;; | |
+ putin) | |
+ putin-os "${inpath}" "${outpath}" 2>&1 >/dev/null | |
+ ;; | |
+ *) | |
+ ffmpeg-effect "${filter}" "${inpath}" "${outpath}" 2>&… | |
+ ;; | |
esac | |
if [ "${recipient}" != "${text}" ]; | |
diff --git a/ffmpeg-effect b/ffmpeg-effect | |
@@ -12,6 +12,17 @@ usage() { | |
exit 1 | |
} | |
+is_image() { | |
+ mimetype="$(file --mime-type "$1" | cut -d':' -f 2 | cut -c 2-)" | |
+ case "${mimetype}" in | |
+ image/*) | |
+ return 0 | |
+ ;; | |
+ esac | |
+ | |
+ return 1 | |
+} | |
+ | |
has_audio() { | |
ffprobe "$1" 2>&1 | grep -qE 'Stream .* Audio: ' | |
} | |
@@ -63,13 +74,19 @@ mix_audio_video() { | |
} | |
replace_face() { | |
+ set -x | |
+ | |
face_replacement="$1" | |
input="$2" | |
output="$3" | |
- #ext="$(printf '%s' "$input" | awk -F. '{print $NF}')" | |
- #tmp=/tmp/replace_face_$$.$ext | |
- tmp="/tmp/replace_face_$$.mkv" | |
+ if is_image $input; | |
+ then | |
+ ext="$(printf '%s' "$input" | awk -F. '{print $NF}')" | |
+ tmp=/tmp/replace_face_$$.$ext | |
+ else | |
+ tmp="/tmp/replace_face_$$.mkv" | |
+ fi | |
$HOME/.local/bin/deface "$input" --replacewith img \ | |
--replaceimg "$face_replacement" -o "$tmp" >/dev/null 2>&1 | |
@@ -80,9 +97,27 @@ replace_face() { | |
else | |
mv "$tmp" "$output" | |
fi | |
+ | |
+ set +x | |
} | |
process_filter() { | |
+ # Filters which do not require image2mkv. | |
+ case "$1" in | |
+ wat) | |
+ replace_face "${mediadir}/wat.png" "$2" "$3" | |
+ return 0 | |
+ ;; | |
+ smith) | |
+ replace_face "${mediadir}/smith.png" "$2" "$3" | |
+ return 0 | |
+ ;; | |
+ zucc) | |
+ replace_face "${mediadir}/zucc.png" "$2" "$3" | |
+ return 0 | |
+ ;; | |
+ esac | |
+ | |
# extend duration if less than a second or image | |
dur="$($ffprobe_common -show_entries format=duration "$2")" | |
if test "$dur" = "N/A" || test "${dur%.*}" -lt 1; then | |
@@ -93,92 +128,86 @@ process_filter() { | |
fi | |
case "$1" in | |
- amplify) | |
- $ffmpeg_common -i "$2" -filter:a "volume=10" "$3";; | |
- banjo) | |
- replace_audio "${mediadir}/banjo.mp3" "$2" "$3";; | |
- bounce) | |
- $ffmpeg_common -i "$2" \ | |
- -filter_complex "[0]reverse[r];[0][r]concat,lo… | |
- "$3" </dev/null;; | |
- celtify) | |
- mix_audio "${mediadir}/broceliande.ogg" "$2" "$3";; | |
- concatenate) | |
- mix_audio "${mediadir}/concatenate.mp3" "$2" "$3";; | |
- daybowbow) | |
- replace_audio "${mediadir}/day-bow-bow.ogg" "$2" "$3";; | |
- dontdoit) | |
- mix_audio "${mediadir}/dontdoit.mp3" "$2" "$3";; | |
- doomify) | |
- mix_audio "${mediadir}/doom.mp3" "$2" "$3";; | |
- dutchapprove) | |
- mix_audio_video "${mediadir}/krul.mkv" "$2" "$3" 524 4… | |
- imam) | |
- mix_audio "${mediadir}/imam.mp3" "$2" "$3";; | |
- loop) | |
- i=0 | |
- input="" | |
- while test $i -lt $repeats; do | |
- input="$input -i $2" | |
- i=$((i + 1)) | |
- done | |
- $ffmpeg_common $input \ | |
- -filter_complex "concat=n=${repeats}:v=1:a=1 [… | |
- "$3" </dev/null;; | |
- mow) | |
- mix_audio "${mediadir}/lawn-mower.mp3" "$2" "$3";; | |
- reverse) | |
- $ffmpeg_common -i "$2" \ | |
- -vf reverse -af areverse \ | |
- "$3" </dev/null;; | |
- science) | |
- replace_audio "${mediadir}/accelerating-science.mp3" "… | |
- scrollify) | |
- mix_audio "${mediadir}/elder_scrolls.mp3" "$2" "$3";; | |
- sendtohell|amsterdamify) | |
- mix_audio_video "${mediadir}/hell.mkv" "$2" "$3" 1920 … | |
- sexify) | |
- mix_audio "${mediadir}/careless_whisper.mp3" "$2" "$3"… | |
- slavify) | |
- replace_audio "${mediadir}/remove-kebab.opus" "$2" "$3… | |
- slowdown) | |
- $ffmpeg_common -i "$2" \ | |
- -filter_complex "[0:v]setpts=2.0*PTS[v];[0:a]a… | |
- "$3" </dev/null;; | |
- smith) | |
- replace_face "${mediadir}/smith.png" "$2" "$3";; | |
- speedup) | |
- $ffmpeg_common -i "$2" \ | |
- -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]a… | |
- "$3" </dev/null;; | |
- techno) | |
- replace_audio "${mediadir}/techno.mp3" "$2" "$3";; | |
- technodrugs) | |
- $ffmpeg_common -i "${mediadir}/techno.mp3" -i "$2" \ | |
- -filter:v "tmix=frames=9:weights='0.2 0.4 0.6 … | |
- -map 1:v:0 -map 0:a:0 -shortest \ | |
- "$3" </dev/null;; | |
- thin) | |
- $ffmpeg_common -i "$2" \ | |
- -vf "scale=iw/4:ih,setsar=1" \ | |
- "$3" </dev/null;; | |
- torture) | |
- side_by_side "${mediadir}/clockworkorange.mkv" "$2" "$… | |
- trumpapprove) | |
- mix_audio "${mediadir}/trump-approves.opus" "$2" "$3";; | |
- wat) | |
- replace_face "${mediadir}/wat.png" "$2" "$3";; | |
- wide|widen) | |
- $ffmpeg_common -i "$2" \ | |
- -vf "scale=iw*4:ih,crop=iw/4:ih:iw/4:ih,setsar… | |
- "$3" </dev/null;; | |
- ww1) | |
- mix_audio "${mediadir}/ww1.mp3" "$2" "$3";; | |
- yellow) | |
- mix_audio "${mediadir}/yellow.opus" "$2" "$3";; | |
- zucc) | |
- replace_face "${mediadir}/zucc.png" "$2" "$3";; | |
- *) usage;; | |
+ amplify) | |
+ $ffmpeg_common -i "$2" -filter:a "volume=10" "$3";; | |
+ banjo) | |
+ replace_audio "${mediadir}/banjo.mp3" "$2" "$3";; | |
+ bounce) | |
+ $ffmpeg_common -i "$2" \ | |
+ -filter_complex "[0]reverse[r];[0][r]concat,loop=${rep… | |
+ "$3" </dev/null;; | |
+ celtify) | |
+ mix_audio "${mediadir}/broceliande.ogg" "$2" "$3";; | |
+ concatenate) | |
+ mix_audio "${mediadir}/concatenate.mp3" "$2" "$3";; | |
+ daybowbow) | |
+ replace_audio "${mediadir}/day-bow-bow.ogg" "$2" "$3";; | |
+ dontdoit) | |
+ mix_audio "${mediadir}/dontdoit.mp3" "$2" "$3";; | |
+ doomify) | |
+ mix_audio "${mediadir}/doom.mp3" "$2" "$3";; | |
+ dutchapprove) | |
+ mix_audio_video "${mediadir}/krul.mkv" "$2" "$3" 524 480;; | |
+ imam) | |
+ mix_audio "${mediadir}/imam.mp3" "$2" "$3";; | |
+ loop) | |
+ i=0 | |
+ input="" | |
+ while test $i -lt $repeats; do | |
+ input="$input -i $2" | |
+ i=$((i + 1)) | |
+ done | |
+ $ffmpeg_common $input \ | |
+ -filter_complex "concat=n=${repeats}:v=1:a=1 [v] [a]" … | |
+ "$3" </dev/null;; | |
+ mow) | |
+ mix_audio "${mediadir}/lawn-mower.mp3" "$2" "$3";; | |
+ reverse) | |
+ $ffmpeg_common -i "$2" \ | |
+ -vf reverse -af areverse \ | |
+ "$3" </dev/null;; | |
+ science) | |
+ replace_audio "${mediadir}/accelerating-science.mp3" "$2" "$3"… | |
+ scrollify) | |
+ mix_audio "${mediadir}/elder_scrolls.mp3" "$2" "$3";; | |
+ sendtohell|amsterdamify) | |
+ mix_audio_video "${mediadir}/hell.mkv" "$2" "$3" 1920 1080;; | |
+ sexify) | |
+ mix_audio "${mediadir}/careless_whisper.mp3" "$2" "$3";; | |
+ slavify) | |
+ replace_audio "${mediadir}/remove-kebab.opus" "$2" "$3";; | |
+ slowdown) | |
+ $ffmpeg_common -i "$2" \ | |
+ -filter_complex "[0:v]setpts=2.0*PTS[v];[0:a]atempo=0.… | |
+ "$3" </dev/null;; | |
+ speedup) | |
+ $ffmpeg_common -i "$2" \ | |
+ -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.… | |
+ "$3" </dev/null;; | |
+ techno) | |
+ replace_audio "${mediadir}/techno.mp3" "$2" "$3";; | |
+ technodrugs) | |
+ $ffmpeg_common -i "${mediadir}/techno.mp3" -i "$2" \ | |
+ -filter:v "tmix=frames=9:weights='0.2 0.4 0.6 0.8 1 0.… | |
+ -map 1:v:0 -map 0:a:0 -shortest \ | |
+ "$3" </dev/null;; | |
+ thin) | |
+ $ffmpeg_common -i "$2" \ | |
+ -vf "scale=iw/4:ih,setsar=1" \ | |
+ "$3" </dev/null;; | |
+ torture) | |
+ side_by_side "${mediadir}/clockworkorange.mkv" "$2" "$3";; | |
+ trumpapprove) | |
+ mix_audio "${mediadir}/trump-approves.opus" "$2" "$3";; | |
+ wide|widen) | |
+ $ffmpeg_common -i "$2" \ | |
+ -vf "scale=iw*4:ih,crop=iw/4:ih:iw/4:ih,setsar=1" \ | |
+ "$3" </dev/null;; | |
+ ww1) | |
+ mix_audio "${mediadir}/ww1.mp3" "$2" "$3";; | |
+ yellow) | |
+ mix_audio "${mediadir}/yellow.opus" "$2" "$3";; | |
+ *) usage;; | |
esac | |
} | |