announcements

danielsz 2025-10-14T02:19:14.759989Z

Announcing https://github.com/danielsz/bioscoop, a DSL for FFmpeg Why? The short answer: because FFmpeg syntax is nuts. The long answer: because FFmpeg's own DSL is a thin layer on top of`libavfilter`. It is a string-only representation: the filtergraph is essentially "write-only" code. There is no composition mechanism, no type checking, and no ability to introspect the graph structure before execution. The longer answer: https://danielsz.github.io/bioscoop/#orgfab16a2 and the https://danielsz.github.io/bioscoop/#orgdb665f9. Who is this for? The short answer: me. A slightly less short answer: the creative coding community. Bonus point for Clojure natives. The long answer may be found in the https://github.com/danielsz/bioscoop. On October 18th, I will give a talk on the topic of Bioscoop at https://scicloj.github.io/macroexpand-2025/macroexpand_noj.html. In particular, I will explain how Bioscoop manages to be both an internal DSL and an external one sharing a single transformation pipeline. I hope to see you there!

🆒 3
❤️ 6
🎥 27
🙏 10
🎉 3
Ovi Stoica 2025-10-14T06:12:01.507339Z

As someone who struggled in the past with ffmpeg calls from Clojure, this is really cool! Great job on the implementation!

🙏 2
thomas 2025-10-14T06:42:24.441249Z

And love the Dutch name! 🇳🇱

1
☝️ 1
practicalli-johnny 2025-10-14T08:58:03.802429Z

[Rich Hickey mode] Bioscoop root is from the Greek words 'bios' meaning life and 'Skopein' meaning to look or to see

5
thomas 2025-10-14T09:01:06.025829Z

learned something new today!

practicalli-johnny 2025-10-14T09:02:32.421479Z

Bioscoop looks excellent. I will use it to help with generating cycling data overlays on my long distance cycle ride videos.

😎 1
danielsz 2025-10-14T11:39:37.227109Z

That sounds like a cool use case!

chromalchemy 2025-10-14T17:24:14.136999Z

Awesome, cant wait to try some ken burns fx on my paintings. Do you think it could be used in conjunction with clj media (bindings for ffmpeg native api) @smith.adriane any thoughts? https://github.com/phronmophobic/clj-media https://phronmophobic.github.io/clj-media/

1
phronmophobic 2025-10-14T17:48:46.440509Z

I think there's a function that creates a filtergraph from a string available, but I don't think it's exposed currently. However, many filters are already made available (https://phronmophobic.github.io/clj-media/reference/com.phronemophobic.clj-media.avfilter.html). There are a few examples https://phronmophobic.github.io/clj-media/#examples.

👀 1
danielsz 2025-10-14T19:07:04.131249Z

Funny you mention Ken Burns. I started this project because I wanted to present photography work with intricate transitions (including zooming and panning). (Which gets unwieldy quick in FFmpeg's syntax). The latest link in the README points to that https://www.youtube.com/watch?v=CWdZ3-Xh3vQ written as a Bioscoop program. For those who don't know who Ken Burns is: he is a documentarian covering periods in history for which photographic archives exist but not their film counterpart. So he came up with a technique to animate the source material. That technique spread because zooming and panning in still images makes so much sense in all sorts of contexts. Steve Jobs famously asked Burns for permission to name the effect for iMovie.

danielsz 2025-10-14T19:09:13.741939Z

Bioscoop emits a FFmpeg's filtergraph. This is normally the hard part. Once you have a working filtergraph, it becomes trivial to feed it to FFmpeg (or indeed any third-party tool that understands FFmpeg's filtergraphs).

🔥 1
Shantanu Kumar 2025-10-15T03:35:15.019269Z

@danielsz Congratulations on the release. Looking forward to the Macroexpand talk.

🙏 2
Matti Uusitalo 2025-10-14T05:36:34.737479Z

https://clojurians.slack.com/archives/CLDK6MFMK/p1760419966575209

❤️ 3