Provides a set of tools for working with multimedia. Some key features:
- Extract video data and stills, directly from stream with managed .NET code!
- Compiling a collection of stills into a single file
- Some basic media organisation capability
The Extensions package provides default implementation for video and image handling (ffmpeg and sixlabors respectively).. However the abstractions package is designed so that you can roll your own if you so choose.
The extensions are exposed to the command line in the form of a Cli tool named leanctl
.
(NB: This tool is currently not published anywhere, and needs to be built from source - see the dotnet publish ...
commands below for reference).
The calling assembly needs to have ffmpeg binaries available. The x64 versions for the appropriate ffmpeg version are provided for windows in the Rendering.Ffmpeg project.
In the case of linux, ffmpeg (v7.x) must be installed separately. For example, on Ubuntu 24.04, this can be achieved via:
sudo add-apt-repository ppa:ubuntuhandbook1/ffmpeg7
In the case of windows, the dlls were obtained from here: https://www.gyan.dev/ffmpeg/builds/
In either case, the assembly looks for ffmpeg binaries at runtime. By default, it will be in "ffmpeg" folder, relative to your invocation path.
To provide control, you can set the environment variable, FFMPEG_BINARIES_PATH
to an absolute path to override this.
In Ubuntu 24.04, these could be seen in /usr/lib/x86_64-linux-gnu after ffmpeg was installed.
# Restore tools
dotnet tool restore
# General clean up
rd -r **/bin/; rd -r **/obj/;
# Run unit tests
gci -r -dir ../TestResults | % { rm -r $_ }; dotnet test -c Release -s .runsettings; dotnet reportgenerator -targetdir:coveragereport -reports:**/coverage.cobertura.xml -reporttypes:"html;jsonsummary"; start coveragereport/index.html;
# Run mutation tests
gci -r -dir ../StrykerOutput | % { rm -r $_ }; dotnet stryker -o;
# Pack and publish a pre-release to a local feed
$suffix="alpha001"; dotnet pack -c Release -o nu --version-suffix $suffix; dotnet nuget push "nu\*.*$suffix.nupkg" --source localdev; rd -r ../**/nu/;
# Publish examples
dotnet publish LeanScreen.CliTool -p:PublishSingleFile=true -p:DebugType=Embedded -r win-x64 -c Release --sc false
dotnet publish LeanScreen.CliTool -p:PublishSingleFile=true -p:DebugType=Embedded -r linux-x64 -c Release --self-contained
# Allow execute (Linux)
sudo chmod +x leanctl