[ffmpeg] add support for chapters field postprocessing
This commit is contained in:
		
							parent
							
								
									55949fede6
								
							
						
					
					
						commit
						fa2a36d9bc
					
				
					 1 changed files with 28 additions and 3 deletions
				
			
		| 
						 | 
				
			
			@ -4,6 +4,7 @@ import io
 | 
			
		|||
import os
 | 
			
		||||
import subprocess
 | 
			
		||||
import time
 | 
			
		||||
import re
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
from .common import AudioConversionError, PostProcessor
 | 
			
		||||
| 
						 | 
				
			
			@ -22,6 +23,7 @@ from ..utils import (
 | 
			
		|||
    subtitles_filename,
 | 
			
		||||
    dfxp2srt,
 | 
			
		||||
    ISO639Utils,
 | 
			
		||||
    replace_extension,
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -429,17 +431,40 @@ class FFmpegMetadataPP(FFmpegPostProcessor):
 | 
			
		|||
 | 
			
		||||
        filename = info['filepath']
 | 
			
		||||
        temp_filename = prepend_extension(filename, 'temp')
 | 
			
		||||
        in_filenames = [filename]
 | 
			
		||||
        options = []
 | 
			
		||||
 | 
			
		||||
        if info['ext'] == 'm4a':
 | 
			
		||||
            options = ['-vn', '-acodec', 'copy']
 | 
			
		||||
            options.extend(['-vn', '-acodec', 'copy'])
 | 
			
		||||
        else:
 | 
			
		||||
            options = ['-c', 'copy']
 | 
			
		||||
            options.extend(['-c', 'copy'])
 | 
			
		||||
 | 
			
		||||
        for (name, value) in metadata.items():
 | 
			
		||||
            options.extend(['-metadata', '%s=%s' % (name, value)])
 | 
			
		||||
 | 
			
		||||
        chapters = info.get('chapters', [])
 | 
			
		||||
        if chapters:
 | 
			
		||||
            metadata_filename = encodeFilename(replace_extension(filename, 'meta'))
 | 
			
		||||
            with io.open(metadata_filename, 'wt', encoding='utf-8') as f:
 | 
			
		||||
                def ffmpeg_escape(text):
 | 
			
		||||
                    return re.sub(r'(=|;|#|\\|\n)', r'\\\1', text)
 | 
			
		||||
 | 
			
		||||
                metadata_file_content = ';FFMETADATA1\n'
 | 
			
		||||
                for chapter in chapters:
 | 
			
		||||
                    metadata_file_content += '[CHAPTER]\nTIMEBASE=1/1000\n'
 | 
			
		||||
                    metadata_file_content += 'START=%d\n' % (chapter['start_time'] * 1000)
 | 
			
		||||
                    metadata_file_content += 'END=%d\n' % (chapter['end_time'] * 1000)
 | 
			
		||||
                    chapter_title = chapter.get('title')
 | 
			
		||||
                    if chapter_title:
 | 
			
		||||
                        metadata_file_content += 'title=%s\n' % ffmpeg_escape(chapter_title)
 | 
			
		||||
                f.write(metadata_file_content)
 | 
			
		||||
                in_filenames.append(metadata_filename)
 | 
			
		||||
                options.extend(['-map_metadata', '1'])
 | 
			
		||||
 | 
			
		||||
        self._downloader.to_screen('[ffmpeg] Adding metadata to \'%s\'' % filename)
 | 
			
		||||
        self.run_ffmpeg(filename, temp_filename, options)
 | 
			
		||||
        self.run_ffmpeg_multiple_files(in_filenames, temp_filename, options)
 | 
			
		||||
        if chapters:
 | 
			
		||||
            os.remove(metadata_filename)
 | 
			
		||||
        os.remove(encodeFilename(filename))
 | 
			
		||||
        os.rename(encodeFilename(temp_filename), encodeFilename(filename))
 | 
			
		||||
        return [], info
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue