mirror of
https://github.com/yuukiwww/taiko-web.git
synced 2024-10-22 17:05:49 +02:00
39 lines
1.6 KiB
Python
39 lines
1.6 KiB
Python
|
#!/usr/bin/env python3
|
||
|
# .ogg preview generator for use when app and songs are on two different machines
|
||
|
|
||
|
import argparse
|
||
|
import requests
|
||
|
import os.path
|
||
|
from ffmpy import FFmpeg
|
||
|
|
||
|
|
||
|
parser = argparse.ArgumentParser(description='Generate song previews.')
|
||
|
parser.add_argument('site', help='Instance URL, eg. https://taiko.bui.pm')
|
||
|
parser.add_argument('song_dir', help='Path to songs directory, eg. /srv/taiko/public/taiko/songs')
|
||
|
parser.add_argument('--overwrite', action='store_true', help='Overwrite existing previews')
|
||
|
args = parser.parse_args()
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
songs = requests.get('{}/api/songs'.format(args.site)).json()
|
||
|
for i, song in enumerate(songs):
|
||
|
print('{}/{} {} (id: {})'.format(i + 1, len(songs), song['title'], song['id']))
|
||
|
|
||
|
song_path = '{}/{}/main.{}'.format(args.song_dir, song['id'], song['music_type'] if 'music_type' in song else 'mp3')
|
||
|
prev_path = '{}/{}/preview.ogg'.format(args.song_dir, song['id'])
|
||
|
|
||
|
if os.path.isfile(song_path):
|
||
|
if not os.path.isfile(prev_path) or args.overwrite:
|
||
|
if not song['preview'] or song['preview'] <= 0:
|
||
|
print('Skipping due to no preview')
|
||
|
continue
|
||
|
|
||
|
print('Making preview.ogg')
|
||
|
ff = FFmpeg(inputs={song_path: '-ss %s' % song['preview']},
|
||
|
outputs={prev_path: '-codec:a libvorbis -b:a 64k -ar 32000 -y -loglevel panic'})
|
||
|
ff.run()
|
||
|
else:
|
||
|
print('Preview already exists')
|
||
|
else:
|
||
|
print('song file not found')
|