@@ -1483,7 +1483,7 @@ private void detectSilenceChapterParallel (Book.Part part, string filestub) {
14831483 ProgressInfo . ProgressInfoChapterCancel ( book . TitleTag , ch )
14841484 } ) ) ) {
14851485
1486- string filename = $ "{ filestub } - { part . PartNumber } . { i } { ext } ";
1486+ string filename = $ "{ filestub } - { part . ChapterId ( chapter ) } { ext } ";
14871487 chapter . TmpFileName = Path . Combine ( TempDirectoryLong , filename ) ;
14881488
14891489 // Extract chapter to temp file
@@ -1695,10 +1695,26 @@ private bool transcodeTrackMulti (Book.Part part, Track track, string inFile, FF
16951695 string actcode = null ;
16961696 if ( withActivationCode )
16971697 actcode = part . ActivationCode ;
1698+ if ( Settings . ConvFormat == EConvFormat . mp3 )
1699+ return transcodeTrackMultiWithChapter ( part , track , inFile , modifiers , actcode , threadProg ) ;
1700+ else
1701+ return transcodeTrackMulti ( part , track , inFile , modifiers , actcode , threadProg ) ;
1702+ }
1703+
1704+ private bool transcodeTrackMultiWithChapter ( Book . Part part , Track track , string inFile , FFmpeg . ETranscode modifiers , string actcode , ThreadProgress threadProg ) {
1705+ string metafile = ffmpegChapters ( part , track ) ;
1706+ if ( metafile is null )
1707+ return false ;
1708+
1709+ FFmpeg ffmpeg = new FFmpeg ( inFile , metafile ) {
1710+ Cancel = Callbacks . Cancel ,
1711+ Progress = threadProg . Report
1712+ } ;
16981713
1699- return transcodeTrackMulti ( part , track , inFile , modifiers , actcode , threadProg ) ;
1714+ return transcodeTrack ( ffmpeg , modifiers , actcode , track . Time , track . FileName ) ;
17001715 }
17011716
1717+
17021718 private bool transcodeTrackMulti ( Book . Part part , Track track , string inFile , FFmpeg . ETranscode modifiers , string actcode , ThreadProgress threadProg ) {
17031719 FFmpeg ffmpeg = new FFmpeg ( inFile ) {
17041720 Cancel = Callbacks . Cancel ,
@@ -1708,6 +1724,7 @@ private bool transcodeTrackMulti (Book.Part part, Track track, string inFile, FF
17081724 return transcodeTrack ( ffmpeg , modifiers , actcode , track . Time , track . FileName ) ;
17091725 }
17101726
1727+
17111728 private bool transcodeTrackSingle ( Book . Part part , string inFile , string outFile , FFmpeg . ETranscode modifiers , ThreadProgress threadProg ) {
17121729 if ( part . Chapters is null || part . Chapters . Count == 0 )
17131730 return false ;
@@ -1724,15 +1741,62 @@ private bool transcodeTrackSingle (Book.Part part, string inFile, string outFile
17241741 if ( intermediateCopy ) {
17251742 return makeIntermediateCopy ( part , inFile , outFile , modifiers , tim , threadProg ) ;
17261743 } else {
1727- FFmpeg ffmpeg = new FFmpeg ( inFile ) {
1728- Cancel = Callbacks . Cancel ,
1729- Progress = threadProg . Report
1730- } ;
1731- return transcodeTrack ( ffmpeg , modifiers , part . ActivationCode , tim , outFile ) ;
1744+ if ( Settings . ConvFormat == EConvFormat . mp3 )
1745+ return transcodeTrackSingleWithChapters ( part , inFile , outFile , modifiers , threadProg , tim ) ;
1746+ else
1747+ return transcodeTrackSingle ( part , inFile , outFile , modifiers , threadProg , tim ) ;
17321748 }
17331749
17341750 }
17351751
1752+ private bool transcodeTrackSingleWithChapters ( Book . Part part , string inFile , string outFile , FFmpeg . ETranscode modifiers , ThreadProgress threadProg , TimeInterval tim ) {
1753+ string metafile = ffmpegChapters ( part , part . Tracks . FirstOrDefault ( ) ) ;
1754+ if ( metafile is null )
1755+ return false ;
1756+
1757+ FFmpeg ffmpeg = new FFmpeg ( inFile , metafile ) {
1758+ Cancel = Callbacks . Cancel ,
1759+ Progress = threadProg . Report
1760+ } ;
1761+ return transcodeTrack ( ffmpeg , modifiers , part . ActivationCode , tim , outFile ) ;
1762+ }
1763+
1764+ private bool transcodeTrackSingle ( Book . Part part , string inFile , string outFile , FFmpeg . ETranscode modifiers , ThreadProgress threadProg , TimeInterval tim ) {
1765+ FFmpeg ffmpeg = new FFmpeg ( inFile ) {
1766+ Cancel = Callbacks . Cancel ,
1767+ Progress = threadProg . Report
1768+ } ;
1769+ return transcodeTrack ( ffmpeg , modifiers , part . ActivationCode , tim , outFile ) ;
1770+ }
1771+
1772+ private string ffmpegChapters ( Book . Part part , Track track ) {
1773+ if ( track is null )
1774+ return null ;
1775+
1776+ IEnumerable < Chapter > chapters = null ;
1777+ switch ( Settings . ConvMode ) {
1778+ case EConvMode . single :
1779+ chapters = part . Chapters2 ;
1780+ break ;
1781+ default :
1782+ chapters = track . MetaChapters ;
1783+ break ;
1784+ }
1785+
1786+ // unique filename required
1787+ string metafile = Path . GetFileNameWithoutExtension ( track . FileName ) + $ " ({ part . TrackId ( track ) } ) meta.txt";
1788+ metafile = Path . Combine ( TempDirectoryLong , metafile ) ;
1789+
1790+ var ffmetadata = new FFMetaData ( chapters ) ;
1791+ bool succ = ffmetadata . Write ( metafile ) ;
1792+ Log ( 3 , this , ( ) => $ "ffmetafile=\" { metafile . SubstitUser ( ) } \" , #chapters={ ffmetadata . Chapters . Count } , succ={ succ } ") ;
1793+ if ( ! succ )
1794+ return null ;
1795+
1796+ return metafile ;
1797+ }
1798+
1799+
17361800 private bool makeIntermediateCopy ( Book . Part part , string inFile , string outFile , FFmpeg . ETranscode modifiers , TimeInterval tim , ThreadProgress threadProg ) {
17371801 Log ( 3 , this , ( ) => $ "out=\" { outFile . SubstitUser ( ) } \" ") ;
17381802
@@ -1802,7 +1866,9 @@ private void getContentMetadata (Book.Part part) {
18021866
18031867 private bool updateTags ( Book book , Track track ) {
18041868 bool succ = TagAndFileNamingHelper . WriteMetaData ( Resources , Settings , book , track ) ;
1805- succ = succ && TagAndFileNamingHelper . WriteMetaDataChapters ( Resources , Settings , book , track ) ;
1869+
1870+ if ( Settings . ConvFormat == EConvFormat . mp4 )
1871+ succ = succ && TagAndFileNamingHelper . WriteMetaDataChapters ( Resources , Settings , book , track ) ;
18061872
18071873 Log ( 3 , this , ( ) => $ "track=\" { track . Title } \" \" { Path . GetFileName ( track . FileName ) } \" , succ={ succ } ") ;
18081874 return succ ;
0 commit comments