Avidemux Forum

Avidemux => Main version 2.6 => Topic started by: albybara on December 21, 2013, 06:39:25 PM

Title: Autorotate with scripting - how to pass variables (AviDemux 2.6.7 r8980).
Post by: albybara on December 21, 2013, 06:39:25 PM
Hi,

I am trying to automate rotation, resizing and recompression of videos taken from a Galaxy S3. I use exiftool to read the metadata of the mp4 and then call AviDemux with the correct filters. Although I guess I could do everything in Python since I am not familir with the language I have chosen the batch+python approach.

-the batch file:
@SET PATH=%PATH%;C:\Program Files\Avidemux 2.6 - 64bits;C:\Program Files (x86)\K-Lite Codec Pack\Tools
FOR %%f IN (*.mp4) DO @FOR /F %%i IN ('exiftool.exe -T -Rotation %%f') DO avidemux.exe --var rotation=%%i --force-alt-h264 --load "%%f" --run resizeall.py --save "%%~nf.avi" --quit >NUL:


this is rendered for instance as --var rotation=90

the python script:
if rotation==0:
   adm.addVideoFilter("swscale", "width=960", "height=540", "algo=2", "sourceAR=0", "targetAR=0")
elif rotation==90:
   adm.addVideoFilter("rotate", "angle=270")
   adm.addVideoFilter("swscale", "width=540", "height=960", "algo=2", "sourceAR=0", "targetAR=0")


I assumed that the variable rotation (set with --var rotation) could be called from within the script by just its name but it seems like this isn't the case. Could someone please advice?

The error is:
Exception: (_tp_dict_get) KeyError: rotation
[...snip...] line 8

Line 8 of course is where the "if" is...
Title: Re: Autorotate with scripting - how to pass variables (AviDemux 2.6.7 r8980).
Post by: mean on December 21, 2013, 08:19:37 PM
The simpler would be to create 2 scripts and call one or the other depending on the rotation needed
Title: Re: Autorotate with scripting - how to pass variables (AviDemux 2.6.7 r8980).
Post by: albybara on December 22, 2013, 11:19:55 AM
Well MSDOS is a pretty different thing from UNIX!  ;)

If I want to test for 4 different conditions (I pasted two angles only for simplicity but of course there are 4) besides the 4 scripts I have to nest 3 IF (because ELSEIF does not exist) if I choose the string substitution with native commands I have to set the value to an environment variable and use substitution but again I have to work with delayed expansions which is not the default in all windows environments. If tomorrow I decide to automate some other task I have to multiply the number of scripts required and complicate even more the batch file.

From my point of view this approach is not elegant neither easily manageable. I work similarly while scripting SQL queries to be run through scripts where I also pass variables but there is a well documented way of reading those variables from within the SQL which I did not find here.

My preferred solution would still be to maintain the approach I used so far and I am just a single step from it, all I need to do is understand how variables are passed to Python and how to reference them from within it. I have searched quite a lot but did not find a single example or note about it. Of course I do not necessarily need to use Python if JS can do the same... but again I would need some guidance.

I do also believe that this would interest others and could represent an addition (in the examples) to the scripting section because the rotation of videos taken with mobiles phones is a pain in the back for lots of people... (and the reason why I resorted to AviDemux now more than a year ago) :)
Title: Re: Autorotate with scripting - how to pass variables (AviDemux 2.6.7 r8980).
Post by: mean on December 22, 2013, 01:22:46 PM
No simple solution right now
Passing variable is not supported with tinypy and the js part is lagging/incomplete
Title: Re: Autorotate with scripting - how to pass variables (AviDemux 2.6.7 r8980).
Post by: albybara on January 11, 2014, 01:40:15 PM
Ok, so I gave up and I resorted to duplicating the script. However just for the sake of not dropping it completely:

...any chance of reading environment variables from tinypy? Can the os module be imported? Maybe with a few steps (that do not require recompiling possibly)...
Title: Re: Autorotate with scripting - how to pass variables (AviDemux 2.6.7 r8980).
Post by: mean on January 15, 2014, 06:51:39 AM
I'm adding it, should not be too hard
Title: Re: Autorotate with scripting - how to pass variables (AviDemux 2.6.7 r8980).
Post by: I12learn on January 17, 2014, 07:21:40 PM
Quote from: mean on January 15, 2014, 06:51:39 AM
I'm adding it, should not be too hard
Should then the --var come in force?
Title: Re: Autorotate with scripting - how to pass variables (AviDemux 2.6.7 r8980).
Post by: mean on January 17, 2014, 07:34:23 PM
yes
Title: Re: Autorotate with scripting - how to pass variables (AviDemux 2.6.7 r8980).
Post by: mean on January 18, 2014, 03:01:01 PM
see the other topic