Move image generating code to utils
This commit is contained in:
		
							parent
							
								
									22f89720f6
								
							
						
					
					
						commit
						373b12bacd
					
				| 
						 | 
					@ -1,17 +1,14 @@
 | 
				
			||||||
import json
 | 
					import json
 | 
				
			||||||
import subprocess
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
import asstosrt
 | 
					import asstosrt
 | 
				
			||||||
import srt
 | 
					import srt
 | 
				
			||||||
import webvtt
 | 
					import webvtt
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from .utils import needs_change
 | 
					from .utils import needs_change, generate_cover, generate_thumbnail
 | 
				
			||||||
from . import logger
 | 
					from . import logger
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Song:
 | 
					class Song:
 | 
				
			||||||
    THUMBNAIL_GEOMETRY = '200x200'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def __init__(self, path, root):
 | 
					    def __init__(self, path, root):
 | 
				
			||||||
        self.name = path.name
 | 
					        self.name = path.name
 | 
				
			||||||
        self.metadata = None
 | 
					        self.metadata = None
 | 
				
			||||||
| 
						 | 
					@ -88,29 +85,12 @@ class Song:
 | 
				
			||||||
        cover = self.path / "cover.jpg"
 | 
					        cover = self.path / "cover.jpg"
 | 
				
			||||||
        if needs_change(cover, (self.video,)):
 | 
					        if needs_change(cover, (self.video,)):
 | 
				
			||||||
            self.cover = cover
 | 
					            self.cover = cover
 | 
				
			||||||
            command = [
 | 
					            generate_cover(self.video, self.cover) 
 | 
				
			||||||
                'ffmpeg',
 | 
					 | 
				
			||||||
                '-loglevel', 'quiet',
 | 
					 | 
				
			||||||
                '-i', str(self.video.absolute()),
 | 
					 | 
				
			||||||
                '-vcodec', 'mjpeg',
 | 
					 | 
				
			||||||
                '-vframes', '1',
 | 
					 | 
				
			||||||
                '-an',
 | 
					 | 
				
			||||||
                '-f', 'rawvideo',
 | 
					 | 
				
			||||||
                '-ss', '2',
 | 
					 | 
				
			||||||
                '-y',
 | 
					 | 
				
			||||||
                str(self.cover.absolute()),
 | 
					 | 
				
			||||||
            ]
 | 
					 | 
				
			||||||
            subprocess.check_call(command)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        thumbnail = self.path / "thumb.jpg"
 | 
					        thumbnail = self.path / "thumb.jpg"
 | 
				
			||||||
        if needs_change(thumbnail, (self.cover,)):
 | 
					        if needs_change(thumbnail, (self.cover,)):
 | 
				
			||||||
            self.thumbnail = thumbnail
 | 
					            self.thumbnail = thumbnail
 | 
				
			||||||
            subprocess.check_call([
 | 
					            generate_thumbnail(self.cover, self.thumbnail)
 | 
				
			||||||
                'convert',
 | 
					 | 
				
			||||||
                str(self.cover.absolute()),
 | 
					 | 
				
			||||||
                '-resize', self.THUMBNAIL_GEOMETRY,
 | 
					 | 
				
			||||||
                str(self.thumbnail.absolute()),
 | 
					 | 
				
			||||||
            ])
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @property
 | 
					    @property
 | 
				
			||||||
    def publish(self):
 | 
					    def publish(self):
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,3 +1,6 @@
 | 
				
			||||||
 | 
					import subprocess
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def needs_change(destination, dependencies):
 | 
					def needs_change(destination, dependencies):
 | 
				
			||||||
    last_dependency_change = 0
 | 
					    last_dependency_change = 0
 | 
				
			||||||
    for dependency in dependencies:
 | 
					    for dependency in dependencies:
 | 
				
			||||||
| 
						 | 
					@ -12,3 +15,29 @@ def needs_change(destination, dependencies):
 | 
				
			||||||
        return True
 | 
					        return True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return destination.lstat().st_mtime < last_dependency_change
 | 
					    return destination.lstat().st_mtime < last_dependency_change
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def generate_cover(video, cover, second=2):
 | 
				
			||||||
 | 
					    command = [
 | 
				
			||||||
 | 
					        'ffmpeg',
 | 
				
			||||||
 | 
					        '-loglevel', 'quiet',
 | 
				
			||||||
 | 
					        '-i', str(video.absolute()),
 | 
				
			||||||
 | 
					        '-vcodec', 'mjpeg',
 | 
				
			||||||
 | 
					        '-vframes', '1',
 | 
				
			||||||
 | 
					        '-an',
 | 
				
			||||||
 | 
					        '-f', 'rawvideo',
 | 
				
			||||||
 | 
					        '-ss', str(second),
 | 
				
			||||||
 | 
					        '-y',
 | 
				
			||||||
 | 
					        str(cover.absolute()),
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					    subprocess.check_call(command)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def generate_thumbnail(cover, thumbnail, geometry="200x200"):
 | 
				
			||||||
 | 
					    command = [
 | 
				
			||||||
 | 
					        'convert',
 | 
				
			||||||
 | 
					        str(cover.absolute()),
 | 
				
			||||||
 | 
					        '-resize', geometry,
 | 
				
			||||||
 | 
					        str(thumbnail.absolute()),
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					    subprocess.check_call(command)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue