Konwertuj (kompresuj) obrazy JPEG za pomocą mogrify, zachowując oryginalne pliki w tym samym katalogu

0

Próbuję przekonwertować (skompresować) kilka obrazów JPEG za pomocą komendy imagemagick mogrify, zachowując oryginalny plik w tym samym katalogu. Piszę w oknie terminala: mogrify -quality 25% * .JPEG con% 002d.JPEG, a następnie pojawia się błąd: mogrify: nie można otworzyć obrazu `con% 002d.JPEG ': Brak takiego pliku lub katalogu @ błąd /blob.c/OpenBlob/2712. Jak mogę rozwiązać ten błąd? Uruchomiłem: ident--verbose * | grep Format, a wynik jest dla wszystkich plików: Format: JPEG (format JFIF Grupy Joint Photographic Experts Group) exif: miniaturka: JPEGInterchangeFormat: 10718 exif: miniaturka: JPEGInterchangeFormatLength: 8223

Mój system to Xubuntu 16.04, doceniam pomoc, dzięki Vladi.

Vladimir Pavloski
źródło
1
mogrifynie ma opcji pliku wyjściowego: zawsze zastępuje oryginalne pliki i con-%002d.JPEGjest traktowany jako kolejny plik wejściowy (który nie istnieje) po *.JPEGliście.
AFH
Jakiej nazwy wyjściowej szukasz? Numeracja sekwencyjna?
żuć skarpetki
@chewsocks Czytałem gdzieś (nie pamiętam gdzie), że mógłbym skompresować plik JPEG, biorąc pod uwagę nazwę pliku wyjściowego, która nie zastąpi oryginalnego pliku. Nazwą wyjściową może być kolejny numer lub coś w rodzaju con-001.JPEG, con-002.JPEG, con-003.JPEG, ....
vladimir pavloski
Być może zastanawiasz się, ffmpegktóre obsługuje sekwencyjne nazewnictwo wyjściowe.
żuć skarpetki
@chewsocks Nie, nie mylę się, to na komendę imagemagick mogrify.
vladimir pavloski

Odpowiedzi:

1

Na stronie podręcznika mogrify nie ma opcji wyjściowej, po prostu nadpisuje plik wejściowy, chyba że format zostanie zmieniony (ta sama nazwa jest używana do rozszerzenia pliku).

Spróbuj tego za pomocą convertzamiast tego.

#!/bin/bash
n=1
for i in *.JPEG; do 
    convert "$i" -format jpg -quality '25%' $(printf con-%03d.JPEG $n)
    n=$((n+1))
done

JPEG vs jpg

Mogłem dwa razy zrewanżować ten sam obraz

$ mogrify -format JPEG b.jpg
$ mogrify -format jpg b.jpg

Następnie

$ diff -u <(identify -verbose b.jpg ) <(identify -verbose b.JPEG)
--- /dev/fd/63  2018-09-29 14:42:27.506462707 -0400
+++ /dev/fd/62  2018-09-29 14:42:27.510462929 -0400
@@ -1 +1 @@
-Image: b.jpg
+Image: b.JPEG
@@ -71,2 +71,2 @@
-    date:create: 2018-09-29T14:37:11-04:00
-    date:modify: 2018-09-29T14:37:11-04:00
+    date:create: 2018-09-29T14:37:03-04:00
+    date:modify: 2018-09-29T14:37:03-04:00
@@ -77 +77 @@
-    filename: b.jpg
+    filename: b.JPEG
żuć skarpetki
źródło
DOBRZE!! To załatwiło sprawę. Dzięki. Czy mogę zapytać, jaka jest różnica między formatem JPEG a formatem JPG? Powyższy skrypt konwertuje na „jpg”, a następnie nowy plik wyjściowy jest zapisywany jako „.JPEG”, co to jest hack? dzięki
vladimir pavloski
@vladimirpavloski Dobre pytanie ... habit = P. W nazwach unikam wielkich liter, więc zawsze myślę o formacie „jpg”. convertnie wymusza rozszerzeń plików (możesz zapisać JPEG jako .txt), a ponieważ byłem konkretny, zobaczyłem, że lubisz „JPEG”.
żuć skarpetki
0

Posługiwać się -write

mogrify -set filename:name '%t_q%Q' -quality 30 -write '%[filename:name].jpg' *.jpg

Powyższe polecenie zapisze przekonwertowany obraz pod nową nazwą: przekształcaniu name.jpg do name_q30.jpg , name1.jpg do name1_q30.jpg . Dbanie o bezpieczeństwo starych plików.

Dla innych odsetek ucieczka opcji metadanych, zobacz docs

Janghou
źródło