A cross-platform library for audio/video transmuxing, built on FFmpeg. Designed for simplicity and performance, it provides an intuitive high-level API and includes a fully functional example.
There are several ways to build and install the project but at first, the libxutils library, FFMPEG and freetype development packages must be installed on the system.
After installing libxutils, ffpmeg and freetype libraries, the simplest way to build and install a project is to use the included script:
git clone https://github.com/kala13x/libxmedia.git && ./libxmedia/build.sh --installList options that build script supports:
--tool=<tool>SpecifyMakefilegeneration tool or use includedMakefile.--installInstall library and the tools after the build.--cleanupCleanup object files after build/installation.--exampleInclude example in the build.
You can either choose cmake, smake or make as the tool argument, but cmake is recommended on platforms other than the Linux.
If the tool will not be specified the script will use make (included Makefile) as default.
If you have a CMake tool installed in your operating system, here is how project can be built and installed using cmake:
git clone https://github.com/kala13x/libxmedia.git
cd libxmedia
cmake . && make
sudo make installSMake is a simple Makefile generator tool for the Linux/Unix operating systems:
git clone https://github.com/kala13x/libxmedia.git
cd libxmedia
smake && make
sudo make installThe project can also be built with a pre-generated Makefile for the Linux.
git clone https://github.com/kala13x/libxmedia.git
cd libxmedia
make
sudo make installxmedia is an example command-line tool for transcoding and remuxing media files. It allows you to convert and stream media from one format to another with various customization options.
xmedia [options]| Option | Syntax | Type | Description |
|---|---|---|---|
-i |
path | string | Input file or stream path |
-o |
path | string | Output file or stream path |
-e |
format | string | Input format name (example: v4l2) |
-f |
format | string | Output format name (example: mp4) |
-x |
format | string | Video scale format (example: aspect) |
-p |
format | string | Video pixel format (example: yuv420p) |
-s |
format | string | Audio sample format (example: s16p) |
-k |
num:den | number:number | Video frame rate (example: 90000:3000) |
-q |
number | number | Audio sample rate (example: 48000) |
-c |
count | number | Audio channel count (example: 2) |
-v |
codec | string | Output video codec (example: h264) |
-a |
codec | string | Output audio codec (example: mp3) |
-w |
width | number | Output video width (example: 1280) |
-h |
height | number | Output video height (example: 720) |
-b |
bytes | number | IO buffer size (default: 65536) |
-t |
type | string | Timestamp calculation type |
-m |
path | string | Metadata file path |
-n |
shift | number | Fix non-motion PTS/DTS |
-z |
Custom output handling | ||
-l |
Loop transcoding/remuxing | ||
-r |
Remux only | ||
-d |
Debug logs | ||
-u |
Usage information |
stretchStretch video frames to the given resolutionaspectScale video frames and protect aspect ratio
xmedia -i /dev/video0 -o dump.mp4 -v h264 -p yuv420p -x aspect -w 1280 -h 720calculateCalculate TS based on the elapsed time and clock ratecomputeCompute TS based on the sample rate and time baserescaleRescale original TS using av_packet_rescale_ts()roundRescale original TS and round to the nearest valuesourceUse original PTS from the source stream
xmedia -i input.avi -o output.mp4 -t sourceMetadata files allow you to specify additional information for your media. The syntax is as follows:
- If the line consists of three sections, it will be parsed as a chapter.
- If it consists of two sections, it will be parsed as metadata.
hh:mm:sstime format is used for chapter start/end time.
00:00:00|00:00:40|Opening chapter
00:00:40|00:10:32|Another chapter
00:10:32|00:15:00|Final chapter
Comment|Created with xmedia
Title|Example meta
Album|Examples
xmedia -i file.mp4 -ro remuxed.mp4 -m meta.txt