Building a timelapse with ffmpy












3












$begingroup$


As a 'trying to learn Python' project, I am using ffmpy to stitch together a timelapse from a series of still images. I'd like the script to output a couple of formats for web use.



This is what I have:



#!/usr/bin/env python3

import datetime
import ffmpy
import os

now = datetime.datetime.now()
ydr = now.strftime('%Y')
mdr = now.strftime('%m')
ddr = now.strftime('%d')

ipath = str(os.path.dirname(os.path.abspath(__file__))) + '/images/' + ydr + '/' + mdr + '/*/*.jpg'
opath1 = str(os.path.dirname(os.path.abspath(__file__))) + '/videos/' + ydr + mdr + '.mp4'
opath2 = str(os.path.dirname(os.path.abspath(__file__))) + '/videos/' + ydr + mdr + '.webm'

ff = ffmpy.FFmpeg(
inputs={ipath: '-loglevel info -pattern_type glob -framerate 18 '},
outputs={opath1: '-c:v libx264 -vf "scale=1280:-1,hqdn3d=luma_spatial=1" -pix_fmt yuv420p'}
)
ff.run()

ff = ffmpy.FFmpeg(
inputs={ipath: '-loglevel info -pattern_type glob -framerate 18 '},
outputs={opath2: '-c:v libvpx -vf "scale=1280:-1,hqdn3d=luma_spatial=1" -b:v 1M -c:a libvorbis'}
)
ff.run()


It works, but it's kinda ugly and I'm pretty sure there's a more efficient and 'Pythonic' way of doing this. Any pointers?










share|improve this question









New contributor




campegg is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







$endgroup$

















    3












    $begingroup$


    As a 'trying to learn Python' project, I am using ffmpy to stitch together a timelapse from a series of still images. I'd like the script to output a couple of formats for web use.



    This is what I have:



    #!/usr/bin/env python3

    import datetime
    import ffmpy
    import os

    now = datetime.datetime.now()
    ydr = now.strftime('%Y')
    mdr = now.strftime('%m')
    ddr = now.strftime('%d')

    ipath = str(os.path.dirname(os.path.abspath(__file__))) + '/images/' + ydr + '/' + mdr + '/*/*.jpg'
    opath1 = str(os.path.dirname(os.path.abspath(__file__))) + '/videos/' + ydr + mdr + '.mp4'
    opath2 = str(os.path.dirname(os.path.abspath(__file__))) + '/videos/' + ydr + mdr + '.webm'

    ff = ffmpy.FFmpeg(
    inputs={ipath: '-loglevel info -pattern_type glob -framerate 18 '},
    outputs={opath1: '-c:v libx264 -vf "scale=1280:-1,hqdn3d=luma_spatial=1" -pix_fmt yuv420p'}
    )
    ff.run()

    ff = ffmpy.FFmpeg(
    inputs={ipath: '-loglevel info -pattern_type glob -framerate 18 '},
    outputs={opath2: '-c:v libvpx -vf "scale=1280:-1,hqdn3d=luma_spatial=1" -b:v 1M -c:a libvorbis'}
    )
    ff.run()


    It works, but it's kinda ugly and I'm pretty sure there's a more efficient and 'Pythonic' way of doing this. Any pointers?










    share|improve this question









    New contributor




    campegg is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
    Check out our Code of Conduct.







    $endgroup$















      3












      3








      3





      $begingroup$


      As a 'trying to learn Python' project, I am using ffmpy to stitch together a timelapse from a series of still images. I'd like the script to output a couple of formats for web use.



      This is what I have:



      #!/usr/bin/env python3

      import datetime
      import ffmpy
      import os

      now = datetime.datetime.now()
      ydr = now.strftime('%Y')
      mdr = now.strftime('%m')
      ddr = now.strftime('%d')

      ipath = str(os.path.dirname(os.path.abspath(__file__))) + '/images/' + ydr + '/' + mdr + '/*/*.jpg'
      opath1 = str(os.path.dirname(os.path.abspath(__file__))) + '/videos/' + ydr + mdr + '.mp4'
      opath2 = str(os.path.dirname(os.path.abspath(__file__))) + '/videos/' + ydr + mdr + '.webm'

      ff = ffmpy.FFmpeg(
      inputs={ipath: '-loglevel info -pattern_type glob -framerate 18 '},
      outputs={opath1: '-c:v libx264 -vf "scale=1280:-1,hqdn3d=luma_spatial=1" -pix_fmt yuv420p'}
      )
      ff.run()

      ff = ffmpy.FFmpeg(
      inputs={ipath: '-loglevel info -pattern_type glob -framerate 18 '},
      outputs={opath2: '-c:v libvpx -vf "scale=1280:-1,hqdn3d=luma_spatial=1" -b:v 1M -c:a libvorbis'}
      )
      ff.run()


      It works, but it's kinda ugly and I'm pretty sure there's a more efficient and 'Pythonic' way of doing this. Any pointers?










      share|improve this question









      New contributor




      campegg is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.







      $endgroup$




      As a 'trying to learn Python' project, I am using ffmpy to stitch together a timelapse from a series of still images. I'd like the script to output a couple of formats for web use.



      This is what I have:



      #!/usr/bin/env python3

      import datetime
      import ffmpy
      import os

      now = datetime.datetime.now()
      ydr = now.strftime('%Y')
      mdr = now.strftime('%m')
      ddr = now.strftime('%d')

      ipath = str(os.path.dirname(os.path.abspath(__file__))) + '/images/' + ydr + '/' + mdr + '/*/*.jpg'
      opath1 = str(os.path.dirname(os.path.abspath(__file__))) + '/videos/' + ydr + mdr + '.mp4'
      opath2 = str(os.path.dirname(os.path.abspath(__file__))) + '/videos/' + ydr + mdr + '.webm'

      ff = ffmpy.FFmpeg(
      inputs={ipath: '-loglevel info -pattern_type glob -framerate 18 '},
      outputs={opath1: '-c:v libx264 -vf "scale=1280:-1,hqdn3d=luma_spatial=1" -pix_fmt yuv420p'}
      )
      ff.run()

      ff = ffmpy.FFmpeg(
      inputs={ipath: '-loglevel info -pattern_type glob -framerate 18 '},
      outputs={opath2: '-c:v libvpx -vf "scale=1280:-1,hqdn3d=luma_spatial=1" -b:v 1M -c:a libvorbis'}
      )
      ff.run()


      It works, but it's kinda ugly and I'm pretty sure there's a more efficient and 'Pythonic' way of doing this. Any pointers?







      python beginner image video






      share|improve this question









      New contributor




      campegg is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.











      share|improve this question









      New contributor




      campegg is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      share|improve this question




      share|improve this question








      edited 5 hours ago









      200_success

      129k15152415




      129k15152415






      New contributor




      campegg is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      asked 5 hours ago









      campeggcampegg

      183




      183




      New contributor




      campegg is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.





      New contributor





      campegg is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.






      campegg is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.






















          1 Answer
          1






          active

          oldest

          votes


















          1












          $begingroup$



          • Use path.join() instead of manually concatenating file paths



            This will make sure that it will work on different OS's, windows uses backslashes for instance




          • No need to convert with strftime



            A datetime has years, months and days as properties, if you want them in str format you could:



            map(str, iterable) to convert them into strings




          Code



          import datetime
          import os.path

          now = datetime.datetime.now()
          y, m = map(str, (now.year, now.month))

          location = os.path.dirname(os.path.abspath(__file__))
          ipath = os.path.join(location, 'images', y, m + '.jpeg')
          video_path_mp4 = os.path.join(location, 'videos', y, m + '.mp4')
          video_path_webm = os.path.join(location, 'videos', y, m + '.webm')





          share|improve this answer









          $endgroup$













          • $begingroup$
            Great to know, thanks!
            $endgroup$
            – campegg
            4 hours ago











          Your Answer





          StackExchange.ifUsing("editor", function () {
          return StackExchange.using("mathjaxEditing", function () {
          StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
          StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
          });
          });
          }, "mathjax-editing");

          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "196"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: false,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: null,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });






          campegg is a new contributor. Be nice, and check out our Code of Conduct.










          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f211937%2fbuilding-a-timelapse-with-ffmpy%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          1












          $begingroup$



          • Use path.join() instead of manually concatenating file paths



            This will make sure that it will work on different OS's, windows uses backslashes for instance




          • No need to convert with strftime



            A datetime has years, months and days as properties, if you want them in str format you could:



            map(str, iterable) to convert them into strings




          Code



          import datetime
          import os.path

          now = datetime.datetime.now()
          y, m = map(str, (now.year, now.month))

          location = os.path.dirname(os.path.abspath(__file__))
          ipath = os.path.join(location, 'images', y, m + '.jpeg')
          video_path_mp4 = os.path.join(location, 'videos', y, m + '.mp4')
          video_path_webm = os.path.join(location, 'videos', y, m + '.webm')





          share|improve this answer









          $endgroup$













          • $begingroup$
            Great to know, thanks!
            $endgroup$
            – campegg
            4 hours ago
















          1












          $begingroup$



          • Use path.join() instead of manually concatenating file paths



            This will make sure that it will work on different OS's, windows uses backslashes for instance




          • No need to convert with strftime



            A datetime has years, months and days as properties, if you want them in str format you could:



            map(str, iterable) to convert them into strings




          Code



          import datetime
          import os.path

          now = datetime.datetime.now()
          y, m = map(str, (now.year, now.month))

          location = os.path.dirname(os.path.abspath(__file__))
          ipath = os.path.join(location, 'images', y, m + '.jpeg')
          video_path_mp4 = os.path.join(location, 'videos', y, m + '.mp4')
          video_path_webm = os.path.join(location, 'videos', y, m + '.webm')





          share|improve this answer









          $endgroup$













          • $begingroup$
            Great to know, thanks!
            $endgroup$
            – campegg
            4 hours ago














          1












          1








          1





          $begingroup$



          • Use path.join() instead of manually concatenating file paths



            This will make sure that it will work on different OS's, windows uses backslashes for instance




          • No need to convert with strftime



            A datetime has years, months and days as properties, if you want them in str format you could:



            map(str, iterable) to convert them into strings




          Code



          import datetime
          import os.path

          now = datetime.datetime.now()
          y, m = map(str, (now.year, now.month))

          location = os.path.dirname(os.path.abspath(__file__))
          ipath = os.path.join(location, 'images', y, m + '.jpeg')
          video_path_mp4 = os.path.join(location, 'videos', y, m + '.mp4')
          video_path_webm = os.path.join(location, 'videos', y, m + '.webm')





          share|improve this answer









          $endgroup$





          • Use path.join() instead of manually concatenating file paths



            This will make sure that it will work on different OS's, windows uses backslashes for instance




          • No need to convert with strftime



            A datetime has years, months and days as properties, if you want them in str format you could:



            map(str, iterable) to convert them into strings




          Code



          import datetime
          import os.path

          now = datetime.datetime.now()
          y, m = map(str, (now.year, now.month))

          location = os.path.dirname(os.path.abspath(__file__))
          ipath = os.path.join(location, 'images', y, m + '.jpeg')
          video_path_mp4 = os.path.join(location, 'videos', y, m + '.mp4')
          video_path_webm = os.path.join(location, 'videos', y, m + '.webm')






          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered 5 hours ago









          LudisposedLudisposed

          7,42421959




          7,42421959












          • $begingroup$
            Great to know, thanks!
            $endgroup$
            – campegg
            4 hours ago


















          • $begingroup$
            Great to know, thanks!
            $endgroup$
            – campegg
            4 hours ago
















          $begingroup$
          Great to know, thanks!
          $endgroup$
          – campegg
          4 hours ago




          $begingroup$
          Great to know, thanks!
          $endgroup$
          – campegg
          4 hours ago










          campegg is a new contributor. Be nice, and check out our Code of Conduct.










          draft saved

          draft discarded


















          campegg is a new contributor. Be nice, and check out our Code of Conduct.













          campegg is a new contributor. Be nice, and check out our Code of Conduct.












          campegg is a new contributor. Be nice, and check out our Code of Conduct.
















          Thanks for contributing an answer to Code Review Stack Exchange!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          Use MathJax to format equations. MathJax reference.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f211937%2fbuilding-a-timelapse-with-ffmpy%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Terni

          A new problem with tex4ht and tikz

          Sun Ra