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
101
tests/Paca.Tests/Core/MultiTrackMediaMuxerGateTests.cs
Normal file
101
tests/Paca.Tests/Core/MultiTrackMediaMuxerGateTests.cs
Normal file
|
|
@ -0,0 +1,101 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Paca.Core;
|
||||
using Xunit;
|
||||
|
||||
namespace Paca.Tests.Core;
|
||||
|
||||
public class MultiTrackMediaMuxerGateTests
|
||||
{
|
||||
[Fact]
|
||||
public void Gate377_MultiTrackMediaMuxer_MapsMultipleAudioTracks_Correctly()
|
||||
{
|
||||
var job = new MuxJobSpecification
|
||||
{
|
||||
VideoTrack = new TrackSpec("C:\\media\\video.mp4", "copy"),
|
||||
AudioTracks = new List<TrackSpec>
|
||||
{
|
||||
new("C:\\media\\audio_kor.m4a", "copy", Language: "kor", Title: "한국어 더빙", IsDefault: true),
|
||||
new("C:\\media\\audio_eng.m4a", "copy", Language: "eng", Title: "English Original", IsDefault: false)
|
||||
},
|
||||
OutputPath = "C:\\media\\output_multitrack.mkv"
|
||||
};
|
||||
|
||||
var cmd = MultiTrackMediaMuxer.BuildMuxCommandLine(job);
|
||||
|
||||
Assert.Contains("-i \"C:\\media\\video.mp4\"", cmd);
|
||||
Assert.Contains("-i \"C:\\media\\audio_kor.m4a\"", cmd);
|
||||
Assert.Contains("-i \"C:\\media\\audio_eng.m4a\"", cmd);
|
||||
Assert.Contains("-map 0:v:0", cmd);
|
||||
Assert.Contains("-map 1:a:0", cmd);
|
||||
Assert.Contains("-map 2:a:0", cmd);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Gate378_MultiTrackMediaMuxer_InjectsAudioMetadataTags()
|
||||
{
|
||||
var job = new MuxJobSpecification
|
||||
{
|
||||
VideoTrack = new TrackSpec("video.mp4", "copy"),
|
||||
AudioTracks = new List<TrackSpec>
|
||||
{
|
||||
new("audio_kor.m4a", "copy", "kor", "한국어 더빙", true),
|
||||
new("audio_eng.m4a", "copy", "eng", "English Original", false)
|
||||
},
|
||||
OutputPath = "output.mkv"
|
||||
};
|
||||
|
||||
var cmd = MultiTrackMediaMuxer.BuildMuxCommandLine(job);
|
||||
|
||||
Assert.Contains("-metadata:s:a:0 language=kor", cmd);
|
||||
Assert.Contains("-metadata:s:a:0 title=\"한국어 더빙\"", cmd);
|
||||
Assert.Contains("-metadata:s:a:1 language=eng", cmd);
|
||||
Assert.Contains("-metadata:s:a:1 title=\"English Original\"", cmd);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Gate379_MultiTrackMediaMuxer_SetsDefaultDisposition_ForPrimaryTrack()
|
||||
{
|
||||
var job = new MuxJobSpecification
|
||||
{
|
||||
VideoTrack = new TrackSpec("video.mp4", "copy"),
|
||||
AudioTracks = new List<TrackSpec>
|
||||
{
|
||||
new("audio_kor.m4a", "copy", "kor", "한국어", true),
|
||||
new("audio_eng.m4a", "copy", "eng", "English", false)
|
||||
},
|
||||
OutputPath = "output.mkv"
|
||||
};
|
||||
|
||||
var cmd = MultiTrackMediaMuxer.BuildMuxCommandLine(job);
|
||||
|
||||
Assert.Contains("-disposition:a:0 default", cmd);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Gate380_MultiTrackMediaMuxer_IncludesSubtitlesAndBuildsFullCommand()
|
||||
{
|
||||
var job = new MuxJobSpecification
|
||||
{
|
||||
VideoTrack = new TrackSpec("C:\\in\\video.mp4", "copy"),
|
||||
AudioTracks = new List<TrackSpec>
|
||||
{
|
||||
new("C:\\in\\audio.aac", "copy", "kor", "Main Audio", true)
|
||||
},
|
||||
SubtitleTracks = new List<TrackSpec>
|
||||
{
|
||||
new("C:\\in\\subs_kr.srt", "copy", "kor", "한국어 자막", true)
|
||||
},
|
||||
OutputPath = "C:\\out\\final.mkv"
|
||||
};
|
||||
|
||||
var cmd = MultiTrackMediaMuxer.BuildMuxCommandLine(job);
|
||||
|
||||
Assert.Contains("-i \"C:\\in\\subs_kr.srt\"", cmd);
|
||||
Assert.Contains("-map 2:s:0", cmd);
|
||||
Assert.Contains("-metadata:s:s:0 language=kor", cmd);
|
||||
Assert.Contains("-metadata:s:s:0 title=\"한국어 자막\"", cmd);
|
||||
Assert.Contains("-c copy", cmd);
|
||||
Assert.EndsWith("\"C:\\out\\final.mkv\" -y", cmd);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue