55 lines
No EOL
2.1 KiB
C#
55 lines
No EOL
2.1 KiB
C#
using System;
|
|
using Paca.Core;
|
|
using Xunit;
|
|
|
|
namespace Paca.Tests.Core;
|
|
|
|
public class MediaBitrateEstimatorGateTests
|
|
{
|
|
[Fact]
|
|
public void Gate425_MediaBitrateEstimator_CalculatesTargetBitrates_Accurately()
|
|
{
|
|
// 100s, 25MB target, 128k audio, 3% container overhead
|
|
long targetBytes = 25L * 1024 * 1024;
|
|
var result = MediaBitrateEstimator.CalculateBitrate(100.0, targetBytes, audioBitrateKbps: 128, overheadPercent: 3.0);
|
|
|
|
Assert.True(result.IsPossible);
|
|
Assert.InRange(result.VideoBitrateKbps, 1850, 1950);
|
|
Assert.Equal(128, result.AudioBitrateKbps);
|
|
}
|
|
|
|
[Fact]
|
|
public void Gate426_MediaBitrateEstimator_HandlesImpossibleConstraint_Gracefully()
|
|
{
|
|
// 1000s, 1MB target (impossible with 128k audio)
|
|
long targetBytes = 1L * 1024 * 1024;
|
|
var result = MediaBitrateEstimator.CalculateBitrate(1000.0, targetBytes, audioBitrateKbps: 128);
|
|
|
|
Assert.False(result.IsPossible);
|
|
Assert.True(result.VideoBitrateKbps <= 64); // Fallback minimum
|
|
}
|
|
|
|
[Fact]
|
|
public void Gate427_MediaBitrateEstimator_ProvidesPlatformPresets()
|
|
{
|
|
Assert.Equal(25L * 1024 * 1024, MediaBitrateEstimator.GetPlatformLimitBytes(TargetPlatformLimit.DiscordFree));
|
|
Assert.Equal(16L * 1024 * 1024, MediaBitrateEstimator.GetPlatformLimitBytes(TargetPlatformLimit.WhatsAppVideo));
|
|
Assert.Equal(20L * 1024 * 1024, MediaBitrateEstimator.GetPlatformLimitBytes(TargetPlatformLimit.EmailAttachment));
|
|
}
|
|
|
|
[Fact]
|
|
public void Gate428_MediaBitrateEstimator_BuildsTwoPassFfmpegCommands()
|
|
{
|
|
var plan = new BitrateEstimationResult(true, 1800, 128, 25L * 1024 * 1024);
|
|
var (pass1, pass2) = MediaBitrateEstimator.BuildTwoPassCommands("in.mp4", "out.mp4", plan);
|
|
|
|
Assert.Contains("-b:v 1800k", pass1);
|
|
Assert.Contains("-pass 1", pass1);
|
|
Assert.Contains("-an", pass1);
|
|
|
|
Assert.Contains("-b:v 1800k", pass2);
|
|
Assert.Contains("-pass 2", pass2);
|
|
Assert.Contains("-b:a 128k", pass2);
|
|
Assert.Contains("\"out.mp4\"", pass2);
|
|
}
|
|
} |