• Tags
  • Documentation
  • Order
  • Register
  • Login
Duet3D Logo Duet3D
  • Tags
  • Documentation
  • Order
  • Register
  • Login

Timelapse video through execonmcode!

Scheduled Pinned Locked Moved
DSF Development
8
24
1.3k
Loading More Posts
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • undefined
    Phaedrux Moderator
    last edited by 16 Oct 2020, 03:20

    The mp4 file worked for me in chrome. 🤷

    Z-Bot CoreXY Build | Thingiverse Profile

    1 Reply Last reply Reply Quote 0
    • ?
      A Former User
      last edited by 16 Oct 2020, 03:33

      Sounds like something that has to be tested with Duet2 when 3.2 is released.

      (.mp4 fine here as well, but it does require the browser to understand what to do with content-type: video/mp4 as there is no embedded player or download prompt)

      1 Reply Last reply Reply Quote 0
      • undefined
        droftarts administrators @oozeBot
        last edited by 16 Oct 2020, 10:24

        @oozeBot said in Timelapse video through execonmcode!:

        Mods- if you see this, will you please update my original post with this video link instead?

        Done.

        Ian

        Bed-slinger - Mini5+ WiFi/1LC | RRP Fisher v1 - D2 WiFi | Polargraph - D2 WiFi | TronXY X5S - 6HC/Roto | CNC router - 6HC | Tractus3D T1250 - D2 Eth

        1 Reply Last reply Reply Quote 0
        • undefined
          T3P3Tony administrators
          last edited by 16 Oct 2020, 15:29

          very cool, it would be great if someone could write the configuration elements into a DWC plugin and then it could be made into a front and back end plugin.

          www.duet3d.com

          1 Reply Last reply Reply Quote 0
          • undefined
            oozeBot
            last edited by 16 Oct 2020, 20:16

            Here is a 300mm z-wobble test I just completed in vase mode. It was printed in ABS with a .6mm nozzle at .5mm layer height x .75mm extrusion width at a sustained 80mm/s in just over 3 hours..

            Note the bad spots in the rear as it prints (and the recovery!). Since this was in vase mode, I didn't use M400 between layers. It was caused by the momentary stutter when the photos were triggered..

            https://vimeo.com/469090014

            1 Reply Last reply Reply Quote 0
            • undefined
              wilriker @oozeBot
              last edited by wilriker 16 Oct 2020, 21:07

              @oozeBot said in Timelapse video through execonmcode!:

              Note all M5575 commands should be followed by an M400!!

              I'll include an option to flush the channel the custom code was received on before executing the command in my next version of execonmcode. That should remove the above requirement.

              EDIT: interesting. I checked the code and it does already flush the channel. In that case I have to ask @oozeBot for the reason of the above recommendation. 🤔

              Manuel
              Duet 3 6HC (v0.6) with RPi 4B on a custom Cartesian
              with probably always latest firmware/DWC (incl. betas or self-compiled)
              My Tool Collection

              undefined 2 Replies Last reply 16 Oct 2020, 21:59 Reply Quote 0
              • undefined
                oozeBot @wilriker
                last edited by oozeBot 16 Oct 2020, 21:59

                @wilriker maybe I'm wrong - still learning the kinks. Though I can now say execonmcode holds "in process" until complete, so maybe an M400 afterwards isn't necessary.. but it is necessary before if you want the extruder to park completely stationary like I did in the first video. I'll request that modified in the original post after I do some more testing.

                Take a look at that latest video I just posted.. you'll see the bad spots in the rear of the print due to calling the timelapse without any M400s in vase mode.. I don't know if it's possible, but it would be great if it was also possible to call execonmode out of process where it doesn't wait on the result. Is that doable? There is likely use cases for both ways..

                undefined 1 Reply Last reply 17 Oct 2020, 13:24 Reply Quote 0
                • undefined
                  wilriker @oozeBot
                  last edited by wilriker 17 Oct 2020, 13:24

                  @oozeBot said in Timelapse video through execonmcode!:

                  I'll request that modified in the original post after I do some more testing.

                  You should be able to edit your own posts. It's in the menu of that post.

                  I don't know if it's possible, but it would be great if it was also possible to call execonmode out of process where it doesn't wait on the result. Is that doable? There is likely use cases for both ways..

                  Will add that. Not hard to do. 👍

                  Manuel
                  Duet 3 6HC (v0.6) with RPi 4B on a custom Cartesian
                  with probably always latest firmware/DWC (incl. betas or self-compiled)
                  My Tool Collection

                  undefined 1 Reply Last reply 17 Oct 2020, 13:30 Reply Quote 0
                  • undefined
                    oozeBot @wilriker
                    last edited by 17 Oct 2020, 13:30

                    @wilriker That's great! I'll be eager to test that when you have time to work on it..

                    undefined 1 Reply Last reply 18 Oct 2020, 09:05 Reply Quote 0
                    • undefined
                      oozeBot @wilriker
                      last edited by 17 Oct 2020, 21:31

                      @wilriker I was wrong about needing a following M400 (as it's "in process" - duh!). I changed it in my original post. Thanks for letting me know I can edit earlier posts - not sure how I missed that!

                      1 Reply Last reply Reply Quote 1
                      • undefined
                        wilriker @oozeBot
                        last edited by 18 Oct 2020, 09:05

                        @oozeBot said in Timelapse video through execonmcode!:

                        @wilriker That's great! I'll be eager to test that when you have time to work on it..

                        I've put a build into my Dropbox. You can add a command-line parameter --no-flush and it will not flush the code queue prior executing the command. Note that since this is subscribing to the PRE subscription mode it will execute your command as soon as it is read from disk which might be a while (this heavily depends on the execution time of the commands ahead - long slow moves obviously take up more time than short quick moves) before it is actually executed.

                        Manuel
                        Duet 3 6HC (v0.6) with RPi 4B on a custom Cartesian
                        with probably always latest firmware/DWC (incl. betas or self-compiled)
                        My Tool Collection

                        1 Reply Last reply Reply Quote 0
                        • ?
                          A Former User @oozeBot
                          last edited by 8 Nov 2020, 09:06

                          @oozeBot said in Timelapse video through execonmcode!:

                          I'm pleased to give back to the community with the following script to add timelapse video when using a Duet3 and Raspberry Pi. I am unsure if this will work with a Duet2, but maybe..? if execonmcode works, then yes it will..

                          example video:
                          https://vimeo.com/468721949

                          This one does take some setup, but the payoff is well worth it. Note that this expects the files to be in the following folders as the default:

                          • timelapse.sh should be in a folder named /scripts located off of the root directory
                          • a folder named pix must be located in the /scripts folder
                          • a seed file named timelapse_counter, containing only a -1 must be located in the /scripts folder
                          • a folder located in the root directory named /timelapse for the output video

                          Also note that both mjpg_streamer and ffmpeg must be installed on your RPi.

                          First, here is the service code. I chose M5575.

                          [Unit]
                          Description=Duet API listener for Timelapse Video by oozeBot
                          After=duetcontrolserver.service
                          Requires=duetcontrolserver.service
                          
                          [Service]
                          ExecStart=/usr/local/bin/execonmcode -mCode 5575 -command "./scripts/timelapse.sh %%A %%F"
                          Restart=always
                          RestartSec=10
                          
                          [Install]
                          WantedBy=multi-user.target
                          

                          Here is v1.0 of the bash script:

                          #!/bin/bash
                          # Timelapse Video by oozeBot (www.oozeBot.com) v1.0 - released 10/15/2020
                          # Usage: ./timelapse.sh Action FPS
                          # Example: ./timelapse.sh "Enable/Disable/Make/Remove" "1-30"
                          # gCode: M5575 A"Enable"     ;Enables timelapse and cleans up the image folder
                          # gCode: M5575 A"Capture"    ;if enabled, captures a snapshot from the video feed
                          # gCode: M5575 A"Disable"    ;Disables timelapse
                          # gCode: M5575 A"Make" F"12" ;Creates a video of the snapshots @ 12fps
                          # gCode: M5575 A"Remove"     ;Removes all images in the image folder
                          
                          Action=`echo $1 | tr [a-z] [A-Z] | cut -c1-1`
                          
                          CounterFile="/scripts/timelapse_counter"
                          ImageNum=`cat $CounterFile`
                          
                          if [ "$Action" = "E" ];then
                           #Enables timelapse by setting the counter to 0 and removes all images in the image folder
                           ImageNum=0
                           rm -rf /scripts/pix/*
                           echo $ImageNum > $CounterFile
                          elif [ "$Action" = "D" ] && [ $ImageNum -gt 0 ];then
                           #If enabled, disables timelapse by setting the counter to -1
                           ImageNum=-1
                           echo $ImageNum > $CounterFile
                          elif [ "$Action" = "M" ] && [ $ImageNum -lt 0 ];then
                           #Creates timelapse video at the specified FPS, else defaults to 24
                           #This will return an error if no images exist and only works when disabled
                           fps=$2
                           if ! [[ $2 =~ ^[0-9]+$ ]];then
                            fps="24"
                           fi
                           ffmpeg -framerate $fps -start_number 1 -i "/scripts/pix/%d.jpg" -s:v 1920x1080 -vcodec libx264 -qp 0 -preset veryslow /timelapse/$(date +"%Y_%m_%d_%I_%M_%S_%p").mp4
                          elif [ "$Action" = "R" ] && [ $ImageNum -lt 0 ];then
                           #If disabled, removes all images within the image folder (optional as all images will be removed after restart)
                           rm -rf /scripts/pix/*
                          elif [ "$Action" = "C" ] && [ $ImageNum -ge 0 ];then
                           #Increments counter and captures snapshot
                           ImageNum=$((ImageNum+1))
                           wget http://localhost:8080/?action=snapshot -O '/scripts/pix/'$ImageNum'.jpg'
                           echo $ImageNum > $CounterFile
                          fi
                          

                          Note all M5575 commands should be preceded by an M400 if you want the extruder to stand still

                          I put examples in the script of all usage through gCode. For the example video above, in the starting script of my slicer, I've added M5575 A"Enable" to enable timelapse. In my layer change script, I've added M5575 A"Capture". And finally, in the ending script, I've added M5575 A"Disable" to disable.

                          Why did I do it this way? Because I wanted to process the video outside of the control of the job's gCode - however, you could include the following in the bottom of your ending script to both make the video and clean up the photos: M5575 A"Make" F"12" (whatever FPS you want) followed by M5575 A"Remove". Just be prepared to wait before the job actually completes as it holds in process until the video is done.

                          I also did it this way so I could adjust the framerate by just running the command with various FPS from DWC..

                          This was also designed to be added to your daemon.g file using M5575 A"Capture" followed by a G40 S10 (or whatever second delay you want) to make a different type of timelapse. It will only save photos while the timelapse has been enabled using M5575 A"Enable".. so it's safe to just leave in there if you so choose. However, it currently supports layer change or X seconds - not both at the same time. If there was demand, I could add that..

                          And if there are an ffmpeg experts out there, please feel free to correct my usage of it. What I've used might be overkill or not perfect, but it's working well..

                          Good morning, this is the feature I'm looking! I'm not a Raspberry/Linux expert so, if possible, I would like to make some questions:
                          1)Actually on my Raspy I've installed MotionEye wich gives me the capability of having an URL for still images, could I keep on using it?
                          2) what is a service code and where has it to be stored? In the Duet SD?
                          3) Is the bash script you pasted the script called timelapse.sh?

                          Thanks!

                          undefined 1 Reply Last reply 8 Nov 2020, 13:54 Reply Quote 0
                          • undefined
                            oozeBot @A Former User
                            last edited by oozeBot 11 Aug 2020, 13:55 8 Nov 2020, 13:54

                            @the_dragonlord

                            more info on "Exec on mCode" can be found here:

                            https://forum.duet3d.com/topic/13194/dsf-extension-exec-on-mcode-was-shutdown-sbc

                            Once installed, it will allow custom mCodes to be run which execute scripts on the RPi.

                            My script was written entirely around M-JPEG streamer. I use it for both streaming video to DWC and capturing snapshots for the timelapse in the script.. so MotionEye won't work without rewriting the script.

                            And yes, sorry - the bash script is named timelapse.sh and is what is referenced in the service code.

                            ? 2 Replies Last reply 8 Nov 2020, 14:01 Reply Quote 0
                            • ?
                              A Former User @oozeBot
                              last edited by 8 Nov 2020, 14:01

                              @oozeBot said in Timelapse video through execonmcode!:

                              @the_dragonlord

                              more info on "Exec on mCode" can be found here:

                              https://forum.duet3d.com/topic/13194/dsf-extension-exec-on-mcode-was-shutdown-sbc

                              Once installed, it will allow custom mCodes to be run which execute scripts on the RPi.

                              My script was written entirely around M-JPEG streamer. I use it for both streaming video to DWC and capturing snapshots for the timelapse in the script.. so MotionEye won't work without rewriting the script.

                              And yes, sorry - the bash script is named timelapse.sh and is what is referenced in the service code.

                              excellent, thanks!

                              1 Reply Last reply Reply Quote 0
                              • ?
                                A Former User @oozeBot
                                last edited by A Former User 11 Aug 2020, 14:13 8 Nov 2020, 14:06

                                @oozeBot said in Timelapse video through execonmcode!:

                                @the_dragonlord

                                more info on "Exec on mCode" can be found here:

                                https://forum.duet3d.com/topic/13194/dsf-extension-exec-on-mcode-was-shutdown-sbc

                                Once installed, it will allow custom mCodes to be run which execute scripts on the RPi.

                                My script was written entirely around M-JPEG streamer. I use it for both streaming video to DWC and capturing snapshots for the timelapse in the script.. so MotionEye won't work without rewriting the script.

                                And yes, sorry - the bash script is named timelapse.sh and is what is referenced in the service code.

                                so what I have to do now is install a clean image of Raspberry OS, configure it, install mjpeg on it and then configure rff? I have read the content of the link you sent me but I still don't understand what is the service code and where it is stored...

                                undefined 1 Reply Last reply 8 Nov 2020, 14:16 Reply Quote 0
                                • undefined
                                  oozeBot @A Former User
                                  last edited by 8 Nov 2020, 14:16

                                  @the_dragonlord I don't know that you need to start from a clean install, but it might be useful to try this on a second SD card and keep your working version intact. Once you get execonmcode installed and understand how to add services, etc, this will all make better sense. Post a reply to wilriker in the other thread for installation questions, etc..

                                  ? 2 Replies Last reply 8 Nov 2020, 14:17 Reply Quote 0
                                  • ?
                                    A Former User @oozeBot
                                    last edited by 8 Nov 2020, 14:17

                                    @oozeBot said in Timelapse video through execonmcode!:

                                    @the_dragonlord I don't know that you need to start from a clean install, but it might be useful to try this on a second SD card and keep your working version intact. Once you get execonmcode installed and understand how to add services, etc, this will all make better sense. Post a reply to wilriker in the other thread for installation questions, etc..

                                    ok, thanks

                                    1 Reply Last reply Reply Quote 0
                                    • ?
                                      A Former User @oozeBot
                                      last edited by 8 Nov 2020, 14:33

                                      @oozeBot said in Timelapse video through execonmcode!:

                                      @the_dragonlord I don't know that you need to start from a clean install, but it might be useful to try this on a second SD card and keep your working version intact. Once you get execonmcode installed and understand how to add services, etc, this will all make better sense. Post a reply to wilriker in the other thread for installation questions, etc..

                                      just the last question: should the Raspy be connected via USB to the board or it just need to be connetced to the same LAN?

                                      undefined 1 Reply Last reply 8 Nov 2020, 14:41 Reply Quote 0
                                      • undefined
                                        oozeBot @A Former User
                                        last edited by 8 Nov 2020, 14:41

                                        @the_dragonlord This is a question for the other thread, but I believe execonmcode will only work when using the RPi as the controller in a non-standalone configuration.. I don't see how else it could communicate.

                                        ? 1 Reply Last reply 8 Nov 2020, 14:43 Reply Quote 0
                                        • ?
                                          A Former User @oozeBot
                                          last edited by 8 Nov 2020, 14:43

                                          @oozeBot said in Timelapse video through execonmcode!:

                                          @the_dragonlord This is a question for the other thread, but I believe execonmcode will only work when using the RPi as the controller in a non-standalone configuration.. I don't see how else it could communicate.

                                          ok, I ask in the other thread. Thanks a lot....I hope to become able enough to use your service on my printer!

                                          1 Reply Last reply Reply Quote 0
                                          • First post
                                            Last post
                                          Unless otherwise noted, all forum content is licensed under CC-BY-SA