feat(video): add VideoPipeline, VideoFormatOption, and InputFormat.VIDEO#3768
Open
Itsxenonli wants to merge 42 commits into
Open
feat(video): add VideoPipeline, VideoFormatOption, and InputFormat.VIDEO#3768Itsxenonli wants to merge 42 commits into
Itsxenonli wants to merge 42 commits into
Conversation
Add InputFormat.VIDEO with extensions [mp4, avi, mov, mkv, webm] and video MIME types, moved out of InputFormat.AUDIO. Add VideoFormatOption and register it in DocumentConverter. Add VideoPipeline that extracts audio via ffmpeg, transcribes via the shared ASR transcriber, samples frames using FixedIntervalFrameSampler or SimpleSceneChangeFrameSampler, and merges transcript + frames by timestamp into a DoclingDocument. Add VideoFrameSamplingMode enum and VideoPipelineOptions. 33 routing tests pass. Signed-off-by: itsxenonli <bekas.nikolaoszug@gmail.com>
Contributor
|
✅ DCO Check Passed Thanks @Itsxenonli, all your commits are properly signed off. 🎉 |
Contributor
Merge Protections🟢 Merge protection satisfied — ready to merge. Show 1 satisfied protection🟢 Enforce conventional commitMake sure that we follow https://www.conventionalcommits.org/en/v1.0.0/
|
Codecov Report❌ Patch coverage is 📢 Thoughts on this report? Let us know! |
…dation Signed-off-by: itsxenonli <bekas.nikolaoszug@gmail.com>
…video_document_to_html Signed-off-by: itsxenonli <bekas.nikolaoszug@gmail.com>
Signed-off-by: itsxenonli <bekas.nikolaoszug@gmail.com>
… sharpness scoring Replace SimpleSceneChangeFrameSampler fixed threshold with scipy find_peaks prominence-based local peak detection. Self-calibrates per video, no manual threshold config needed. Add sharpness scoring via Laplacian variance to pick the sharpest keyframe per scene, avoiding motion-blurred frames during pans. Update VideoPipelineOptions to use scene_change_prominence instead of scene_change_threshold. Signed-off-by: itsxenonli <bekas.nikolaoszug@gmail.com>
Signed-off-by: itsxenonli <bekas.nikolaoszug@gmail.com>
Signed-off-by: itsxenonli <bekas.nikolaoszug@gmail.com>
…ction Signed-off-by: itsxenonli <bekas.nikolaoszug@gmail.com>
Signed-off-by: itsxenonli <bekas.nikolaoszug@gmail.com>
Signed-off-by: itsxenonli <bekas.nikolaoszug@gmail.com>
Signed-off-by: itsxenonli <bekas.nikolaoszug@gmail.com>
Signed-off-by: itsxenonli <bekas.nikolaoszug@gmail.com>
Signed-off-by: itsxenonli <bekas.nikolaoszug@gmail.com>
…-interval, --video-cuts-per-minute, --video-prominence Signed-off-by: itsxenonli <bekas.nikolaoszug@gmail.com>
Signed-off-by: itsxenonli <bekas.nikolaoszug@gmail.com>
Signed-off-by: itsxenonli <bekas.nikolaoszug@gmail.com>
…-help hint Signed-off-by: itsxenonli <bekas.nikolaoszug@gmail.com>
2e492b2 to
f298e02
Compare
…r count Signed-off-by: itsxenonli <bekas.nikolaoszug@gmail.com>
Signed-off-by: itsxenonli <bekas.nikolaoszug@gmail.com>
Signed-off-by: itsxenonli <bekas.nikolaoszug@gmail.com>
Signed-off-by: itsxenonli <bekas.nikolaoszug@gmail.com>
Signed-off-by: Nikolaos Bekas <bekas.nikolaoszug@gmail.com>
…n flag Signed-off-by: Nikolaos Bekas <bekas.nikolaoszug@gmail.com>
Signed-off-by: itsxenonli <bekas.nikolaoszug@gmail.com>
Signed-off-by: itsxenonli <bekas.nikolaoszug@gmail.com>
Signed-off-by: itsxenonli <bekas.nikolaoszug@gmail.com>
…d webrtcvad deadlock after Whisper Signed-off-by: Nikolaos Bekas <bekas.nikolaoszug@gmail.com>
…ly set Signed-off-by: Nikolaos Bekas <bekas.nikolaoszug@gmail.com>
PeterStaar-IBM
requested changes
Jul 10, 2026
…xporter Signed-off-by: itsxenonli <bekas.nikolaoszug@gmail.com>
Signed-off-by: itsxenonli <bekas.nikolaoszug@gmail.com>
Signed-off-by: itsxenonli <bekas.nikolaoszug@gmail.com>
…led by docling-core serializer) Signed-off-by: itsxenonli <bekas.nikolaoszug@gmail.com>
Signed-off-by: itsxenonli <bekas.nikolaoszug@gmail.com>
Signed-off-by: itsxenonli <bekas.nikolaoszug@gmail.com>
Signed-off-by: itsxenonli <bekas.nikolaoszug@gmail.com>
Signed-off-by: Itsxenonli <bekas.nikolaoszug@gmail.com>
Signed-off-by: Itsxenonli <bekas.nikolaoszug@gmail.com>
ceberam
requested changes
Jul 14, 2026
Comment on lines
+28
to
+30
| def test_input_format_video_exists(): | ||
| assert hasattr(InputFormat, "VIDEO") | ||
| assert InputFormat.VIDEO.value == "video" |
Member
There was a problem hiding this comment.
This is a trivially self-validating test. Some more meaningful routing tests, like the MIME parametrized checks, are fine but the trivial ones, like this one, should be removed.
Co-authored-by: Cesar Berrospi Ramis <75900930+ceberam@users.noreply.github.com> Signed-off-by: Nikolaos Bekas <bekas.nikolaoszug@gmail.com>
Signed-off-by: Itsxenonli <bekas.nikolaoszug@gmail.com>
Signed-off-by: Itsxenonli <bekas.nikolaoszug@gmail.com>
Signed-off-by: Itsxenonli <bekas.nikolaoszug@gmail.com>
Signed-off-by: Itsxenonli <bekas.nikolaoszug@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Add InputFormat.VIDEO with extensions [mp4, avi, mov, mkv, webm] and video MIME types, moved out of InputFormat.AUDIO. Add VideoFormatOption and register it in DocumentConverter. Add VideoPipeline that extracts audio via ffmpeg, transcribes via the shared ASR transcriber, samples frames using FixedIntervalFrameSampler or SimpleSceneChangeFrameSampler, and merges transcript + frames by timestamp into a DoclingDocument. Add VideoFrameSamplingMode enum and VideoPipelineOptions.
33 routing tests pass.
Checklist: