#732: Storing variables not working in expressions -------------------------------------+------------------------------------- Reporter: jworrall | Owner: Type: enhancement | Status: closed Priority: normal | Component: avutil Version: unspecified | Resolution: wontfix Keywords: expression | Blocked By: evaluation scale | Reproduced by developer: 0 Blocking: | Analyzed by developer: 0 | -------------------------------------+------------------------------------- Changes (by saste):
* keywords: expression evaluation => expression evaluation scale * resolution: => wontfix * status: new => closed * component: undetermined => avutil Comment: Replying to [comment:3 jworrall]: > Oh, well, that explains a lot. It seems the variables would be more powerful if they could be shared between expressions. For example, I am trying to write a scale filter that will scale a video of any size and aspect ratio down (but not up) to fit inside an iPhone display, while preserving aspect ratio. I've written a script that gets variables for the display/frame size depending on which iPhone it is (FW, FH and the aspect ratio FA). > > I was eventually able to do it without variables; it looks like this: > -vf "scale = min(1\,gt(iw\,$FW)+gt(ih\,$FH)) * (gte(a\,$FA)*$FW + lt(a\,$FA)*(($FH*iw)/ih)) + not(min(1\,gt(iw\,$FW)+gt(ih\,$FH)))*iw : \ > min(1\,gt(iw\,$FW)+gt(ih\,$FH)) * (lte(a\,$FA)*$FH + gt(a\,$FA)*(($FW*ih)/iw)) + not(min(1\,gt(iw\,$FW)+gt(ih\,$FH)))*ih" \ > > If the variables were preserved between the width and height expressions, it would be somewhat shorter and easier to follow: > -vf "scale = st(0\,min(1\,gt(iw\,$FW)+gt(ih\,$FH) ) ) * (gte(a\,$FA)*$FW + lt(a\,$FA)*(($FH*iw)/ih) ) + not(ld(0))*iw : \ > ld(0) * ( lte(a\,$FA)*$FH + gt(a\,$FA)*(($FW*ih)/iw) ) + not(ld(0))*ih " \ > > Maybe it's not that important, but I'm sure more 'global' variables would have other uses as well. In any case, unless and until such a feature is developed, it would be good to put in the manual that the variables are not preserved between expressions. Might save someone else several days of tearing their hair out! Thanks Global variables would require a serious overhaul of the eval system (since you may need to pass the environment from one expression to another), and would have several possible unwanted side effects. I think the best way to achieve what you want is through external scripting, this would also simplify the logic and improve readability. So I'm closing this feature request as WONTFIX. -- Ticket URL: <https://ffmpeg.org/trac/ffmpeg/ticket/732#comment:5> FFmpeg <http://ffmpeg.org> FFmpeg issue tracker _______________________________________________ FFmpeg-trac mailing list FFmpeg-trac@avcodec.org http://avcodec.org/mailman/listinfo/ffmpeg-trac