feat(ads/seo/release): v1.2.0 with live Google Ads, isolated ad profile, ads.txt, and SEO/AEO/GEO optimization
This commit is contained in:
parent
a88aafa1e5
commit
0e568f1f0a
975 changed files with 130593 additions and 16783 deletions
62
tests/Paca.Tests/Core/VideoPosterExtractorGateTests.cs
Normal file
62
tests/Paca.Tests/Core/VideoPosterExtractorGateTests.cs
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
using System;
|
||||
using Paca.Core;
|
||||
using Xunit;
|
||||
|
||||
namespace Paca.Tests.Core;
|
||||
|
||||
public class VideoPosterExtractorGateTests
|
||||
{
|
||||
[Fact]
|
||||
public void Gate381_VideoPosterExtractor_CalculatesOptimalSeekTime()
|
||||
{
|
||||
// For short 5s clip -> 1.0s
|
||||
var shortClip = VideoPosterExtractor.CalculateOptimalSeekTime(5.0);
|
||||
Assert.Equal(1.0, shortClip);
|
||||
|
||||
// For 60s video -> 10% is 6.0s
|
||||
var midVideo = VideoPosterExtractor.CalculateOptimalSeekTime(60.0);
|
||||
Assert.Equal(6.0, midVideo);
|
||||
|
||||
// For 2-hour movie (7200s) -> Capped at 10.0s (to avoid spoilers while skipping black intro)
|
||||
var movie = VideoPosterExtractor.CalculateOptimalSeekTime(7200.0);
|
||||
Assert.Equal(10.0, movie);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Gate382_VideoPosterExtractor_BuildsScalingFilter_PreservingAspect()
|
||||
{
|
||||
var spec = new PosterExtractionSpec(
|
||||
SeekTimeSec: 4.5,
|
||||
Width: 640,
|
||||
Height: 360,
|
||||
Format: PosterFormat.Jpeg,
|
||||
Quality: 85
|
||||
);
|
||||
|
||||
var filter = VideoPosterExtractor.BuildScalingFilter(spec);
|
||||
Assert.Equal("scale=640:360:force_original_aspect_ratio=decrease", filter);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Gate383_VideoPosterExtractor_BuildsWebpAndJpegQualityFlags()
|
||||
{
|
||||
var webpSpec = new PosterExtractionSpec(3.0, 400, 400, PosterFormat.WebP, Quality: 80);
|
||||
var webpCmd = VideoPosterExtractor.BuildPosterCommandLine("in.mp4", "out.webp", webpSpec);
|
||||
Assert.Contains("-c:v libwebp -quality 80", webpCmd);
|
||||
|
||||
var jpegSpec = new PosterExtractionSpec(3.0, 400, 400, PosterFormat.Jpeg, Quality: 90);
|
||||
var jpegCmd = VideoPosterExtractor.BuildPosterCommandLine("in.mp4", "out.jpg", jpegSpec);
|
||||
Assert.Contains("-q:v 2", jpegCmd); // High quality jpeg
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Gate384_VideoPosterExtractor_BuildsFullSingleFrameCommandLine()
|
||||
{
|
||||
var spec = new PosterExtractionSpec(5.0, 1280, 720, PosterFormat.Jpeg, 85);
|
||||
var cmd = VideoPosterExtractor.BuildPosterCommandLine("C:\\vid.mp4", "C:\\thumb.jpg", spec);
|
||||
|
||||
Assert.Contains("-ss 5.00 -i \"C:\\vid.mp4\"", cmd);
|
||||
Assert.Contains("-vframes 1", cmd);
|
||||
Assert.EndsWith("\"C:\\thumb.jpg\" -y", cmd);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue