https://github.com/kmsquire/split_video
Split and recode an mp4 video into evenly sized chunks.
https://github.com/kmsquire/split_video
Last synced: 9 months ago
JSON representation
Split and recode an mp4 video into evenly sized chunks.
- Host: GitHub
- URL: https://github.com/kmsquire/split_video
- Owner: kmsquire
- License: mit
- Created: 2015-07-22T23:51:51.000Z (almost 11 years ago)
- Default Branch: master
- Last Pushed: 2015-07-25T22:30:40.000Z (almost 11 years ago)
- Last Synced: 2025-03-31T05:03:23.445Z (over 1 year ago)
- Language: C
- Size: 133 KB
- Stars: 13
- Watchers: 4
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
split_video
===========
Split and recode an mp4 video into evenly sized chunks.
Usage:
./split_video [--gop-size 30] [--chunk-size 120] [--skip 123]
[--length 1200] input_file output_template
where
--gop-size is the size of a group of pictures
--chunk-size is the size of a chunk in frames
--skip are the number of frames to skip at the
beginning of the input file
--length are the number of frames to encode
Example:
./split_video --gop-size 25 --chunk-size 100 myfile.mp4 chunks/%05d.mp4
will split a video into chunks of size 100, with I-frames every 25 frames.
Notes
=====
ffmpeg itself has been adding functionality for chunking video in recent versions.
For an input file at 25 fps, the following command almost produces 120 frame chunks:
ffmpeg -i input.mp4 -f segment -segment_time 4.8 \
-segment_format_options movflags=+faststart \
-force_key_frames '"expr:eq(mod(n,30),0)"' \
-vcodec h264 -pix_fmt yuv420p \
-crf 18 \
-flags +global_header \
chunks/%05d.mp4
However, I found that occasionally, 119 or 121 frame chunks would be produced, and
for my needs, I wanted all chunks to be exactly 120 frames. So I wrote this tool.
Caveats
=======
1. audio information is not preserved
2. only tested on mp4 files, and makes some mp4 specific assumptions
3. assumes fixed frame rate encoding
4. only outputs I and P frames (no B frames)
The code could also use some cleanup, but it works for my use case.
Future Work
===========
I have no plans to extend this right now, but I'll gladly accept pull requests
which update the code. Possible extensions
* include audio
* generalize to other video codecs, variable rate encoding
* for mp4, output B frames
Sources
=======
Based on [ffmpeg sample code](https://www.ffmpeg.org/doxygen/2.7/examples.html).
BSD-style license (see License.txt).