Pomoc Aplikacja do automatycznej zmiany rozdzielczości zdjęć w folderze

Mafox_

System Engineer
Q Specialist
11 Kwiecień 2016
104
6
18
QNAP
TS-x51
Ethernet
1 GbE
Wersja oprogramowania Firmware: 4.3.3.0299 Build 20170901
Model serwera: QNAP TS-251

Hej,
Czy jest jakaś aplikacja działająca bezpośrednio na NAS dzięki której można ustawić automatyczną zmianę rozdzielczości wszystkich zdjęć zapisanych w danym folderze?
 
Dzięki, muszę się podszkolić z konsoli
Połączyłem się przez putty, polecenie "resize" działa ok.
Jednak nadal nie wiem jak zrobić ,żeby bez łączenia się z qnapem automatycznie wszystkie pliki zdjęciowe, które zostaną "wrzucone" do danego folderu zostały zmniejszone do danej rozdzielczości.
Przykładowo wrzucam do folderu tylko jedno duże zdjęcie o nazwie "winter.jpg" a qnap automatycznie robi dwa pliki "winter.jpg" + "winter_resize.jpg" ewentualnie tylko ten zmniejszony "winter_resize.jpg"
ok , jestem trochę bliżej. Poczytałem co to crone i znalazłem webcrone i w nim dopisałem polecenie.
Problem jest taki,że nie do końca wiem jakie polecenie wpisać,żeby zadziałało tak jak chce
to
Kod:
*/2 * * * * convert -resize "1024x768>" *.* *.img >/dev/null 2>&1
zmienia na nowe nazwy "*.jpg" a chciałbym zachować starą + nową.rozszerzeniei np. "zima.jpg" na "zima_resize.jpg"
Drugi problem,że to polecenie tworzy w kółko niepotrzebne kopie kopii plików co każdą minutę zamiast wykonać zadanie raz na jednym pliku.
Nie wiem też jak jak wyłączyć to zadanie w webcrontab a w konsoli poprzez putty i edytor vi nie widać tego zadania
 
1. w crontabie używa się pełnych ścieżek do poleceń - zamiast convert -> /usr/local/sbin/convert
2. brak logiki tutaj , każdy plik w folderze (łącznie z avi/mkv i co dusza pragnie) przeskaluj do zadanej rozdzielczości, wynik dzialania programu (jakieś logi) wycisz
3. to nie bedzie trzymać proporcji obrazu

mam PODOBNY skrypt który robi miniaturki z filmów, jak jest plik miniaturki to omiń plik, leć dalej z listą:
Bash:
#!/bin/bash
#check for required software
command -v shuf >/dev/null 2>&1 || { echo "I require shuf but it's not installed.  Aborting." >&2; exit 1; }
command -v ffmpegthumbnailer >/dev/null 2>&1 || { echo "I require ffmpegthumbnailer but it's not installed.  Aborting." >&2; exit 1; }

# check if crucial parameter is missing ...
if [ $# -eq 0 ]
  then
    echo "Usage: $0 /video/folder/to/scan/ > thumbs.sh ; bash thumbs.sh"
    exit 1;
fi
source_dir="${1}"
#function which creates commands to create pics ...
function create_commands()
{
#check if parameter is empty or so ...
if [ -z "$1" ]
then return 1
fi
#little bash magic here
Upload=False
SQL_User=root
SQL_Password=haslo123
generator=/usr/bin/ffmpegthumbnailer
fname="${1}"
filename=$(basename "$1")
DIR=$(dirname "$1")
extension="${filename##*.}"
filename_o="${filename%.*}"
file1="$DIR/$filename_o-thumb.jpg"
file2="$DIR/$filename_o-poster.jpg"
#create thumb if is not present
if [ ! -f "${file1}" ]; then
echo $generator -i \"${fname}\" -o \"${file1}\" -q 10 -s 400 -t `shuf -i10-85 -n1`%
Upload=True
fi
#create poster if is not present
if [ ! -f "${file2}" ]; then
echo $generator -i \"${fname}\" -o \"${file2}\" -q 10 -s 400 -t `shuf -i10-85 -n1`%
Upload=True
fi
#Upload info to DB ..
#Uncomment to disable info upload to DB
#Upload=False
#Uncomment for trimming name
fname=`echo $fname | cut -d '/' -f4- `;
if [ "$Upload" == "True" ]; then
echo "#${fname}";
echo "INSERT INTO ThumbsInfo (ID, Filename, CreationDate) VALUES (NULL,"\"${fname}\"", '`date +"%Y-%m-%d %T"`');" | mysql -u$SQL_User -p$SQL_Password ThumbsInfo;
fi
return 0
}

input_file_types=(mkv mp4 avi)

#loop over the types and convert
for input_file_type in "${input_file_types[@]}"
do
        #let find do magic with -print0 to keep null char at end of line
    find "$source_dir" -name "*.$input_file_type" -print0 | while IFS= read -r -d $'\0' in_file
    do
        #create some commands from provided paths
    create_commands "${in_file}"
    done
done
 
Mam folder w którym docelowo będą tylko zdjęcia i ścieżke podaje w webcrone( GitHub - codeskyblue/webcron: A new crontab that have a web page in order to replace the original crontab. Now it can try on test. tu demo: http://webcron.herokuapp.com/) i to co napisałem wyżej działa i zachowuje proporcje.

Problem jest tylko ze zmianą nazwy pliku i z tym,że bez ustanku robi cały czas od nowa

Z tego co znalazłem jest to niezależne od systemowego crontab. To mój pierwszy NAS więc kręce się w kółko a Twojego skryptu nie rozumiem i nawet nie wiem jak go uruchomić. Zamiast długiego skryptu wystarczyłaby pewnie tylko jakaś odpowiednia komenda i zmienna dodana do polecenia ale nie wiem jaka :)
 
takie coś zadziałało lepiej
Kod:
1 * * * * /share/CACHEDEV1_DATA/test find . -name "*.jpg" -exec convert {} -resize "1024x768>" -format jpg {}_thm.jpg \; >/dev/null 2>&1
ale jeszcze wymaga poprawki
ok. to działa:
Kod:
#!/bin/bash
for image_file in *.jpg
do
image_file="${image_file// /\ }"
image_file_thm="${image_file//.jpg/_thm.jpg}"
if ! [ -f "${image_file_thm}" ] &&  [ "${image_file:(-8)}" != "_thm.jpg" ]
then
convert "${image_file}" -resize "1024x768>"  "${image_file_thm}"
fi
done
i trzeba dodać do crontaba
nie wiem dlaczego poprzez edycję w crontabie nie zadziałało to :
Kod:
*/5 * * * * /share/CACHEDEV1_DATA/test/conv.sh
,ale poprzez WebCrontab działa idealnie, więc jak ktoś potrzebuje to polecam.
 
robiłem to:
vi /etc/config/crontab
tam dodałem:
*/5 * * * * /share/CACHEDEV1_DATA/test/conv.sh
potem
crontab /etc/config/crontab && /etc/init.d/crond.sh restart ( a nawet cały serwer restartowałem)

i to też oczywiście : chmod +x conv.sh

i nie wiem o chodzi,że nie zadziałało, ale to już nie ważne w sumie bo webcrontab działa super i można w każdej chwili zmienić bez edycji samego crontaba i zawsze tak będe robił harmonogram zadań. ps. Szkoda ,że Icrontaba nie ma czystego,żeby mógł wykrywać pliki zamiast harmonogramu