What does HackerNews think of CliWrap?

Library for running command-line processes

Language: C#

#201 in Hacktoberfest
#38 in Shell
I am using CliWrap to create my own wrapper for the functionality I need from FFmpeg. Works pretty well!

https://github.com/Tyrrrz/CliWrap

> Correction, ID3 is a good start. ;) Id3v2 is ... much more.

You're absolutely correct :-)

> Unrelated, I like your project! Nice!

Thanks for your feedback, you're welcome...

> (I'm not entirely sure what your tool does that isn't done by the standard tagging tools id3, id3tool, id3v2... but that's NOT a criticism. I wrote my own multithreaded-resumable-forensic `dd` and a homegrown replacement for `tar` for instance)

Not much really, it is just a tool that supports multiple platforms and multiple metadataformats all in one static binary AND supports chapters... it may be a bit more versatile and easy too use than existing tools. But that is opinionated.

> wanted something HIGH performance for tunable and batchable splits, silence detection, merges, as well as automatic clustering (!). Those split/merge features, that, I'm guessing you're planning on implement by requiring ffmpeg _AND_ using another library just to wrap it? I'd do in native code and, as a result, performance would be orders of magnitude better.

Yes, I plan to use `ffmpeg` for the first part, but also include `fdkaac` and maybe `sox` or other audio specialist tools to provide better audio. My plan is also to integrate a dependency downloader, that does not want you to install the dependencies yourself, but does everything for you. I'm the author of `m4b-tool`[1], which has also split, merge and silence detection, so I have a little experience in exactly this topic you are talking about (tone is planed as long term successor of m4b-tool, but this will take time). I will use a library called CliWrap[4] to integrate shell execution though, but do it multithreaded to provide more performance.

> I don't use windows (at least, I'm not willing to use windows for any 'pro bono' work ;-) ) but if you were to write your tool in C or C++ instead, or perhaps... have a common API layer of sorts...

If I understood this correctly: C# is not Windows-Only any more, and it is pretty fast on all platforms. It provides Ahead of Time Compilation and a so called self-contained binaries working without any C# runtime or VM... using github actions I provide a full featured monolitic executable binary, but I could also provide a library. C# is even capable of and using unmanaged code, writing drivers and embedded stuff, like RPi... I think it is not a bad language to start such a project, but at least the best I know well enough ;)

> and actually enjoy, helping you out by "gifting" some fast and MUCH leaner solutions for any and all of the audio processing work

It would really be nice to find some collaborators, thank you. There are some C# audio processing libraries out there (like NAudio[2] or cscore[3]), but currently windows only or pretty complex. We'll see... :-)

This was very helpful. Thanks again.

[1]: https://github.com/sandreas/m4b-tool [2]: https://github.com/naudio/NAudio [3]: https://github.com/filoe/cscore [4]: https://github.com/Tyrrrz/CliWrap

> You can take a look at System.Diagnostics.Process for one of the worst offenders.

Yeah, this is one of my least favourite APIs in all of .NET. My understanding is that the .NET team is planning to redo it in the next few years, but if you want something better right now I highly recommend the excellent CliWrap library: https://github.com/Tyrrrz/CliWrap

I'm still learning C#, but I think it is just awesome.

You can build for:

  - Linux (x64, arm) - even raspberry works fine
  - Windows (x64, arm)
  - MacOS (x64, arm)
The only thing I'm missing atm is BSD, although it might work with Mono, it is not officially targeted. More: https://docs.microsoft.com/en-us/dotnet/core/rid-catalog

Some libraries / frameworks I came across that are definetely worth checking out:

- https://github.com/gnaeus/OperationResult - Rust style error handling for .net

- https://github.com/Tyrrrz/CliFx - Command Line Parser library

- https://github.com/Tyrrrz/CliWrap - Shell exec for c#

- https://github.com/Zeugma440/atldotnet - Audio tagging

- https://avaloniaui.net/ - Cross Plattform UI (WPF Style)

- https://github.com/quozd/awesome-dotnet - Other awesome stuff

- VS Code and JetBrains Rider - alternative IDE for c# development