Search code examples
imagemagickimagemagick-convertmogrify

Convert images which have the same names but different extensions


For example, I have two files:

aaa.jpg        (with cat)
aaa.png        (with dog)

As you can see, images are different, despite of their names, which are the same.

I want to convert both these images to one single format.

The basic attempt for this task is

mogrify -format jpg *.png

But it doesn't work, for obvious reasons (one folder cannot contain multiple files with the same name and extension).

Also, some notes from myself.

  1. Please note, this is just example. In real life, it would be about 100-200 images.

  2. From my point of view, there seems to exist at least 2 ways to fix this issue: add a timestamp to filename OR add random text. I think random text will be better because timestamps sometimes could be equal (if processing is very fast).

So, what do you suggest for this task, and how it could be done? Thanks.


Solution

  • Instead of mogrify you can use convert modifying the original file name with -set filename:f, for example adding a suffix containing a counter:

    convert *.png -set filename:f "%t_%p" "%[filename:f].jpg"
    

    Where the meaning of %p and %t attributes are:

    • %p index of image in current image list
    • %t filename without directory or extension (suffix)

    More details here.

    If this is your starting scenario:

    aaa.jpg        
    aaa.png        
    bbb.jpg        
    bbb.png  
    

    the final situation would be:

    aaa.jpg        
    aaa.png        
    bbb.jpg        
    bbb.png   
    aaa_0.jpg
    bbb_1.jpg