Merge pull request #679 from Mbucari/master
Mp3 embedded cuesheet and raw metadata
This commit is contained in:
commit
668cd7dba8
@ -81,14 +81,7 @@ namespace AaxDecrypter
|
|||||||
AaxFile.AppleTags.AppleListBox.EditOrAddFreeformTag(tagDomain, "PART", part.ToString());
|
AaxFile.AppleTags.AppleListBox.EditOrAddFreeformTag(tagDomain, "PART", part.ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
//Finishing configuring lame encoder.
|
OnInitialized();
|
||||||
if (DownloadOptions.OutputFormat == OutputFormat.Mp3)
|
|
||||||
MpegUtil.ConfigureLameOptions(
|
|
||||||
AaxFile,
|
|
||||||
DownloadOptions.LameConfig,
|
|
||||||
DownloadOptions.Downsample,
|
|
||||||
DownloadOptions.MatchSourceBitrate);
|
|
||||||
|
|
||||||
OnRetrievedTitle(AaxFile.AppleTags.TitleSansUnabridged);
|
OnRetrievedTitle(AaxFile.AppleTags.TitleSansUnabridged);
|
||||||
OnRetrievedAuthors(AaxFile.AppleTags.FirstAuthor ?? "[unknown]");
|
OnRetrievedAuthors(AaxFile.AppleTags.FirstAuthor ?? "[unknown]");
|
||||||
OnRetrievedNarrators(AaxFile.AppleTags.Narrator ?? "[unknown]");
|
OnRetrievedNarrators(AaxFile.AppleTags.Narrator ?? "[unknown]");
|
||||||
@ -98,5 +91,7 @@ namespace AaxDecrypter
|
|||||||
|
|
||||||
return !IsCanceled;
|
return !IsCanceled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected virtual void OnInitialized() { }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -21,6 +21,18 @@ namespace AaxDecrypter
|
|||||||
AsyncSteps["Step 3: Download Clips and Bookmarks"] = Step_DownloadClipsBookmarksAsync;
|
AsyncSteps["Step 3: Download Clips and Bookmarks"] = Step_DownloadClipsBookmarksAsync;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override void OnInitialized()
|
||||||
|
{
|
||||||
|
//Finishing configuring lame encoder.
|
||||||
|
if (DownloadOptions.OutputFormat == OutputFormat.Mp3)
|
||||||
|
MpegUtil.ConfigureLameOptions(
|
||||||
|
AaxFile,
|
||||||
|
DownloadOptions.LameConfig,
|
||||||
|
DownloadOptions.Downsample,
|
||||||
|
DownloadOptions.MatchSourceBitrate,
|
||||||
|
chapters: null);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
https://github.com/rmcrackan/Libation/pull/127#issuecomment-939088489
|
https://github.com/rmcrackan/Libation/pull/127#issuecomment-939088489
|
||||||
|
|
||||||
|
|||||||
@ -3,7 +3,6 @@ using AAXClean.Codecs;
|
|||||||
using Dinah.Core.Net.Http;
|
using Dinah.Core.Net.Http;
|
||||||
using FileManager;
|
using FileManager;
|
||||||
using System;
|
using System;
|
||||||
using System.Diagnostics;
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
@ -26,6 +25,18 @@ namespace AaxDecrypter
|
|||||||
AsyncSteps[$"Step {step++}: Create Cue"] = Step_CreateCueAsync;
|
AsyncSteps[$"Step {step++}: Create Cue"] = Step_CreateCueAsync;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override void OnInitialized()
|
||||||
|
{
|
||||||
|
//Finishing configuring lame encoder.
|
||||||
|
if (DownloadOptions.OutputFormat == OutputFormat.Mp3)
|
||||||
|
MpegUtil.ConfigureLameOptions(
|
||||||
|
AaxFile,
|
||||||
|
DownloadOptions.LameConfig,
|
||||||
|
DownloadOptions.Downsample,
|
||||||
|
DownloadOptions.MatchSourceBitrate,
|
||||||
|
DownloadOptions.ChapterInfo);
|
||||||
|
}
|
||||||
|
|
||||||
protected async override Task<bool> Step_DownloadAndDecryptAudiobookAsync()
|
protected async override Task<bool> Step_DownloadAndDecryptAudiobookAsync()
|
||||||
{
|
{
|
||||||
FileUtility.SaferDelete(OutputFileName);
|
FileUtility.SaferDelete(OutputFileName);
|
||||||
|
|||||||
@ -8,7 +8,12 @@ namespace AaxDecrypter
|
|||||||
public static class MpegUtil
|
public static class MpegUtil
|
||||||
{
|
{
|
||||||
private const string TagDomain = "com.pilabor.tone";
|
private const string TagDomain = "com.pilabor.tone";
|
||||||
public static void ConfigureLameOptions(Mp4File mp4File, LameConfig lameConfig, bool downsample, bool matchSourceBitrate)
|
public static void ConfigureLameOptions(
|
||||||
|
Mp4File mp4File,
|
||||||
|
LameConfig lameConfig,
|
||||||
|
bool downsample,
|
||||||
|
bool matchSourceBitrate,
|
||||||
|
ChapterInfo chapters)
|
||||||
{
|
{
|
||||||
double bitrateMultiple = 1;
|
double bitrateMultiple = 1;
|
||||||
|
|
||||||
@ -53,6 +58,12 @@ namespace AaxDecrypter
|
|||||||
|
|
||||||
if (mp4File.AppleTags.AppleListBox.GetFreeformTagString(TagDomain, "PART") is string part)
|
if (mp4File.AppleTags.AppleListBox.GetFreeformTagString(TagDomain, "PART") is string part)
|
||||||
lameConfig.ID3.UserDefinedText.Add("PART", part);
|
lameConfig.ID3.UserDefinedText.Add("PART", part);
|
||||||
|
|
||||||
|
if (chapters?.Count > 0)
|
||||||
|
{
|
||||||
|
var cue = Cue.CreateContents(lameConfig.ID3.Title + ".mp3", chapters);
|
||||||
|
lameConfig.ID3.UserDefinedText.Add("CUESHEET", cue);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -51,18 +51,19 @@ namespace FileLiberator
|
|||||||
|
|
||||||
var config = Configuration.Instance;
|
var config = Configuration.Instance;
|
||||||
var lameConfig = GetLameOptions(config);
|
var lameConfig = GetLameOptions(config);
|
||||||
|
var chapters = m4bBook.GetChaptersFromMetadata();
|
||||||
//Finishing configuring lame encoder.
|
//Finishing configuring lame encoder.
|
||||||
AaxDecrypter.MpegUtil.ConfigureLameOptions(
|
AaxDecrypter.MpegUtil.ConfigureLameOptions(
|
||||||
m4bBook,
|
m4bBook,
|
||||||
lameConfig,
|
lameConfig,
|
||||||
config.LameDownsampleMono,
|
config.LameDownsampleMono,
|
||||||
config.LameMatchSourceBR);
|
config.LameMatchSourceBR,
|
||||||
|
chapters);
|
||||||
|
|
||||||
using var mp3File = File.OpenWrite(Path.GetTempFileName());
|
using var mp3File = File.Open(Path.GetTempFileName(), FileMode.OpenOrCreate, FileAccess.ReadWrite);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Mp4Operation = m4bBook.ConvertToMp3Async(mp3File, lameConfig);
|
Mp4Operation = m4bBook.ConvertToMp3Async(mp3File, lameConfig, chapters);
|
||||||
Mp4Operation.ConversionProgressUpdate += M4bBook_ConversionProgressUpdate;
|
Mp4Operation.ConversionProgressUpdate += M4bBook_ConversionProgressUpdate;
|
||||||
await Mp4Operation;
|
await Mp4Operation;
|
||||||
|
|
||||||
|
|||||||
@ -160,21 +160,16 @@ namespace FileLiberator
|
|||||||
{
|
{
|
||||||
var metadataFile = Templates.File.GetFilename(dlOptions.LibraryBookDto, Path.GetDirectoryName(outFileName), ".metadata.json");
|
var metadataFile = Templates.File.GetFilename(dlOptions.LibraryBookDto, Path.GetDirectoryName(outFileName), ".metadata.json");
|
||||||
|
|
||||||
saveMetadata(libraryBook, contentLic.ContentMetadata, metadataFile);
|
var item = await api.GetCatalogProductAsync(libraryBook.Book.AudibleProductId, AudibleApi.CatalogOptions.ResponseGroupOptions.ALL_OPTIONS);
|
||||||
|
item.SourceJson.Add(nameof(ContentMetadata.ChapterInfo), Newtonsoft.Json.Linq.JObject.FromObject(contentLic.ContentMetadata.ChapterInfo));
|
||||||
|
item.SourceJson.Add(nameof(ContentMetadata.ContentReference), Newtonsoft.Json.Linq.JObject.FromObject(contentLic.ContentMetadata.ContentReference));
|
||||||
|
|
||||||
|
File.WriteAllText(metadataFile, item.SourceJson.ToString());
|
||||||
|
OnFileCreated(libraryBook, metadataFile);
|
||||||
}
|
}
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void saveMetadata(LibraryBook libraryBook, ContentMetadata contentMetadata, string fileName)
|
|
||||||
{
|
|
||||||
var export = Newtonsoft.Json.Linq.JObject.FromObject(LibToDtos.ToDtos(new[] { libraryBook })[0]);
|
|
||||||
export.Add(nameof(contentMetadata.ChapterInfo), Newtonsoft.Json.Linq.JObject.FromObject(contentMetadata.ChapterInfo));
|
|
||||||
export.Add(nameof(contentMetadata.ContentReference), Newtonsoft.Json.Linq.JObject.FromObject(contentMetadata.ContentReference));
|
|
||||||
|
|
||||||
File.WriteAllText(fileName, export.ToString());
|
|
||||||
OnFileCreated(libraryBook, fileName);
|
|
||||||
}
|
|
||||||
|
|
||||||
private DownloadOptions BuildDownloadOptions(LibraryBook libraryBook, Configuration config, ContentLicense contentLic)
|
private DownloadOptions BuildDownloadOptions(LibraryBook libraryBook, Configuration config, ContentLicense contentLic)
|
||||||
{
|
{
|
||||||
//If DrmType != Adrm the delivered file is an unencrypted mp3.
|
//If DrmType != Adrm the delivered file is an unencrypted mp3.
|
||||||
|
|||||||
@ -428,9 +428,9 @@
|
|||||||
//
|
//
|
||||||
// applyDisplaySettingsBtn
|
// applyDisplaySettingsBtn
|
||||||
//
|
//
|
||||||
applyDisplaySettingsBtn.Location = new System.Drawing.Point(698, 34);
|
applyDisplaySettingsBtn.Location = new System.Drawing.Point(689, 26);
|
||||||
applyDisplaySettingsBtn.Name = "applyDisplaySettingsBtn";
|
applyDisplaySettingsBtn.Name = "applyDisplaySettingsBtn";
|
||||||
applyDisplaySettingsBtn.Size = new System.Drawing.Size(140, 23);
|
applyDisplaySettingsBtn.Size = new System.Drawing.Size(148, 34);
|
||||||
applyDisplaySettingsBtn.TabIndex = 9;
|
applyDisplaySettingsBtn.TabIndex = 9;
|
||||||
applyDisplaySettingsBtn.Text = "Apply Display Settings";
|
applyDisplaySettingsBtn.Text = "Apply Display Settings";
|
||||||
applyDisplaySettingsBtn.UseVisualStyleBackColor = true;
|
applyDisplaySettingsBtn.UseVisualStyleBackColor = true;
|
||||||
|
|||||||
2
Source/LibationWinForms/Form1.Designer.cs
generated
2
Source/LibationWinForms/Form1.Designer.cs
generated
@ -316,7 +316,7 @@
|
|||||||
this.scanningToolStripMenuItem.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right;
|
this.scanningToolStripMenuItem.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right;
|
||||||
this.scanningToolStripMenuItem.Enabled = false;
|
this.scanningToolStripMenuItem.Enabled = false;
|
||||||
this.scanningToolStripMenuItem.Image = global::LibationWinForms.Properties.Resources.import_16x16;
|
this.scanningToolStripMenuItem.Image = global::LibationWinForms.Properties.Resources.import_16x16;
|
||||||
this.scanningToolStripMenuItem.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.SizeToFit;
|
this.scanningToolStripMenuItem.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;
|
||||||
this.scanningToolStripMenuItem.Name = "scanningToolStripMenuItem";
|
this.scanningToolStripMenuItem.Name = "scanningToolStripMenuItem";
|
||||||
this.scanningToolStripMenuItem.Size = new System.Drawing.Size(93, 20);
|
this.scanningToolStripMenuItem.Size = new System.Drawing.Size(93, 20);
|
||||||
this.scanningToolStripMenuItem.Text = "Scanning...";
|
this.scanningToolStripMenuItem.Text = "Scanning...";
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user