ExifTool Forum

ExifTool => Newbies => Topic started by: astromd on June 20, 2018, 11:33:38 AM

Title: Different destination depending on media type (photo or video)
Post by: astromd on June 20, 2018, 11:33:38 AM
Hi,

I am writing my first exiftool script and need a little bit of help. But first...awesome tool! It's amazing, really, the number of options and capabilities this supports.

Anyway, I have an incron table entry that fires a script when a new file is written to a specific folder. That script will rename the file using exiftool and organize it. The problem is that I need a different destination (-d) for video files than for images since I will upload them to different servers. I know I can probably do something ahead of exiftool in the script to look at the extension, but I wondered if it would be possible to do this in exiftool since it may be aware of what's a video vs image based on internal knowledge of the mime type.

Any ideas? Or can anyone point me in the right direction?
Title: Re: Different destination depending on media type (photo or video)
Post by: Phil Harvey on June 20, 2018, 11:38:34 AM
There are various ways to handle this, but the most obvious one is to use two separate commands:

exiftool -ext jpg -ext png -ext tif ... <do image stuff> DIR
exiftool -ext mov -ext mp4 -ext avi ... <do video stuff> DIR[/tt]

If you want, these could be combined into a single command line:

exiftool -ext jpg -ext png -ext tif ... <do image stuff> -execute -ext mov -ext mp4 -ext avi ... <do video stuff> -common_args DIR

You would incur a performance penalty if you tried to use a -if condition to test the MIME type of the file, although this is another possible method.

- Phil
Title: Re: Different destination depending on media type (photo or video)
Post by: astromd on June 20, 2018, 11:43:48 AM
Thanks for the rapid response! The shell script is invoked on an individual file since it's fired when the file finished uploading and the filename is passed to the script. I'll look into the -if condition.
Title: Re: Different destination depending on media type (photo or video)
Post by: Phil Harvey on June 20, 2018, 12:22:04 PM
OK.  Another possible way would be something like this:

exiftool "-directory<${mimetype;$_=(/video/i ? 'some/video/directory' : 'some/other/directory')}" ... FILE

...which incurs the same performance penalty as the -if condition, but can be done in a single command instead of (likely) two.

- Phil
Title: Re: Different destination depending on media type (photo or video)
Post by: astromd on June 20, 2018, 12:56:41 PM
Ok I will give this way a shot. When I run it combining the statements as you mentioned before, it doesn't work for JPG files but it does for MOV.

exiftool -ext jpg -ext JPG -d "${OUTGOING_DESTINATION_BASE}/photos/%Y/%m-%Y/%Y%m%d-%f.%%e"  -execute -ext mov -ext mp4 -ext m4v -ext MOV -d "${OUTGOING_DESTINATION_BASE}/videos/%Y/%m-%Y/%Y%m%d-%f.%%e" "-filename<DateTimeOriginal" "-filename<FileModifyDate" IMG_2669.JPG

No file with specified extension
Title: Re: Different destination depending on media type (photo or video)
Post by: astromd on June 20, 2018, 01:05:42 PM
Quote from: Phil Harvey on June 20, 2018, 12:22:04 PM
OK.  Another possible way would be something like this:

exiftool "-directory<${mimetype;$_=(/video/i ? 'some/video/directory' : 'some/other/directory')}" ... FILE

...which incurs the same performance penalty as the -if condition, but can be done in a single command instead of (likely) two.

- Phil

exiftool "-directory<${mimetype;$_=(/video/i ? '${OUTGOING_DESTINATION_BASE}/videos' : '${OUTGOING_DESTINATION_BASE}/photos')}" "-filename<DateTimeOriginal" "-filename<FileModifyDate" MG_2667.JPG

-bash: -directory<${mimetype;$_=(/video/i ? '${OUTGOING_DESTINATION_BASE}/videos' : '${OUTGOING_DESTINATION_BASE}/photos')}: bad substitution

Title: Re: Different destination depending on media type (photo or video)
Post by: StarGeek on June 20, 2018, 02:43:34 PM
If you want bash to expand a bash variable, it needs to be in double quotes while you want single quotes around the exiftool variables to prevent bash from trying to expand them (see Phil's .sig).

Try this.  I don't use bash, so you may need to play with the quotes a bit to get it right.
exiftool '-directory<${mimetype;$_=(/video/i ? '"'${OUTGOING_DESTINATION_BASE}/videos' : '${OUTGOING_DESTINATION_BASE}/photos')}" '-filename<DateTimeOriginal' '-filename<FileModifyDate' MG_2667.JPG