kala13x / libxmedia

Implementation of audio/video transmuxing library based on FFMPEG API

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

MIT License C/C++ CI CMake SMake

libxmedia

Implementation of audio/video transmuxing functionality based on FFMPEG API with a fully functional example.

Installation

There are several ways to build and install the project but at first, the libxutils library and the FFMPEG development packages must be installed on the system.

Using included script

After installing libxutils and ffpmeg 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> Specify Makefile generation tool or use included Makefile.
  • --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 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.

Using CMake

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 install

Using SMake

SMake 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 install

Using Makefile

The 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 install

XMedia

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.

Usage
xmedia [options]
Command-line 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

Video Scale Formats

  • stretch Stretch video frames to the given resolution
  • aspect Scale video frames and protect aspect ratio
Example
xmedia -i /dev/video0 -o dump.mp4 -v h264 -p yuv420p -x aspect -w 1280 -h 720

Timestamp Calculation Types

  • calculate Calculate TS based on the elapsed time and clock rate
  • compute Compute TS based on the sample rate and time base
  • rescale Rescale original TS using av_packet_rescale_ts()
  • round Rescale original TS and round to the nearest value
  • source Use original PTS from the source stream
Example
xmedia -i input.avi -o output.mp4 -t source

Metadata File Syntax

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.

Metadata File Example:

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
Example
xmedia -i file.mp4 -ro remuxed.mp4 -m meta.txt

About

Implementation of audio/video transmuxing library based on FFMPEG API

License:MIT License


Languages

Language:C 95.7%Language:Shell 2.2%Language:Makefile 1.1%Language:CMake 1.0%