mp4-py を公開した
時雨堂では mp4-rust という Rust 製の MP4 ライブラリを GitHub で Apache-2.0 で公開しています。この Rust 製の MP4 ライブラリをベースに Python から利用できる MP4 ライブラリを公開したので、雑に書いて行きます。
mp4-rust
自社製品ではずっと WebM を採用していたのですが、H.265 が Chrome に実装されたりしたため、どうしても MP4 ライブラリが必要にないました。Erlang/OTP 版の MP4 ライブラリ(クローズド) を開発した後に、Rust 版を開発することにしました。
今回 Rust 版の MP4 を作るに当たって仕様書を購入し、しっかりと読み込んで開発をしました。ちなみに MP4 の仕様書なかなかいいお値段です。
mp4-rust は依存 0 で書かれています。さらに Sans I/O 対応です。そのうえ no_std に対応しており、組み込みでも利用できるようになっています。ここまでしっかり作り込んである MP4 ライブラリは少ないと思います。
さらに C API を生やすことで、 Rust 以外からも気軽に利用できるようになっています。
かなりしっかり作り込んでるので Rust で MP4 ライブラリが必要になったら使ってみてください。
mp4-py
mp4-rust の C API を利用して mp4-py は作られています。PyO3 を採用しなかったのは、もともと C API を利用する前提だったからです。他のプロジェクトでは Maturin を使ったりしています。
あくまで scikit-buld-core で CMake を利用してビルドするというシンプルな方法をとりました。
利用する場合は uv add mp4-py で行けます。
とても簡単に Python から MP4 を読み込んだりすることができるようになります。
import io
from mp4 import Mp4FileDemuxer
# ファイルパスから demuxer を作成
with Mp4FileDemuxer("input.mp4") as demuxer:
# サンプルを走査して処理
for sample in demuxer:
print(f"Sample: {sample.timestamp_seconds}s, keyframe={sample.keyframe}")
print(f"Data size: {len(sample.data)} bytes")
# バイナリストリームから demuxer を作成
with open("input.mp4", "rb") as fp:
demuxer = Mp4FileDemuxer(fp)
for sample in demuxer:
# サンプルを処理...
passもし Python で MP4 ライブラリが必要になったら使ってみてください。