[HN Gopher] Programmatic Video Editing with Python ___________________________________________________________________ Programmatic Video Editing with Python Author : selvan Score : 111 points Date : 2021-07-21 05:42 UTC (17 hours ago) (HTM) web link (github.com) (TXT) w3m dump (github.com) | popotamonga wrote: | Hm could this be used to make a clone of https://pirsonal.com/ ? | | Have video templates then render them on the cloud filling the | template placeholders with images, text, etc. | kall wrote: | If you are comfortable with javascript instead of python, I | think Remotion [0] could get you to something like that pretty | quickly. | | It's more data driven motion graphics instead of non-linear | video editing, but it looks like that's what pirsonal is doing | pretty much. | | [0] https://www.remotion.dev | PufPufPuf wrote: | I love MoviePy! It's great when you have a lot of bits of audio, | video, and text you need to glue together. I have used it to | create some GPT-2-generated Peppa Pig cartoons | (https://www.youtube.com/watch?v=1TEwCA3KDtg) -- stick the image, | text, and speech together (aligned to the speech length), concat | all the clips, and finally apply some fancy ffmpeg effects. | yuy910616 wrote: | I've always thought "from lib import star" is somewhat of a anti- | pattern. | | Personally I think that makes sense - because sometimes when I | read code, I just have no idea where something comes from. | | But I've seen import star everywhere, couple of examples: | | Doc for this product | | FastAI's course | | Bing ads code base | | So I'm guessing it is more of accepted than I expected? What does | HackerNews think? | amelius wrote: | Side question: how do you prevent import statements from being | imported by "from lib import star"? (Without explicitly | mentioning all the stuff that is not import statements). | | For example, this is mymod.py: import numpy | as np def f(x): return 2*x | | And here it is imported: from mymod import * | f(10) # Works as expected. np.sum([10, 20]) # Works, | but shouldn't work. | qbasic_forever wrote: | Any non-trivial python module is going to be broken up into | multiple files and have an __init__.py which you can | explicitly define what's imported and exposed. You can hoist | a single file module into a folder-based module if you need | direct control and don't want to split it apart into multiple | files yet too. | connorbrinton wrote: | The best you can do (without doing crazy introspection) is to | set `__all__` in `mymod`. It still requires listing | everything you want to be exported from `mymod`, but at least | you only need to do it once. | | Docs: | https://docs.python.org/3/tutorial/modules.html#importing- | fr... | formerly_proven wrote: | Linters will also complain about importing stuff that's not | listed in a module's __all__, so it's overall good API | hygiene to have one. | comradesmith wrote: | Python modules can define a list named `__all__` which of | present will define the behaviour of importing "everything". | | The `from x import y` syntax is unaffected | dbieber wrote: | Here's my take: Don't use "import-star" in library code. Like | you say, it obscures where elements of the namespace came from. | | When using Python interactively, esp. if the interactive | session is to be thrown away at the end, then import-star can | be fine and can be a good time-saver. Video editing is a great | example of when this is appropriate. See also manim. Other | examples might be one-off html parsing or one-off data | manipulation tasks. | | Similar to "import-star" is multiple inheritance. Just like | import-star, multiple inheritance can make it ambiguous where | methods come from, and imo it should similarly be avoided by | default unless there's a compelling reason to use it. | detaro wrote: | An anti-pattern, but I think it's somewhat acceptable for one- | offs, examples, ... where there is really only one thing it can | come from. | qbasic_forever wrote: | pep8 discourages it, but context matters. a half page readme | example trying to demonstrate API usage succinctly is not the | sames as a 10 year old 40k line codebase that 25 devs work on | dragonwriter wrote: | > I've always thought "from lib import star" is somewhat of a | anti-pattern | | Like patterns, anti-patterns are context sensitive. "from lib | import *" is _usually_ an anti-pattern, but doing it _exactly | once_ in a source file, especially a short one, and especially | for demonstration code for the library so imported, is not a | problem. | | But if you do it two or more times in the same source file... | Daiz wrote: | If you're interested in high performance video processing with | Python and want something more than just a fancy ffmpeg wrapper, | then I can highly recommend checking out Vapoursynth: | https://www.vapoursynth.com/ | | It's been around for ~9 years and has a relatively large | community around it, most visibly found on the Doom9 forums: | http://forum.doom9.org/forumdisplay.php?f=82 | | I'm personally still mostly using Avisynth these days since it's | what I'm most familiar with, but I've also used Vapoursynth and | it's definitely the one to learn if you want to get into | programmatic video processing these days. | fareesh wrote: | What are some good / mature / performant libraries to | programmatically achieve compositions of text, audio and image | files, perhaps with a timeline in which these can be declared at | various timestamps, and the output is a video file? | | Does this one do it? | wizzwizz4 wrote: | AviSynth+ [0] is one of the most mature libraries around. It's | performant enough to run live (usually), though I don't imagine | it's heavily optimised. | | [0]: https://avs-plus.net/ | qbasic_forever wrote: | gstreamer is mature... still hard to say if it matches the | other requirements (it is notoriously difficult to figure out | and use from its docs) | minimaxir wrote: | Essentially this repo is a robust wrapper for FFMPEG, which is | what most programmatic video editing tools use in one way or | another. | mr-wendel wrote: | I've had a lot of fun with https://github.com/mifi/editly. It | seems a bit RAM hungry as you define lots (dozens?) of clips | thought. | | I found it super useful to write a quick Python script to auto- | generate JSON in the format it wants, combining screenshots, | headers, footers, and such into a nice demo-video. | zwieback wrote: | this looks great. I normally use Premiere Elements but the | overhead for short compositing is too high and there's little | automation (at least I don't know how) so something like this is | great. The example of compositing using regions found with a | template line drawing is intriguing. | 35mm wrote: | If you move to Premiere Pro and After Effects, you can automate | almost everything that you might want to edit and or composite. | | Both have their own scripting language based on JavaScript and | After Effects also uses plain JS. | | There are also a number of paid plugins which provide varying | levels of no-code automation. For example there is one which | connects to Google Sheets and creates a new AE comp from each | spreadsheet row, replacing text, images from URLs, changing | dimensions of objects, etc. all based on the values of the | spreadsheet cells. ___________________________________________________________________ (page generated 2021-07-21 23:00 UTC)