On Dec 22, 2014, at 10:24 PM, Justin Israel <[email protected]> wrote:
> The ":" separator was only a suggestion. It would be good to hear what others
> think on that. Although I did think of it similar to an aspect ratio, without
> being confused for actually being an aspect, since I am not sure what 3:2
> would imply.
I would assume that '3:2' means an aspect ratio of 1.5. Like "4:3" commonly is
used to describe the aspect ratios of old TV monitor's display area if there
are square pixels (like 640x480).
I'm trying to think "if I, or someone like me, saw that command line, without
reading the documentation, would they be likely to correctly guess what it
does." That isn't always possible (and there are some oiiotool operations that
even I need to look up every single time because I find them confusing, despite
having written them), but I think it's worth striving for. I think really my
reaction was simply that the pattern "A:B" is associated with aspect ratios,
not with x and y values.
> Would it be scaling the height while maintaining the width? Is it scaling the
> width to maintain the height? So I figured if you said 3:2, the only concrete
> values that could be derived are 3*x:2*y . Unless you are suggesting that the
> ratio might apply to some previously specified width/height.
I guess we'd choose a convention: preserve the horizontal, or the vertical, or
whichever is bigger, or smaller.
> Maybe the scales could be conveyed through a <float>%x<float>%
I'd be ok with that: --resize 200%x50% would mean double the horizontal
resolution and halve the vertical resolution and is the natural
extension/combination of our two existing notations: "-resize <float>%"
(uniform scale) and "-resize <float>x<float>" (absolute resolution). For that
reason, this is my current favourite so far.
> I would probably prefer the <float>:<float> syntax to that, though.
If we wanted to extend the syntax in the future to allow specification of
aspect ratios, we will be disappointed to have already used the ideal notation
for that.
> Maybe that was a bad example then, because I forgot that I could have tacked
> on a --fit operation after the resize to accomplish that task. But I don't
> think you can have multiple --resize or --fit operations under the current
> ArgParse impl, right? If that was the only possible case for needing
> subsequent transformations, then maybe the multiple "," support isn't needed.
Sure you can! ArgParse doesn't have to work this way, but oiiotool uses a mode
where It actually processes the commands left-to-right, calling a function for
each command as it parses it, rather than just setting flags and running one
function at the end. So this is perfectly legal:
oiiotool input.tif -resize 50% -resize 200% -o blurry.tif
That's actually a kind of cool way to remove the high frequency content (though
probably less efficient than --blur).
> Perhaps related, I've also toyed with the idea of some kind of string
> substation rules on the command line where you could access metadata
> (including resolution) of the "current" image, and maybe even do simple math
> expression with it. That's a much more invasive surgery, including needing a
> bit of overhaul in the ArgParse class we use for command line arguments. But
> it's an interesting direction for future work that would make oiiotool even
> more flexible.
>
> Honestly, I was thinking that very same thing, but I didn't want to suggest
> too much up front. ffmpeg has some neat expression support in its filter
> flags. oiiotool probably doesn't need quite as extensive of support for these
> expressions, but the ability to access context-specific values through
> symbols would be sweet. Like if I could have said:
>
> --resize "w/2 x h/4"
>
> So, scale the in-width down by half, and scale the in-height down by half and
> also another half for the anamorphic squeeze.
>
> Maybe cool things to have access to would be:
> w - input width
> h - input height
> ar - aspect ratio
I'm thinking even more general than that... retrieval of any metadata. For
example, why not be able to extract the "ImageDescription" and render it as
text atop the image?
I haven't thought it through enough to come up with the right syntax yet,
however, and we need to be careful to make it easy for it to correctly
disambiguate the metadata retrieval from the math expressions, and make sure
neither could be confused for filenames.
This is more for long-term. It's a big step and will be an important feature, I
don't want to botch it by picking a syntax that we later come to regret.
I'll look into ffmpeg as you suggest and see what it does.
--
Larry Gritz
[email protected]
_______________________________________________
Oiio-dev mailing list
[email protected]
http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org