Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/lieff/minih264
Minimalistic H264/SVC encoder single header library
https://github.com/lieff/minih264
codec encoder encoding h264 h264-svc mini minimal single-header single-header-lib svc video video-codec x264
Last synced: 6 days ago
JSON representation
Minimalistic H264/SVC encoder single header library
- Host: GitHub
- URL: https://github.com/lieff/minih264
- Owner: lieff
- License: cc0-1.0
- Created: 2018-09-20T19:18:46.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2020-12-10T15:56:51.000Z (about 4 years ago)
- Last Synced: 2025-01-06T00:08:04.760Z (13 days ago)
- Topics: codec, encoder, encoding, h264, h264-svc, mini, minimal, single-header, single-header-lib, svc, video, video-codec, x264
- Language: C
- Size: 29.5 MB
- Stars: 539
- Watchers: 27
- Forks: 53
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- AwesomeCppGameDev - minih264
README
minih264
==========[![Build Status](https://travis-ci.org/lieff/minih264.svg)](https://travis-ci.org/lieff/minih264)
Small, but yet reasonably fast H264/SVC encoder single-header library with SSE/NEON optimizations.
Decoder can be popped up in future.Disclaimer: code highly experimental.
## Comparison with [x264](https://www.videolan.org/developers/x264.html)
Rough comparison with x264 on an i7-6700K:
`x264 -I 30 --profile baseline --preset veryfast --tune zerolatency -b 0 -r 1 --qp 33 --ipratio 1.0 --qcomp 1.0 -o x264.264 --fps 30 vectors/foreman.cif --input-res 352x288 --slices 1 --threads 1`
vs
`./h264enc_x64 vectors/foreman.cif`
| x264 | minih264 |
| ------------ | -------- |
| source: ~4.6mb | 409kb |
| binary: 1.2mb | 100kb |
| time: 0,282s | 0,503s |
| out size: 320kb | 391kb |PSNR:
```
x264: PSNR y:32.774824 u:38.874450 v:39.926132 average:34.084281 min:31.842667 max:36.630286
minih264: PSNR y:33.321686 u:38.858879 v:39.955914 average:34.574459 min:32.389171 max:37.174073
```First intra frame screenshot (left-to-right: original 152064, minih264 5067, x264 5297 bytes):
![Intra screenshot](images/intra.png?raw=true)
You can compare results in motion using ffplay/mpv players on vectors/out_ref.264 and vectors/x264.264 .
## Usage
TBD
## SVC
Minih264 supports both spatial and temporal layers. Spatial layers are almost same as encode 2 independent AVC streams except for Intra frames prediction.
Following diagram shows minih264 SVC scheme for two spatial layers:![SVC diargam](images/svc.png?raw=true)
That's because P frames spatial prediction are almost useless in practice. But for Intra frames there is a ~20% benefit in full resolution frame size.
Note that decoder must have both base layer I frame _and_ full resolution SVC I frame to decode whole sequence of next P frames in full resolution.## Limitations
The following major features are not supported compared to x264 (baseline):
* Trellis quantization.
* Select prediction mode using Sum of Absolute Transform Differences (SATD).
* 4x4 motion compensation.## Interesting links
* https://www.videolan.org/developers/x264.html
* https://www.openh264.org/
* https://github.com/cisco/openh264
* http://iphome.hhi.de/suehring/tml/
* https://github.com/oneam/h264bsd
* https://github.com/fhunleth/hollowcore-h264
* https://github.com/digetx/h264_decoder
* https://github.com/lspbeyond/p264decoder
* https://github.com/jcasal-homer/HomerHEVC
* https://github.com/ultravideo/kvazaar
* https://github.com/neocoretechs/h264j
* https://github.com/jcodec/jcodec