Linux i masowa zmiana zdjęć
Masowa konwersja plików graficznych na inne formaty to umiejętność bardzo przydatna niemal każdemu użytkownikowi komputera. W tym wpisie chciałbym pokazać, jak prosto zrobić to na systemach Linux. Będzie to też ładny (mam nadzieję) przykład na to jak wielki potencjał stanowi możność łączenia ze sobą różnych programów, co jest jakby jednym z filarów Linuksa.
Co nam będzie potrzebne?
Właściwie wszystko, czego będziemy potrzebować do masowej zmiany formatu plików graficznych, a czego w naszym systemie może jeszcze nie być, to program convert, który znajduje się w pakiecie imagemagick. Jeżeli więc nie mamy dostępu do tego polecenia, zaopatrzmy się w to narzędzie:
To jeszcze gwoli wyjaśnienia...
Program convert to istny kombajn. Jego umiejętności nie ograniczają się jedynie do konwersji zdjęć, a wybiegają znacznie dalej ponadto. I choć ten artykuł będzie dotykał jedynie problemu konwersji, to można to, co tutaj jest zapisane ekstrapolować na pozostałe opcje convert'a i w sposób masowy zmieniać rozmiary zdjęć, nakładać znaki wodne i wiele innych. W przyszłości planuję napisać jakiś artykuł o możliwościach tego programu i będzie to stanowiło niejako uzupełnienie do tego co można przeczytać tutaj.
To do rzeczy...
Należałoby teraz pokazać jak programu convert użyć. Składnia jest bardzo prosta:Wiemy już, czego użyjemy do samego aktu konwersji zdjęć, pytanie jak uzyskać pożądaną masowość tej operacji? Z pomocą przyjdzie nam polecenie find, którego zalety też można by długo wychwalać. Jedną z większych jest jednak to, że możemy jego pracę wygodnie łączyć z innymi programami.
I w tym miejscu należałoby artykuł rozczłonować na dwa podejścia do wykorzystania polecenia find. Jedno z nich wiąże się z poleceniem xargs, o którym pisałem ostatnio (xargs - Przesyłanie standardowego wejścia jako parametry do programu) a dzięki któremu będziemy mieli możliwość przesłania wyników pracy polecenia find jako argumenty do polecenia convert.
Drugie podejście wykorzystuje możliwość, jaką daje już samo polecenie find polegające na wykonywaniu wskazanego programu dla każdego znalezionego pliku.
Czas na przykłady
Czas przejść do działania. Na potrzeby tego artykułu załóżmy, że mamy katalog ze zdjęciami PNG, które chcemy przekonwertować do JPG. Najpierw omówimy składnię z wykorzystaniem polecenia xargs. Aby dokonać masowej konwersji w zarysowanej sytuacji, należałoby wydać polecenie:Drugie podejście jest w zasadzie całkiem podobne, tylko tak jak wspomniałem — nie użyjemy polecenia xargs jako pośrednika między find a convert.
Czy to wszystko?
Właściwie to można by na tym artykuł zakończyć. Zostaje jednak mały problem, mimo że masowo zmieniliśmy format zdjęć. Problemem tym jest ich nazwa. Zamiast nadać nową nazwę, z nowym rozszerzeniem, jedynie dopisaliśmy do starej nazwy, nowe rozszerzenie co w efekcie daje np. nazwę JakieśZdjęcie.png.jpg. Nie wygląda to specjalnie elegancko, dlatego wypadałoby jeszcze powiedzieć, jak masowo te nazwy zmienić na poprawne. Użyjmy polecenia rename:
Komentarze (4)