tagging problem?
This commit is contained in:
parent
319f49b709
commit
09a0f9e020
2 changed files with 36 additions and 21 deletions
|
@ -13,6 +13,7 @@ import org.openaudible.util.queues.IQueueJob;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
import java.nio.file.Files;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
@ -29,6 +30,7 @@ public class ConvertJob implements IQueueJob, LineListener {
|
||||||
private IProgressTask progress;
|
private IProgressTask progress;
|
||||||
final String duration;
|
final String duration;
|
||||||
final static int mp3Qscale = 6; // audio quality value 0 to 9. See https://trac.ffmpeg.org/wiki/Encode/MP3
|
final static int mp3Qscale = 6; // audio quality value 0 to 9. See https://trac.ffmpeg.org/wiki/Encode/MP3
|
||||||
|
static boolean addAdditionalTags = true;
|
||||||
|
|
||||||
public ConvertJob(Book b) {
|
public ConvertJob(Book b) {
|
||||||
book = b;
|
book = b;
|
||||||
|
@ -207,13 +209,19 @@ public class ConvertJob implements IQueueJob, LineListener {
|
||||||
|
|
||||||
|
|
||||||
public void tagMP3() throws Exception {
|
public void tagMP3() throws Exception {
|
||||||
TagMP3AudioBook.setMP3Tags(book, temp, image);
|
|
||||||
|
if (addAdditionalTags)
|
||||||
|
TagMP3AudioBook.setMP3Tags(book, temp, image);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void renameMP3() throws IOException {
|
public void renameMP3() throws IOException {
|
||||||
boolean ok = temp.renameTo(mp3);
|
boolean ok = temp.renameTo(mp3);
|
||||||
if (!ok) {
|
if (!ok) {
|
||||||
throw new IOException("Error renaming: " + temp.getAbsolutePath() + " to " + mp3.getAbsolutePath());
|
mp3.delete();
|
||||||
|
Files.copy(temp.toPath(), mp3.toPath());
|
||||||
|
temp.delete();
|
||||||
|
if (!mp3.exists())
|
||||||
|
throw new IOException("Error renaming: " + temp.getAbsolutePath() + " size ["+temp.length()+"] to " + mp3.getAbsolutePath()+" mp3 exists="+mp3.exists());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -235,6 +243,7 @@ public class ConvertJob implements IQueueJob, LineListener {
|
||||||
if (progress != null)
|
if (progress != null)
|
||||||
progress.setTask(null, "Complete");
|
progress.setTask(null, "Complete");
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
LOG.error("Error converting book:"+book, e);
|
||||||
if (progress != null) {
|
if (progress != null) {
|
||||||
progress.setSubTask(e.getMessage());
|
progress.setSubTask(e.getMessage());
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,29 +33,35 @@ public class TagMP3AudioBook {
|
||||||
// replaces any existing mp3 tags with new tags from the book meta data.
|
// replaces any existing mp3 tags with new tags from the book meta data.
|
||||||
public static void setMP3Tags(Book book, File bookMP3File, File imageFile) throws Exception {
|
public static void setMP3Tags(Book book, File bookMP3File, File imageFile) throws Exception {
|
||||||
MP3File mp3file = new MP3File(bookMP3File.getAbsolutePath());
|
MP3File mp3file = new MP3File(bookMP3File.getAbsolutePath());
|
||||||
ID3v24Tag tag = new ID3v24Tag();
|
try {
|
||||||
mp3file.setID3v2Tag(tag);
|
ID3v24Tag tag = new ID3v24Tag();
|
||||||
|
mp3file.setID3v2Tag(tag);
|
||||||
|
|
||||||
tag.addField(tag.createField(ID3v24FieldKey.GENRE, book.getGenre()));
|
tag.addField(tag.createField(ID3v24FieldKey.GENRE, book.getGenre()));
|
||||||
tag.addField(tag.createField(ID3v24FieldKey.ARTIST, book.getAuthor()));
|
tag.addField(tag.createField(ID3v24FieldKey.ARTIST, book.getAuthor()));
|
||||||
tag.addField(tag.createField(ID3v24FieldKey.COMPOSER, book.getNarratedBy()));
|
tag.addField(tag.createField(ID3v24FieldKey.COMPOSER, book.getNarratedBy()));
|
||||||
tag.addField(tag.createField(ID3v24FieldKey.TITLE, book.getFullTitle()));
|
tag.addField(tag.createField(ID3v24FieldKey.TITLE, book.getFullTitle()));
|
||||||
tag.addField(tag.createField(ID3v24FieldKey.AMAZON_ID, book.getAsin()));
|
tag.addField(tag.createField(ID3v24FieldKey.AMAZON_ID, book.getAsin()));
|
||||||
tag.addField(tag.createField(ID3v24FieldKey.URL_OFFICIAL_RELEASE_SITE, "https://www.audible.com" + book.getInfoLink()));
|
tag.addField(tag.createField(ID3v24FieldKey.URL_OFFICIAL_RELEASE_SITE, "https://www.audible.com" + book.getInfoLink()));
|
||||||
tag.addField(tag.createField(ID3v24FieldKey.RECORD_LABEL, book.getPublisher()));
|
tag.addField(tag.createField(ID3v24FieldKey.RECORD_LABEL, book.getPublisher()));
|
||||||
tag.addField(tag.createField(ID3v24FieldKey.COMMENT, book.getSummary()));
|
tag.addField(tag.createField(ID3v24FieldKey.COMMENT, book.getSummary()));
|
||||||
tag.addField(tag.createField(ID3v24FieldKey.CATALOG_NO, book.getProduct_id()));
|
tag.addField(tag.createField(ID3v24FieldKey.CATALOG_NO, book.getProduct_id()));
|
||||||
tag.addField(tag.createField(ID3v24FieldKey.ENCODER, book.getCopyright()));
|
tag.addField(tag.createField(ID3v24FieldKey.ENCODER, book.getCopyright()));
|
||||||
|
|
||||||
tag.addField(tag.createField(ID3v24FieldKey.ALBUM, book.getShortTitle()));
|
tag.addField(tag.createField(ID3v24FieldKey.ALBUM, book.getShortTitle()));
|
||||||
tag.addField(tag.createField(ID3v24FieldKey.YEAR, AudibleUtils.getYear(book)));
|
tag.addField(tag.createField(ID3v24FieldKey.YEAR, AudibleUtils.getYear(book)));
|
||||||
|
|
||||||
|
if (imageFile.exists()) {
|
||||||
|
byte imageBytes[] = Files.readAllBytes(Paths.get(imageFile.getAbsolutePath()));
|
||||||
|
tag.addField(tag.createArtworkField(imageBytes, "image/jpeg"));
|
||||||
|
}
|
||||||
|
|
||||||
|
mp3file.commit();
|
||||||
|
mp3file.save();
|
||||||
|
} catch(Throwable th)
|
||||||
|
{
|
||||||
|
|
||||||
if (imageFile.exists()) {
|
|
||||||
byte imageBytes[] = Files.readAllBytes(Paths.get(imageFile.getAbsolutePath()));
|
|
||||||
tag.addField(tag.createArtworkField(imageBytes, "image/jpeg"));
|
|
||||||
}
|
}
|
||||||
mp3file.commit();
|
|
||||||
mp3file.save();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void debugTags(File f) throws CannotReadException, IOException, TagException, ReadOnlyFileException, InvalidAudioFrameException {
|
public static void debugTags(File f) throws CannotReadException, IOException, TagException, ReadOnlyFileException, InvalidAudioFrameException {
|
||||||
|
|
Loading…
Reference in a new issue