Split MP4 files into multiple clips from a CSV segment list.
Project description
mp4_splitter
Command-line utility for splitting MP4 files into multiple clips based on a CSV segment list.
Requirements
- Python 3.10.12 or newer
ffmpegavailable on yourPATH
Installation
pip install mp4sp
# or, inside this repository
uv sync
uv run mp4sp --help
Preparing the segment list
Create a UTF-8 CSV file with the columns filename, start, and end. Timestamps can be in HH:MM:SS[.mmm] format.
filename,start,end
test.mp4,00:00:01.000,00:00:05.167
test.mp4,00:00:05.168,00:00:10.000
test.mp4,00:00:10.001,00:01:03.000
another.mp4,12,24
filenameis resolved relative to the input directory you pass via--input.- Each row produces an output file named
<original>_cut_<index>.mp4. - Pure numbers in
start/endare treated as seconds, soanother.mp4,12,24means “take another.mp4 from 12s to 24s,” yielding a 12-second clip. - If you pass a single file to
--input, ensure thefilenamecolumn matches that file name; all other rows are skipped automatically.
Usage
- Place the source videos under an input folder (or point directly at a single
.mp4file), e.g.videos/. - Create the CSV file as described above, e.g.
split_list.csv. - Run the CLI:
mp4sp \
--input videos \
--output clips \
--csv split_list.csv \
--threads 8 \
--safe
Options
--input / -i: Directory containing the source MP4 files (required). You may also pass a single.mp4file path, in which case rows for other files are ignored and only that file is processed.--output / -o: Directory in which the clips will be written (required; created if missing).--csv / -c: Path to the CSV file with segment definitions (required).--threads / -t: Number of parallel splits to run. Defaults to 4.--safe / -s: Re-encode each clip to avoid artifacts (slower but frame-accurate).
Set --safe when you need artifact-free cuts or when cutting from formats where keyframes are sparse. Omit it for the fastest stream-copy mode.
Example from source checkout
uv run mp4sp \
-i samples/input \
-o samples/output \
-c split_list.csv \
-t 4 \
-s
Upon completion the tool logs progress for each clip and finishes with All tasks completed.. The resulting files reside in the output directory.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mp4sp-1.0.3.tar.gz.
File metadata
- Download URL: mp4sp-1.0.3.tar.gz
- Upload date:
- Size: 7.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.9 {"installer":{"name":"uv","version":"0.9.9"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6f9199b9358511732107f78bed3289e6b4ce38a58a5bfa11164c3214c0e3224f
|
|
| MD5 |
8d644e09e8bc1cf6fe9ca029f70ca07c
|
|
| BLAKE2b-256 |
b7e73f85509fe2a51f210d63fd0cae4e1f797de630dd533b169dc68843bf6e1f
|
File details
Details for the file mp4sp-1.0.3-py3-none-any.whl.
File metadata
- Download URL: mp4sp-1.0.3-py3-none-any.whl
- Upload date:
- Size: 5.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.9 {"installer":{"name":"uv","version":"0.9.9"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0f6ffd4fd123212f90d311ce7983e30d972f88668539931fc7ff73df9e60a9bd
|
|
| MD5 |
00ced18d3bfb45d2f47193cef3782b1a
|
|
| BLAKE2b-256 |
3dfa8083a60b5d9addcd23090cb4d66b95d1ffb7107550570d3af4a31d6a7662
|