| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- """M11 抽帧测试:用 ffmpeg 生成测试视频,验证 extract_frames 产出帧卡片。
- 无 ffmpeg 时自动跳过(CI/本地可能没装)。
- """
- from __future__ import annotations
- import shutil
- import subprocess
- from pathlib import Path
- import pytest
- def _ffmpeg() -> str | None:
- try:
- import imageio_ffmpeg
- return imageio_ffmpeg.get_ffmpeg_exe()
- except Exception:
- return shutil.which("ffmpeg")
- FF = _ffmpeg()
- @pytest.mark.skipif(not FF, reason="ffmpeg 不可用")
- def test_extract_frames_from_generated_clip(tmp_path):
- from creation_knowledge.integrations.video_frames import extract_frames
- from core.models import Card
- clip = tmp_path / "clip.mp4"
- subprocess.run(
- [FF, "-y", "-f", "lavfi", "-i",
- "testsrc=duration=6:size=320x240:rate=10", str(clip)],
- capture_output=True,
- )
- assert clip.exists()
- cards = extract_frames(str(clip), out_dir=str(tmp_path / "f"),
- url_prefix="/frames/x", max_frames=8)
- assert len(cards) >= 1
- assert all(isinstance(c, Card) and c.kind == "frame" for c in cards)
- assert all(c.url.startswith("/frames/x/") for c in cards)
- # 帧文件确实生成
- assert all((tmp_path / "f" / Path(c.url).name).exists() for c in cards)
- # 1-based 连续索引
- assert [c.index for c in cards] == list(range(1, len(cards) + 1))
|