A multimedia framework developed from scratch in C/C++, bundled with test programs and a neat media analyzer.

MiniVideo framework

Build Status Build status

MiniVideo is a multimedia framework developed from scratch in C/C++, bundled with small testing programs and a neat media analyser.
MiniVideo has been tested with several CPU architectures (x86, SH4, MIPS, ARM).
The project uses a dual CMake/QMake build system (CMake is prefered though). Both library and test programs can be installed into your system.

MiniVideo has been initially developed in 2010/2011 during an internship I did in a French company called httv, as a small video decoding library developed from scratch in C. Its goal was to generate video thumbnails, with a source code easy to read and to understand for learning purpose. After a clean-up pass, the code has been published early 2014 with httv permission under the LGPL v3 license (video framework) and GPLv3 (test softwares).

The minivideo library can:

  • Open video files with various container to demux and remux audios/videos content.
  • Open H.264 compressed videos and decode/export intra-coded pictures.
  • Extract various metadata from container and elementary streams.
  • Map exact container structure to xml file / GUI.

Supported video codec (decoding)

  • H.264 / MPEG-4 part 10 "Advance Video Coding"
    • I frames only...
    • please note that at still a few bugs inside CABAC decoding process being worked on...

Supported container formats (import modules)

  • AVI [.avi]
  • WAVE [.wav]
  • ASF [.asf, .wma, .wmv]
  • MKV [.mkv, .webm, ...]
  • MP4 / MOV (ISOM container) [.mp4, .mov, .3gp, ...]
  • MPEG-PS (MPEG "Program Stream") [.mpg, .mpeg, .vob, ...]
  • MPEG-1/2 "elementary stream" [.mpg, .mpeg]
  • H.264 / H.265 "elementary stream" ("Annex B" format) [.264, .265]
  • MP3 "elementary stream" [.mp3]

Supported container formats (export modules)

  • Elementary Streams

Supported picture formats (output modules)

  • jpeg (internal OR when libjpeg support is available)
  • png (internal OR when libpng support is available)
  • webp (when libwebp support is available)
  • bmp
  • tiff
  • tga

Building minivideo library

$ cd minivideo/build/
$ cmake ..
$ make -j$(grep -c ^processor /proc/cpuinfo)

You can change several build options directly into the "minivideo/CMakeLists.txt" file, or you can tune CMake by adding extra arguments to the cmake call:

-DCMAKE_BUILD_TYPE=Release/Debug
-DCMAKE_BUILD_Mode=Dynamic/Static
-DCMAKE_TOOLCHAIN_FILE=../cmake/toolchains/xxx.cmake
-DCMAKE_INSTALL_PREFIX=/usr/bin

Installation into the system, available for root user:

$ su
$ make install # system installation, need root user

Generating online documentation with Doxygen

$ cd minivideo/doc/
$ ./generate_doxygen.sh

Open "minivideo/doc/doxygen.html" with your favorite browser.

Generating error report with cppcheck

$ cd minivideo/doc/
$ ./generate_cppcheck.sh

Open "minivideo/doc/cppcheck.html" with your favorite browser.

Building MiniVideo's testing softwares

Do not forget "FindLibMiniVideo.cmake" directory in the cmake/modules/, which defines how to find the library (libminivideoframework.so file) and its header (minivideoframework.h file).
In case of problem, it may be necessary to manually indicate the paths of these files.

$ cd mini_analyser/
$ qmake
$ make
$ cd mini_extractor/build/
$ cmake ..
$ make
$ cd mini_thumbnailer/build/
$ cmake ..
$ make

Installation into the system, available for root user with both testing softwares:

$ su
$ make install # system installation, need root user

Using mini_analyser

$ cd mini_analyser/build/
$ ./mini_analyser

Then drag and drop files to analyse them!

Using mini_extractor

$ cd mini_extractor/build/
$ ./mini_extractor -i 'myfilepath' [-o 'mydirectory'] [-a nb_tracks] [-v nb_tracks]

Command line arguments:

-h : print help
-i : path to the input video
-o : path to the output folder, where extracted streams will be saved
-a : maximum number of audio stream(s) to extract
-v : maximum number of video stream(s) to extract

Using mini_thumbnailer

$ cd mini_thumbnailer/build/
$ ./mini_thumbnailer -i 'myfilepath' [-o 'mydirectory'] [-f picture_format] [-q picture_quality] [-n picture_number] [-m picture_extractionmode]

Command line arguments:

-h : print help
-i : path to the input video
-o : path to the output folder, where generated thumbnails will be saved
-f : export format for the thumbnails (can be 'webp' 'jpg' 'png' 'bmp' 'tga' 'yuv420' 'yuv444')
-q : thumbnail quality (1 to 100 range)
-n : number of thumbnail to generate (1 to 999 range)
-m : extraction mode for the thumbnails (can be 'unfiltered', 'ordered' or 'distributed')

Similar Resources

Creating sepia, reflection, grayscale, and blur filters from scratch and returns a modified image

image-filter Created sepia, reflection, grayscale, and blur filters from scratch and returning a modified image Directories: images: contains sample i

Oct 14, 2021

Template library and blog that explain how JSI modules are built from scratch in React Native

react-native-jsi-template This is an example library that explains how anyone can build jsi modules from scratch in React Native. This code is written

Dec 17, 2022

🎮 Plants vs. Zombies multiplayer battle, developed via reverse engineering, inline hook and dynamic-link library injection. Two online players defend and attack as the plant side and zombie side respectively.

🎮 Plants vs. Zombies multiplayer battle, developed via reverse engineering, inline hook and dynamic-link library injection. Two online players defend and attack as the plant side and zombie side respectively.

Plants vs. Zombies Online Battle This project has two original repositories: https://github.com/czs108/Plants-vs.-Zombies-Online-Battle https://github

Oct 14, 2021

A simple Unix like operating system from scratch.

A simple Unix like operating system from scratch.

HOS-x86 an x86 operating system written from scratch How to Build? Currently you need NASM, GCC and QEMU to build the image file. Install the packages

Feb 7, 2021

This is the source code of SATCH a SAT solver written from scratch in C.

The main purpose of this solver is to provide a simple and clean code base for explaining and experimenting with SAT solvers. It is simpler than the source code of CaDiCaL and of Kissat in particular, while still featuring most important implementation techniques needed to obtain a state-of-the-art SAT solver

Dec 16, 2022

This is an experimental OS-from-scratch project. Just for demonstration, not useful at all.

This is an experimental OS-from-scratch project. Just for demonstration, not useful at all.

OS Playground This is an experimental OS-from-scratch project. Just for demonstration, not useful at all. Different from OS in other projects, this OS

Nov 5, 2022

A unix operating system made from scratch using c++

A unix operating system made from scratch using c++

pranaos A unix operating system made from scratch using c++ Dependencies g++ version should be more than 10.0.0 ninja gcc compiler needed prana os is

Nov 9, 2022

My first os built from scratch

Kernel project My first os built from scratch Contributors are welcome LICENSE TODO GDT IDT PS2 Keyboard PS2 Mouse PIT RTC Initrd Drawing on framebuff

Dec 25, 2022

Developing a Drone from scratch in ROS Gazebo

Developing a Drone from scratch in ROS Gazebo

Project Building a drone and developing its control system. Table of Contents Project Table of Contents About The Project Tech Stack File Structure Ge

Oct 17, 2022
Comments
  • Information request: h264 i-frame conversion

    Information request: h264 i-frame conversion

    Thank you for sharing your project. I'm trying to use it to convert an h264 raw stream to a bitmap image. The stream is a sequence of 3 nalu: SPS, PPS and IDR (0x67, 0x68 and 0x65).

    The API sequence I'm trying is the following:

    minivideo_open
    minivideo_parse
    minivideo_decode_frame
    minivideo_destroy_frame
    minivideo_close
    

    Is it correct? Could you help me please?

  •  mini_analyser - qt

    mini_analyser - qt

    Does QT need to be installed to build mini_analyser? I installed QT community version and tried to build mini_analyser but I get the error: Could not find app bundle "bin/mini_analyser.app"

Several GX2 test programs to compare it with OpenGL. (With additional GLFW+OpenGL implementation provided)

GX2-Tests Provided are GX2 test programs and samples for comparison with OpenGL and with additional GLFW+OpenGL implementation for test on PC. These s

Nov 15, 2021
Using a RP2040 Pico as a basic logic analyzer, exporting CSV data to read in sigrok / Pulseview

rp2040-logic-analyzer This project modified the PIO logic analyzer example that that was part of the Raspberry Pi Pico examples. The example now allow

Dec 29, 2022
Simple Stepper Motor Analyzer
 Simple Stepper Motor Analyzer

A DYI stepper motor analyzer. This is a new design that is based on Raspberry Pi Pico and users a compact single PCB design. NOTE: The legacy STM32 based stepper analyzer was moved to this repository https://github.com/zapta/legacy_stepper_motor_analyzer.

Jan 1, 2023
Small Extremely Powerful Header Only C++ Lexical Analyzer/String Parser Library
Small Extremely Powerful Header Only C++ Lexical Analyzer/String Parser Library

lexpp Small Extremely Powerful Header Only C++ Lexical Analyzer/String Parser Library Lexpp is made with simplicity and size in mind. The entire libra

Jun 21, 2022
NAND (JEDEC / ONFI) Analyzer for Saleae Logic
NAND (JEDEC / ONFI) Analyzer for Saleae Logic

NandAnalyzer NAND (JEDEC / ONFI) Analyzer for Saleae Logic The plugin was only tested against NV-DDR3 traces (and I use the term "test" lightly). You

Dec 12, 2022
This is the Arduino® compatible port of the AIfES machine learning framework, developed and maintained by Fraunhofer Institute for Microelectronic Circuits and Systems.

AIfES for Arduino® AIfES (Artificial Intelligence for Embedded Systems) is a platform-independent and standalone AI software framework optimized for e

Jan 4, 2023
Flutter-Clock-and-Reminder-App - a highly functional clock and reminder app developed on flutter framework.

clock_app A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started if thi

Aug 4, 2022
An efficient, small mobile key-value storage framework developed by WeChat. Works on Android, iOS, macOS, Windows, and POSIX.
An efficient, small mobile key-value storage framework developed by WeChat. Works on Android, iOS, macOS, Windows, and POSIX.

中文版本请参看这里 MMKV is an efficient, small, easy-to-use mobile key-value storage framework used in the WeChat application. It's currently available on Andr

Jan 8, 2023
Interface between the Artery V2X Simulation Framework and DuT (Device under Test).

INFM HIL Interface Interface between the Artery V2X Simulation Framework and DuT (Device under Test). The Interface should support standards like: CAN

Aug 24, 2022
Plex media server local privilige escalation poc - CVE-2021-42835

Local Privilege PlEXcalasion - CVE-2021-42835 Plex Media Server for Windows prior to version 1.25.0.5282, vulnerable to Time Of Check Time Of Use (TOC

May 24, 2022