Features
Mediadeepa can handle any audio/video files managed by FFmpeg, and produce reports with it.
Analysis scope is currently based on FFmpeg filters and tools:
- Audio phase meter
aphasemeter
- Time domain statistics about audio frames
astats
- Audio loudness meter (EBU R128 scanner)
ebur128
- Audio silence detection
silencedetect
- Video black/block artifacts/blurred/duplicate/interlacing frames detection (
blackdetect
/blockdetect
/blurdetect
/freezedetect
/idet
) - Video border detection
cropdetect
- Video spatial information (SI) and temporal information (TI)
siti
- Structural media container information: audio/video stream frames size, timing, GOP type
- Create a technical resumed of media file based on FFprobe media file header
- Optional filter use, based on command line (user choice) and current FFmpeg filter availability on app environment.
- User can optionally add timed constraints:
- start position on media file
- limit analysis duration on media file
- limit time to do the analysis operation
- During the analyzing operation, an ETA/progress bar is displayed, and based on current FFmpeg processing
And it can export to file the FFprobe XML with media headers (container and A/V streams).
This application can run on three different "modes":
- Process to export: this is the classical mode. Mediadeepa will drive FFmpeg to produce analysis data from your source file, and export the result a the end.
- Process to extract: sometimes, you don't need to process data during the analysis session. So, Mediadeepa can just extract to raw text/xml files (zipped in one archive file) all the gathered data from FFmpeg.
- Import to export: to load in Mediadeepa all gathered raw data files. Mediadeepa is very tolerant with the zip content, notably if they were not created by Mediadeepa (originally). No one is mandatory in zip.
You can process multiple files and directory scans in one run, as well as load a text file as file list to process.
Known limitations for Mediadeepa
- It only support the first video, and the first founded audio stream of a file.
- Audio mono and stereo only.
- Some process take (long) time to do, like SITI and container analyzing, caused by poor FFmpeg/FFprobe performances with these filters.
- Loudness EBU R-128,and audio stats measures works correctly with FFmpeg v7+, due to internal bugs/limitations with the previous versions.
- Limited file start position time and duration are only applied on media analyzing, not container, image snapshot or audio signal.
An internal warning will by displayed if you try to works with a Zip archive created by a different Mediadeepa version.
Current available export formats
With the integrated help, you can get the export features currently available, to use with -f
:
txt
: Values separated by tabs in text filescsv
: Classic CSV files comma separated, ".
" decimal separatorcsvfr
: French flavor CSV files semicolon separated, ",
" decimal separatorxml
: XML Documentjson
: JSON Documentxlsx
: XLSX Spreadsheet simple raw data export, one tabs by export resultsqlite
: SQLite databasegraphic
: Data graphical representation audio Loudness (integrated, short-term, momentary, true-peak), audio phase correlation (+/- 180°), audio DC offset, signal entropy, flatness, noise floor, peak level, silence/mono events, video quality as spatial information (SI) and temporal information, video block/blur/black/interlacing/crop/freeze detection, video and audio iterate frames, video frame duration stability, video GOP (group of picture) size (number of frames by GOP, and by frame type), video GOP frame size, by frame type, by GOP, by frame numbersignalimage
: Signal image representation Draw an image from raw signal like audio wavformsnapshots
: Image snapshots Extract image snapshots (significant and strip) from media filereport
: HTML document report with file and signal stats, event detection, codecs, GOP stats...jsonreport
: JSON document report with the same informations as html reportffprobexml
: Media file headers on FFprobe XML
You can use several exports formats on one launch, like -f txt -f xml -f json
.
NB: exports formats like XML or JSON can produce very large files, which may take time to make, if want to use all filters/analysis scopes (up to 4 MB for a file less than 1 minute of media). It's not a problem for Mediadeepa, but it can be for you!
Getting started
Dependencies needed for run Mediadeepa
- Java/JRE/JDK 21+
- FFmpeg/FFprobe v5+ (v7+ highly recommended)
Declared on OS (Windows/Linux/macOS) PATH.
Get Linux application packages
Download the last application release, as a Linux RPM or DEB package, or as an executable JAR (autonomous fat JAR file), downloaded directly from GitHub releases page, and build at each releases.
Install/update with
# DEB file on Debian/Ubuntu Linux distribs
sudo dpkg -i mediadeepa-0.1.0.deb
# RPM file on RHEL/CentOS Linux distribs
sudo rpm -U mediadeepa-0.1.0.rpm
Remove with sudo dpkg -r mediadeepa
or rpm -e mediadeepa
.
After, on Linux, run mediadeepa [parameters]
, and man mediadeepa
for the internal doc man page.
Run simple JAR file
On Windows/macOS, just run java -jar mediadeepa-0.1.0.jar [options]
.
And simply run the application with java -jar mediadeepa-0.1.0.jar
.
Mediadeepa contain embedded help, displayed with the -h
parameter.
You can set the command line parameters with java -jar mediadeepa-0.1.0.jar [parameters]
.
Make a Java executable JAR file
You can build yourself a JAR, with Git and Maven.
Run on Linux/WSL/macOS, after setup Git and Maven:
git clone https://github.com/mediaexmachina/mediadeepa.git
cd mediadeepa
mvn install -DskipTests
Build jar will be founded on target
directory as mediadeepa-0.1.0.jar
Examples
Process to export
Export to the current directory the analysis report for the file videofile.mov
:
mediadeepa -i videofile.mov -f report -e .
Export to my Download
directory the analysis result, as MS Excel and graphic files, the media file videofile.mov
, only for audio and media container:
mediadeepa -i videofile.mov -c -f xlsx -f graphic -vn -e $HOME/Downloads
All available Export formats type are listed by:
mediadeepa -o
Import or Process to extract
Just:
mediadeepa -i videofile.mov --extract analysing-archive.zip
You can setup FFmpeg, like with import, like:
mediadeepa -i videofile.mov -c -an --extract analysing-archive.zip
Extracted (archive) ZIP file can be loaded simply by -i
:
mediadeepa -i analysing-archive.zip -f report -f graphic -e .
Multiple Import or Process
Add -i
options to works with multiple files, like:
mediadeepa -i analysing-archive.zip -i videofile.mov -i anotherfile.wav -f report -f graphic -e .
You can mix archive zip files and media files, but beware to not import with extract (zip to zip) or use single output file mode (--single-export
).
Directory scan to input files
With the same restrictions as Multiple Import or Process, you can use a directory with -i
parameter.
mediadeepa -i /some/directory -i /some/another/directory -f report -f graphic -e .
All non hidden founded files, not recursively (ignore the sub directories) will be used. You should use include/exclude parameter to manage the file selection criteria.
Use:
mediadeepa -i /some/directory --recursive --exclude-path never-this --include-ext ".mkv" -f report -f graphic -e .
To
- scan recursively
/some/directory
directory - with the
/some/directory/never-this/*
directory ignored - only for MKV files
More options are available.
Realities directory scan to input files
With the same options and restrictions as Directory scan to input files, just add --scan 10
to scan every 10 seconds all provided directories (simple -i
files will be processed on application starts), like:
mediadeepa -i /some/directory --scan 10 -f report -f graphic -e .
Stop the scans with a key-press, or just with CTRL+C
.
Load files to process from a text file
With the -il
, as input list option:
mediadeepa -if my-medias.txt -f report -f graphic -e .
And the my-medias.txt
file can just contain:
analysing-archive.zip
videofile.mov
anotherfile.wav
- Any space lines are ignored.
- Charset load respect the current OS session.
- You can use Windows and Linux new lines symbols (and you can mix them).
- You can accumulate multiple
-i
and-il
options, with the same limits as Multiple Import or Process. - Before starts the imports and processing, the application will check and throw an error if a file is missing (in
-i
,-il
, and in the lists itself).
You can read the FFmpeg filter documentation to know the behavior for each used filters, and the kind of returned values.
Command line options
Refer to the integrated command line help to get the full list.
Refer to FFmpeg documentation to have more details on the works of each filter, and on the expected values.
No option are mandatory ; all will be empty and let to the default values to FFmpeg.
General options
-h
,--help
Show the usage help-v
,--version
Show the application version-o
,--options
Show the avaliable options on this system--autocomplete
Show the autocomplete bash script for this application-i
,--input
FILE
, can be used multiple times, Input (source media or Mediadeepa archive) file or full directory to work with-il
,--input-list
TEXT_FILE_LIST
, can be used multiple times, Read input files from a text list--temp
DIRECTORY
Temp dir to use in the case of the needs to export to a temp file--verbose
Verbose mode-q
,--quiet
Quiet mode (don't log anyting, except errors)--log
LOG_FILE
Redirect all log messages to text file--graphic-jpg
Export to JPEG instead to PNG the produced graphic images
Specific options
Scan directory options
-r
,--recursive
Scan a directory and all its sub directory to work with--scan
SECONDS
Time, in seconds, between two regular scan of input directories, if applicable--include-ext
EXTENTION
, can be used multiple times, Only search files with this extention, during directory scan--exclude-ext
EXTENTION
, can be used multiple times, Ignore files with this extention, during directory scan--exclude-path
PATH
, can be used multiple times, Ignore files founded under this directory, during directory scan--include-file
FILE_NAME
, can be used multiple times, Only search files with this name (with willcards), during directory scan--include-dir
DIRECTORY_NAME
, can be used multiple times, Only search sub-directories with this name (with willcards), during directory scan--exclude-file
DIRECTORY_NAME
, can be used multiple times, Ignore files with this name (with willcards), during directory scan--exclude-dir
DIRECTORY_NAME
, can be used multiple times, Ignore sub-directories with this name (with willcards), during directory scan--include-hidden
Allow hidded files (and dot files), during directory scan--include-link
Allow symbolic links, during directory scan
Process media file options
-c
,--container
Do a container analysing (ffprobe streams)-t
DURATION
Duration of input file to proces it See https://ffmpeg.org/ffmpeg-utils.html#time-duration-syntax-ss
DURATION
Seek time in input file before to proces it See https://ffmpeg.org/ffmpeg-utils.html#time-duration-syntax-max
SECONDS
Max time let to process a file-fo
,--filter-only
FILTER
, can be used multiple times, Allow only this filter(s) to process (-o to get list)-fn
,--filter-no
FILTER
, can be used multiple times, Not use this filter(s) to process (-o to get list)-mn
,--media-no
Disable media analysing (ffmpeg)-wfn
,--wavform-no
Disable wavform measuring (ffmpeg)-snn
,--snapshot-no
Disable image snapshot extraction (ffmpeg)
Media type exclusive
-an
,--audio-no
, required, Ignore all video filters-vn
,--video-no
, required, Ignore all audio filters
Internal filters parameters
--filter-ebur128-target
DBFS
--filter-freeze-noisetolerance
DB
--filter-freeze-duration
SECONDS
--filter-idet-intl
THRESHOLD_FLOAT
--filter-idet-prog
THRESHOLD_FLOAT
--filter-idet-rep
THRESHOLD_FLOAT
--filter-idet-hl
FRAMES
--filter-crop-limit
INT
--filter-crop-round
INT
--filter-crop-skip
FRAMES
--filter-crop-reset
FRAMES
--filter-crop-low
INT
--filter-crop-high
INT
--filter-blur-low
THRESHOLD_FLOAT
--filter-blur-high
THRESHOLD_FLOAT
--filter-blur-radius
PIXELS
--filter-blur-block-pct
PERCENT
--filter-blur-block-width
PIXELS
--filter-blur-block-height
PIXELS
--filter-blur-planes
INDEX
--filter-block-period-min
INT
--filter-block-period-max
INT
--filter-block-planes
INDEX
--filter-black-duration
MILLISECONDS
--filter-black-ratio-th
THRESHOLD_FLOAT
--filter-black-th
THRESHOLD_FLOAT
--filter-aphase-tolerance
RATIO
--filter-aphase-angle
DEGREES
--filter-aphase-duration
MILLISECONDS
--filter-silence-noise
DBFS
--filter-silence-duration
SECONDS
Output options
Extract to archive
--extract
MEDIADEEPA_FILE
, required, Extract all raw ffmpeg datas to a Mediadeepa archive file
Export to generated files
-f
,--format
FORMAT_TYPE
, can be used multiple times, Format to export datas-e
,--export
DIRECTORY
Export datas to this directory--export-base-filename
FILENAME
Base file name for exported data file(s)
Single export option
--single-export
, required, Export only this file, as: "internal-file-name:outputfilename.ext" or "internal-file-name:-" to stdout
Limit the scope of analysis
By default, all analysis options and filters are activated in relation to your FFmpeg setup. Container analysis is still optional (via -c
).
Not all options are necessarily useful for everyone and all the time (like crop detect), the processing of certain filters can be very resource intensive (like SITI), and/or produce a large amount of data.
You can list all active filters with the -o
option, directly loaded from your current FFmpeg setup.
The description of each filter comes from the return of FFmpeg command.
And you can choose the analysis processing with these options:
--filter-only FILTER
and--filter-no FILTER
.--audio-no
,--video-no
and--media-no
.--container
The -e
parameter set the target export directory to put the produced files.
The --export-base-filename
set a base name, used like BASENAME-export-format-internal-name.extension
.
Single export option
With the help of --single-export
option, you can choose and select an unique file to export, without the need to select an export format, or a directory.
The use of --single-export
invalidate these options: -f/--format
, -e/--export
and --export-base-filename
.
It can be used with a media or ZIP archive input file.
All filter options behaves the same way as full export: you should disable some analyzing options if you don't need it. Like -vn
if you just want to export an audio related format.
Don't input (-i
) more than one file.
Single export option is not compatible with french CSVs, either with multiple image snapshot%d.jpg
.
Syntax
--single-export <internal-file-name>:<outputfilename.ext>
--single-export <internal-file-name>:-
With <internal-file-name>
, the internal app file name "linked" to a export format. See below the full list.
With <outputfilename.ext>
, the full path file to produce as result, or set -
to send the result to std out.
The
-
output option will silent log messages output in std out
Example:
--single-export audio-loudness:/home/me/lufs.png
Will produce an audio-loudness
graphic file on /home/me/lufs.png
file.
--single-export audio-loudness:-
Will produce and send the same file to std out, ready to be piped to another command.
For information,
graphic
export format files has no extension. By default, it export PNG files. Change this with--graphic-jpg
.
Here the full available internal files that you can use (CSV FR format can't be selected):
Values separated by tabs in text files (txt)
about.txt
audio-ebur128-summary.txt
audio-ebur128.txt
audio-phase-meter.txt
audio-stats.txt
container-audio-consts.txt
container-audio-frames.txt
container-packets.txt
container-video-consts.txt
container-video-frames.txt
container-video-gop.txt
events.txt
filters.txt
media-summary.txt
video-block-detect.txt
video-blur-detect.txt
video-crop-detect.txt
video-interlace-detect.txt
video-siti-ITU-T_P-910.txt
video-siti-stats-ITU-T_P-910.txt
Classic CSV files (csv)
about.csv
audio-ebur128-summary.csv
audio-ebur128.csv
audio-phase-meter.csv
audio-stats.csv
container-audio-consts.csv
container-audio-frames.csv
container-packets.csv
container-video-consts.csv
container-video-frames.csv
container-video-gop.csv
events.csv
filters.csv
media-summary.csv
video-block-detect.csv
video-blur-detect.csv
video-crop-detect.csv
video-interlace-detect.csv
video-siti-ITU-T_P-910.csv
video-siti-stats-ITU-T_P-910.csv
French flavor CSV files (csvfr)
about.csv
audio-ebur128-summary.csv
audio-ebur128.csv
audio-phase-meter.csv
audio-stats.csv
container-audio-consts.csv
container-audio-frames.csv
container-packets.csv
container-video-consts.csv
container-video-frames.csv
container-video-gop.csv
events.csv
filters.csv
media-summary.csv
video-block-detect.csv
video-blur-detect.csv
video-crop-detect.csv
video-interlace-detect.csv
video-siti-ITU-T_P-910.csv
video-siti-stats-ITU-T_P-910.csv
XML Document (xml)
media-datas.xml
JSON Document (json)
media-datas.json
XLSX Spreadsheet (xlsx)
media-datas.xlsx
SQLite database (sqlite)
media-datas.sqlite
Data graphical representation (graphic)
audio-bitrate
audio-dcoffset
audio-dynamic-range
audio-entropy
audio-flatness
audio-loudness
audio-loundness-truepeak
audio-noise-floor
audio-peak-level
audio-phase
audio-rms-level
events
video-bitrate
video-block
video-blur
video-crop
video-frame-duration
video-gop-count
video-gop-size
video-idet
video-siti
Signal image representation (signalimage)
waveform.png
Image snapshots (snapshots)
snapshot%d.jpg
snapshot.jpg
HTML document report (report)
report.html
JSON document report (jsonreport)
report.json
Media file headers on FFprobe XML (ffprobexml)
ffprobe.xml
Internal variables options
It's possible to configure additional options to define internal application variables.
To setup a variable (internally, an injected Spring Boot configuration, Mediadeepa will follow Spring Boot behaviors), you have several options.
Use a YAML or Properties file
See some documentation, and this.
Prepare your application.yaml | application.property
file with the wanted options, and inject it to the app like:
mediadeepa --spring.config.location=application.yaml -i videofile.mov -c -f xlsx [...]
Directly on command line
Simply with:
mediadeepa --mediadeepa.graphic-config.jpeg-compression-ratio=0.6 -i videofile.mov -c -f xlsx [...]
Available options
You can refer to this full list:
mediadeepa.add-source-ext-to-output-directories=false # boolean
mediadeepa.ffmpeg-exec-name=ffmpeg # String
mediadeepa.ffprobe-exec-name=ffprobe # String
mediadeepa.ffprobexml-file-name=ffprobe.xml # String
mediadeepa.graphic-config.a-bitrate-graphic-filename=audio-bitrate # String
mediadeepa.graphic-config.a-phase-graphic-filename=audio-phase # String
mediadeepa.graphic-config.block-graphic-filename=video-block # String
mediadeepa.graphic-config.blur-graphic-filename=video-blur # String
mediadeepa.graphic-config.crop-graphic-filename=video-crop # String
mediadeepa.graphic-config.dc-offset-graphic-filename=audio-dcoffset # String
mediadeepa.graphic-config.dynamic-range-graphic-filename=audio-dynamic-range # String
mediadeepa.graphic-config.entropy-graphic-filename=audio-entropy # String
mediadeepa.graphic-config.events-graphic-filename=events # String
mediadeepa.graphic-config.flatness-graphic-filename=audio-flatness # String
mediadeepa.graphic-config.gop-count-graphic-filename=video-gop-count # String
mediadeepa.graphic-config.gop-size-graphic-filename=video-gop-size # String
mediadeepa.graphic-config.image-size-full-size.height=1200.0 # double
mediadeepa.graphic-config.image-size-full-size.width=2000.0 # double
mediadeepa.graphic-config.image-size-half-size.height=600.0 # double
mediadeepa.graphic-config.image-size-half-size.width=2000.0 # double
mediadeepa.graphic-config.itet-graphic-filename=video-idet # String
mediadeepa.graphic-config.lufs-graphic-filename=audio-loudness # String
mediadeepa.graphic-config.lufs-t-p-k-graphic-filename=audio-loundness-truepeak # String
mediadeepa.graphic-config.noise-floor-graphic-filename=audio-noise-floor # String
mediadeepa.graphic-config.peak-level-graphic-filename=audio-peak-level # String
mediadeepa.graphic-config.rms-level-graphic-filename=audio-rms-level # String
mediadeepa.graphic-config.siti-graphic-filename=video-siti # String
mediadeepa.graphic-config.v-bitrate-graphic-filename=video-bitrate # String
mediadeepa.graphic-config.v-frame-duration-graphic-filename=video-frame-duration # String
mediadeepa.jpeg-compression-ratio=0.95 # float
mediadeepa.jsontable-file-name=media-datas.json # String
mediadeepa.logtofile-pattern=%d{ISO8601} %-5level %msg%n # String
mediadeepa.report-config.add-images=true # boolean
mediadeepa.report-config.display-image-size-width=1000 # int
mediadeepa.report-config.html-filename=report.html # String
mediadeepa.report-config.json-filename=report.json # String
mediadeepa.report-config.json-ident-output=true # boolean
mediadeepa.report-config.max-crop-events-display=20 # int
mediadeepa.scan-dir.depth-scan-directories=10 # int
mediadeepa.scan-dir.ignore-files=desktop.ini:.DS_Store:Thumbs.db # String
mediadeepa.scan-dir.min-fixed-state-time=500 # int
mediadeepa.scan-dir.retry-after-time-factor=10 # int
mediadeepa.silent-warn-mismatch-zip-archive-version=false # boolean
mediadeepa.snapshot-image-config.export-significant=true # boolean
mediadeepa.snapshot-image-config.search-best-frame-on-count=10 # int
mediadeepa.snapshot-image-config.significant-jpeg-filename=snapshot.jpg # String
mediadeepa.snapshot-image-config.strip-expected-count=8 # int
mediadeepa.snapshot-image-config.strip-jpeg-filename=snapshot%d.jpg # String
mediadeepa.sqllitetable-file-name=media-datas.sqlite # String
mediadeepa.wav-form-config.image-size.height=600.0 # double
mediadeepa.wav-form-config.image-size.width=2000.0 # double
mediadeepa.wav-form-config.png-filename=waveform.png # String
mediadeepa.xmltable-file-name=media-datas.xml # String
mediadeepa.xslxtable-file-name=media-datas.xlsx # String
mediadeepa.zipped-archive.command-line-json=commandline.json # String
mediadeepa.zipped-archive.container-xml=container.xml # String
mediadeepa.zipped-archive.ffmpeg-command-line-txt=ffmpeg-cmdline.txt # String
mediadeepa.zipped-archive.ffprobe-command-line-txt=ffprobe-cmdline.txt # String
mediadeepa.zipped-archive.ffprobe-xml=ffprobe.xml # String
mediadeepa.zipped-archive.filters-json=filters.json # String
mediadeepa.zipped-archive.image-snapshot-json=significant-image-snapshot.json # String
mediadeepa.zipped-archive.lavfi-txt-base=lavfi # String
mediadeepa.zipped-archive.measured-wav-json=waveform.json # String
mediadeepa.zipped-archive.significant-image-snapshot-jpg=significant-image-snapshot.jpg # String
mediadeepa.zipped-archive.source-name-txt=sourcename.txt # String
mediadeepa.zipped-archive.strip-image-snapshot-jpg=strip-image-snapshot.jpg # String
mediadeepa.zipped-archive.summary-txt=summary.txt # String
mediadeepa.zipped-archive.version-json=version.json # String
Logging
You can manage output logs with specific options, like --verbose
, -q
and --log
.
This application use internally Logback. The actual and default configuration XML file can be found on source code in src/main/resources/logback.xml
.
To inject a new logback configuration file, add in application command line:
-Dlogging.config="path/to/new/logback.xml"
For information, the use of --single-export
option to -
(std out) will cut all std out log messages, but you will stay able to send log messages to text file via --log
option.
Search path binaries
Mediadeepa can search on several paths to found ffmpeg
/ffmpeg.exe
and ffprobe
/ffprobe.exe
(sorted by search order):
- directly declared on command line by
-Dexecfinder.searchdir=c:\path1;c:\path2\subpath
on Windows or-Dexecfinder.searchdir=/path1:/path2/subpath
on Posix - on
$HOME
directory - on
$HOME/bin
directory, if exists - on
$HOME/App/bin
directory, if exists - on any classpath directory declared, if exists
- on the global
PATH
environment variable
Either on Linux/Posix and Windows.
You can inject other binary names (other than ffmpeg
/ffprobe
) with: mediadeepa.ffmpegExecName
and mediadeepa.ffprobeExecName
configuration keys. .exe
on Windows will be added/removed as needed by the application.
In summary, if FFmpeg/FFprobe is runnable from anywhere on your host (PATH
), you'll have nothing to do.
Application return
The application can produce several files, but return mostly processing status and log messages.
Return codes
0
: Ok/done2
: Error
Documentation, contributing and support
You can found some documentation:
- On the Mediadeepa website https://gh.mexm.media/mediadeepa
- On the project's README on GitHub.
- On the Mediadeepa command line interface.
- On the integrated app man page.
This documentation source is located on src/main/resources/doc/en
directory.
Send bug reports on GitHub project page
- Help with the documentation.
- Propose pull requests.
- Or just take time to test the application and report the experience.
If you have any questions, feel free to reach out via any contact method listed on https://mexm.media.
End-to-end automatic tests
In the project source repository, you will found some tools to end-to-ends (e2e) automatic tests, in order to check the application behavior with real video files.
These tests are optional during the run of classical automatic tests, and only concerns dev. operations.
To run classical automatic tests, just run a mvn test
.
To run e2e tests, you will need ffmpeg
and bash
:
- Create video tests files on
.demo-media-files
withbash create-demo-files.bash
(approx 230MB). - Optionally run
bash create-long-demo-file.bash
to create a big test video file. - Next, just run
mvn test
.
E2e tests take time. They will produce temp files in target
directory (e2e*
directories). A simple mvn clean
wipe them, else the e2e scripts can reuse old generated files and don't loose some time.
E2e tests deeply checks all produced data from the application.
Releases
On each git tag
, a GitHub Action will make a DEB and a RPM package on GitHub releases.
This Action use linux-springboot-packager to generate this files. Free feel to read this project documentation.
These packages are provided "as-it", as same for Mediadeepa. They are not signed.
Road-map
Some changes have been planned, like:
- Analyzing all audio streams, better MXF audio tracks and audio track management.
- Manage variable frame rate statistics (actually done, but need to be deeply checked to ensure the measure method is correct).
- Work on live streams, instead of just regular files.
- FFmpeg and FFprobe parallel executions.
- Content checking with automatic technical validation
And many others, I hope !
Auto-generated documentation
Bash-completion
The application provide a dynamic bash-completion script generated by:
java -jar target/mediadeepa-0.1.0.jar --autocomplete
Man page
An auto-generated man page can be produced by an internal option:
java -Dexportdocumentation.manpage="/full/path/to/file.man" -jar target/mediadeepa-0.1.0.jar
README page
Auto-generated by Mediadeepa, like the man page, and can be produced by the internal option:
java -Dexportdocumentation.readme="README.md" -jar target/mediadeepa-0.1.0.jar
All source text for documentation is either auto-generated by the internal application options and static markdown files in the src/main/resources/doc/en
directory.
Project web page
Auto-generated by Mediadeepa, like the man and README pages, and can be produced by the internal option:
java -Dexportdocumentation.website="docs/index.html" -jar target/mediadeepa-0.1.0.jar
Same method to generate this file, like README/man files does.
Acknowledgments
Mediadeepa would never have been possible without the help of these magnificent and amazing OSS projects:
And the tech stack:
- Java 21
- Spring Boot 3
- Picocli 4
- My
prodlib
andmedialib
utility libs. - Maven (see
pom.xml
for more information) - Open CSV
- Apache POI (poi-ooxml)
- SQLite JDBC
- Jackson
- jFreechart
- j2html
See THIRD-PARTY.txt file for more information on licenses and the full tech stack.