- Notifications
You must be signed in to change notification settings - Fork0
Implementation of audio/video transmuxing library based on FFMPEG API
License
kala13x/libxmedia
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
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, thelibxutils library and theFFMPEG
development packages must be installed on the system.
After installinglibxutils
andffpmeg
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 --install
List options that build script supports:
--tool=<tool>
SpecifyMakefile
generation tool or use includedMakefile
.--install
Install library and the tools after the build.--cleanup
Cleanup object files after build/installation.--example
Include example in the build.
You can either choosecmake
,smake
ormake
as the tool argument, butcmake
is recommended on platforms other than the Linux.If the tool will not be specified the script will usemake
(included Makefile) as default.
If you have aCMake
tool installed in your operating system, here is how project can be built and installed usingcmake
:
git clone https://github.com/kala13x/libxmedia.gitcd libxmediacmake.&& makesudo make install
SMake is a simple Makefile generator tool for the Linux/Unix operating systems:
git clone https://github.com/kala13x/libxmedia.gitcd libxmediasmake&& makesudo make install
The project can also be built with a pre-generatedMakefile
for the Linux.
git clone https://github.com/kala13x/libxmedia.gitcd libxmediamakesudo make install
xmedia
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 | num:den | number:number | Video frame rate (example: 90000:3000) |
-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 |
stretch
Stretch video frames to the given resolutionaspect
Scale video frames and protect aspect ratio
xmedia -i /dev/video0 -o dump.mp4 -v h264 -p yuv420p -x aspect -w 1280 -h 720
calculate
Calculate TS based on the elapsed time and clock ratecompute
Compute TS based on the sample rate and time baserescale
Rescale original TS using av_packet_rescale_ts()round
Rescale original TS and round to the nearest valuesource
Use original PTS from the source stream
xmedia -i input.avi -o output.mp4 -tsource
Metadata 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:ss
time format is used for chapter start/end time.
00:00:00|00:00:40|Opening chapter00:00:40|00:10:32|Another chapter00:10:32|00:15:00|Final chapterComment|Created with xmediaTitle|Example metaAlbum|Examples
xmedia -i file.mp4 -ro remuxed.mp4 -m meta.txt