p_for_power
This commit is contained in:
parent
4e767b7268
commit
d4372d0595
16 changed files with 24 additions and 154 deletions
|
|
@ -21,7 +21,7 @@ https://textb.org/r/t_for_time_subtitles_5_ashley/
|
||||||
data = requests.get(url).text
|
data = requests.get(url).text
|
||||||
parts = data.strip().split('##')
|
parts = data.strip().split('##')
|
||||||
print(url)
|
print(url)
|
||||||
prefix = '/srv/t_for_time/vo/' + url.split('/')[-2].split('subtitles_')[-1]
|
prefix = '/srv/p_for_power/vo/' + url.split('/')[-2].split('subtitles_')[-1]
|
||||||
for part in parts:
|
for part in parts:
|
||||||
part = part.strip().split('\n')
|
part = part.strip().split('\n')
|
||||||
if part:
|
if part:
|
||||||
|
|
@ -86,7 +86,7 @@ def update_subtitles():
|
||||||
wav = i.files.filter(selected=True)[0].data.path
|
wav = i.files.filter(selected=True)[0].data.path
|
||||||
id = i.get('title').split('_')[0]
|
id = i.get('title').split('_')[0]
|
||||||
batch = i.get('batch')[0][5:].lower().replace('-', '_').replace(' ', '')
|
batch = i.get('batch')[0][5:].lower().replace('-', '_').replace(' ', '')
|
||||||
txt = '/srv/t_for_time/vo/%s_%s.txt' % (batch, id)
|
txt = '/srv/p_for_power/vo/%s_%s.txt' % (batch, id)
|
||||||
if os.path.exists(txt):
|
if os.path.exists(txt):
|
||||||
print(i, wav, txt)
|
print(i, wav, txt)
|
||||||
subtitles = gentle2subtitles(align_text(txt, wav))
|
subtitles = gentle2subtitles(align_text(txt, wav))
|
||||||
|
|
|
||||||
11
config.jsonc
11
config.jsonc
|
|
@ -1015,7 +1015,7 @@ examples (config.SITENAME.jsonc) that are part of this pan.do/ra distribution.
|
||||||
the system (from).
|
the system (from).
|
||||||
*/
|
*/
|
||||||
"site": {
|
"site": {
|
||||||
"description": "T for Time - pan.do/ra",
|
"description": "P for Power - pan.do/ra",
|
||||||
"email": {
|
"email": {
|
||||||
// E-mail address in contact form (to)
|
// E-mail address in contact form (to)
|
||||||
"contact": "system@time.0x2620.org",
|
"contact": "system@time.0x2620.org",
|
||||||
|
|
@ -1025,12 +1025,12 @@ examples (config.SITENAME.jsonc) that are part of this pan.do/ra distribution.
|
||||||
"system": "system@time.0x2620.org"
|
"system": "system@time.0x2620.org"
|
||||||
},
|
},
|
||||||
"https": true,
|
"https": true,
|
||||||
"id": "t_for_time",
|
"id": "p_for_power",
|
||||||
"name": "T for Time",
|
"name": "P for Power",
|
||||||
// Set to true to allow search engines to index the site
|
// Set to true to allow search engines to index the site
|
||||||
"public": false,
|
"public": false,
|
||||||
"sendReferrer": true,
|
"sendReferrer": true,
|
||||||
"url": "time.0x2620.org"
|
"url": "power.0x2620.org"
|
||||||
},
|
},
|
||||||
/*
|
/*
|
||||||
"sitePages" defines the sections of the main site dialog. If "news" is
|
"sitePages" defines the sections of the main site dialog. If "news" is
|
||||||
|
|
@ -1052,9 +1052,6 @@ examples (config.SITENAME.jsonc) that are part of this pan.do/ra distribution.
|
||||||
cross-instance references.
|
cross-instance references.
|
||||||
*/
|
*/
|
||||||
"sites": [
|
"sites": [
|
||||||
{"name": "0xDB", "url": "0xdb.org", "https": true},
|
|
||||||
{"name": "Pad.ma", "url": "pad.ma", "https": true},
|
|
||||||
{"name": "Indiancine.ma", "url": "indiancine.ma", "https": true}
|
|
||||||
],
|
],
|
||||||
/*
|
/*
|
||||||
"textRightsLevels" defines a list of rights levels for texts.
|
"textRightsLevels" defines a list of rights levels for texts.
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
from django.core.management.base import BaseCommand
|
from django.core.management.base import BaseCommand
|
||||||
|
|
||||||
from ...render import generate_clips
|
from ...render import generate_clips, default_prefix
|
||||||
|
|
||||||
|
|
||||||
class Command(BaseCommand):
|
class Command(BaseCommand):
|
||||||
help = 'generate symlinks to clips and clips.json'
|
help = 'generate symlinks to clips and clips.json'
|
||||||
|
|
||||||
def add_arguments(self, parser):
|
def add_arguments(self, parser):
|
||||||
parser.add_argument('--prefix', action='store', dest='prefix', default="/srv/t_for_time", help='prefix to build clips in')
|
parser.add_argument('--prefix', action='store', dest='prefix', default=default_prefix, help='prefix to build clips in')
|
||||||
|
|
||||||
def handle(self, **options):
|
def handle(self, **options):
|
||||||
return generate_clips(options)
|
return generate_clips(options)
|
||||||
|
|
|
||||||
|
|
@ -5,14 +5,14 @@ import subprocess
|
||||||
from django.core.management.base import BaseCommand
|
from django.core.management.base import BaseCommand
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
|
||||||
from ...render import render_infinity
|
from ...render import render_infinity, default_prefix
|
||||||
|
|
||||||
|
|
||||||
class Command(BaseCommand):
|
class Command(BaseCommand):
|
||||||
help = 'render infinity'
|
help = 'render infinity'
|
||||||
|
|
||||||
def add_arguments(self, parser):
|
def add_arguments(self, parser):
|
||||||
parser.add_argument('--prefix', action='store', dest='prefix', default="/srv/t_for_time", help='prefix to build clips in')
|
parser.add_argument('--prefix', action='store', dest='prefix', default=default_prefix, help='prefix to build clips in')
|
||||||
parser.add_argument('--config', action='store', dest='config', default=None, help='config')
|
parser.add_argument('--config', action='store', dest='config', default=None, help='config')
|
||||||
parser.add_argument('--duration', action='store', dest='duration', default="3600", help='target duration of all fragments in seconds')
|
parser.add_argument('--duration', action='store', dest='duration', default="3600", help='target duration of all fragments in seconds')
|
||||||
parser.add_argument('--single-file', action='store_true', dest='single_file', default=False, help='render to single video')
|
parser.add_argument('--single-file', action='store_true', dest='single_file', default=False, help='render to single video')
|
||||||
|
|
|
||||||
|
|
@ -5,14 +5,14 @@ import subprocess
|
||||||
from django.core.management.base import BaseCommand
|
from django.core.management.base import BaseCommand
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
|
||||||
from ...render import render_all
|
from ...render import render_all, default_prefix
|
||||||
|
|
||||||
|
|
||||||
class Command(BaseCommand):
|
class Command(BaseCommand):
|
||||||
help = 'genrate kdenlive porject and render'
|
help = 'genrate kdenlive porject and render'
|
||||||
|
|
||||||
def add_arguments(self, parser):
|
def add_arguments(self, parser):
|
||||||
parser.add_argument('--prefix', action='store', dest='prefix', default="/srv/t_for_time", help='prefix to build clips in')
|
parser.add_argument('--prefix', action='store', dest='prefix', default=default_prefix, help='prefix to build clips in')
|
||||||
parser.add_argument('--duration', action='store', dest='duration', default="3600", help='target duration of all fragments in seconds')
|
parser.add_argument('--duration', action='store', dest='duration', default="3600", help='target duration of all fragments in seconds')
|
||||||
parser.add_argument('--offset', action='store', dest='offset', default="1024", help='inital offset in pi')
|
parser.add_argument('--offset', action='store', dest='offset', default="1024", help='inital offset in pi')
|
||||||
parser.add_argument('--no-video', action='store_true', dest='no_video', default=False, help='don\'t render video')
|
parser.add_argument('--no-video', action='store_true', dest='no_video', default=False, help='don\'t render video')
|
||||||
|
|
|
||||||
|
|
@ -5,14 +5,14 @@ import subprocess
|
||||||
from django.core.management.base import BaseCommand
|
from django.core.management.base import BaseCommand
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
|
||||||
from ...render import update_subtitles
|
from ...render import update_subtitles, default_prefix
|
||||||
|
|
||||||
|
|
||||||
class Command(BaseCommand):
|
class Command(BaseCommand):
|
||||||
help = 'genrate kdenlive porject and render'
|
help = 'genrate kdenlive porject and render'
|
||||||
|
|
||||||
def add_arguments(self, parser):
|
def add_arguments(self, parser):
|
||||||
parser.add_argument('--prefix', action='store', dest='prefix', default="/srv/t_for_time", help='prefix to build clips in')
|
parser.add_argument('--prefix', action='store', dest='prefix', default=default_prefix, help='prefix to build clips in')
|
||||||
parser.add_argument('--offset', action='store', dest='offset', default="1024", help='inital offset in pi')
|
parser.add_argument('--offset', action='store', dest='offset', default="1024", help='inital offset in pi')
|
||||||
|
|
||||||
def handle(self, **options):
|
def handle(self, **options):
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[Desktop Entry]
|
[Desktop Entry]
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=/srv/pandora/t_for_time/player/player.py --mode peer --playlist /srv/t_for_time/render/back.m3u
|
Exec=/srv/pandora/p_for_power/player/player.py --mode peer --playlist /srv/p_for_power/render/back.m3u
|
||||||
Hidden=false
|
Hidden=false
|
||||||
NoDisplay=false
|
NoDisplay=false
|
||||||
X-GNOME-Autostart-enabled=true
|
X-GNOME-Autostart-enabled=true
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[Desktop Entry]
|
[Desktop Entry]
|
||||||
Type=Application
|
Type=Application
|
||||||
Exec=/srv/pandora/t_for_time/player/player.py --mode main --playlist /srv/t_for_time/render/front.m3u
|
Exec=/srv/pandora/p_for_power/player/player.py --mode main --playlist /srv/p_for_power/render/front.m3u
|
||||||
Hidden=false
|
Hidden=false
|
||||||
NoDisplay=false
|
NoDisplay=false
|
||||||
X-GNOME-Autostart-enabled=true
|
X-GNOME-Autostart-enabled=true
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ Wants=network-online.target
|
||||||
Type=simple
|
Type=simple
|
||||||
Restart=on-failure
|
Restart=on-failure
|
||||||
KillSignal=SIGINT
|
KillSignal=SIGINT
|
||||||
ExecStart=/srv/pandora/t_for_time/player/player.py --mode peer --playlist /srv/t_for_time/render/back.m3u --config /srv/t_for_time/render/back.json
|
ExecStart=/srv/pandora/p_for_power/player/player.py --mode peer --playlist /srv/p_for_power/render/back.m3u --config /srv/p_for_power/render/back.json
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=graphical-session.target
|
WantedBy=graphical-session.target
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ After=gnome-session.target network-online.target
|
||||||
Type=simple
|
Type=simple
|
||||||
Restart=on-failure
|
Restart=on-failure
|
||||||
KillSignal=SIGINT
|
KillSignal=SIGINT
|
||||||
ExecStart=/srv/pandora/t_for_time/player/player.py --mode main --playlist /srv/t_for_time/render/front.m3u --config /srv/t_for_time/render/front.json
|
ExecStart=/srv/pandora/p_for_power/player/player.py --mode main --playlist /srv/p_for_power/render/front.m3u --config /srv/p_for_power/render/front.json
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=graphical-session.target
|
WantedBy=graphical-session.target
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ import mpv
|
||||||
|
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
logger = logging.getLogger('t_for_time')
|
logger = logging.getLogger('p_for_power')
|
||||||
|
|
||||||
SYNC_TOLERANCE = 0.05
|
SYNC_TOLERANCE = 0.05
|
||||||
SYNC_GRACE_TIME = 5
|
SYNC_GRACE_TIME = 5
|
||||||
|
|
@ -74,7 +74,7 @@ class Sync(Thread):
|
||||||
input_vo_keyboard=True,
|
input_vo_keyboard=True,
|
||||||
)
|
)
|
||||||
self.sax.loop_file = True
|
self.sax.loop_file = True
|
||||||
self.sax.play("/srv/t_for_time/render/Saxophone-5.1.mp4")
|
self.sax.play("/srv/p_for_power/render/Saxophone-5.1.mp4")
|
||||||
else:
|
else:
|
||||||
self.sax = None
|
self.sax = None
|
||||||
|
|
||||||
|
|
@ -408,11 +408,11 @@ class Sync(Thread):
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
prefix = os.path.expanduser('~/Videos/t_for_time')
|
prefix = os.path.expanduser('~/Videos/p_for_power')
|
||||||
|
|
||||||
parser = argparse.ArgumentParser(description='t_for_time sync player')
|
parser = argparse.ArgumentParser(description='p_for_power sync player')
|
||||||
parser.add_argument('--mode', help='peer or main', default="peer")
|
parser.add_argument('--mode', help='peer or main', default="peer")
|
||||||
parser.add_argument('--playlist', default='/srv/t_for_time/render/128/front.m3u', help="m3u")
|
parser.add_argument('--playlist', default='/srv/p_for_power/render/128/front.m3u', help="m3u")
|
||||||
parser.add_argument('--prefix', help='video location', default=prefix)
|
parser.add_argument('--prefix', help='video location', default=prefix)
|
||||||
parser.add_argument('--window', action='store_true', help='run in window', default=False)
|
parser.add_argument('--window', action='store_true', help='run in window', default=False)
|
||||||
parser.add_argument('--debug', action='store_true', help='debug', default=False)
|
parser.add_argument('--debug', action='store_true', help='debug', default=False)
|
||||||
|
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
[Desktop Entry]
|
|
||||||
Type=Application
|
|
||||||
Exec=/usr/bin/mpv --quiet --loop /srv/t_for_time/render/Saxophone-5.1.mp4
|
|
||||||
Hidden=false
|
|
||||||
NoDisplay=false
|
|
||||||
X-GNOME-Autostart-enabled=true
|
|
||||||
Name=loop
|
|
||||||
Comment=
|
|
||||||
|
|
@ -1,11 +0,0 @@
|
||||||
[Unit]
|
|
||||||
Description=saxophone loop
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=simple
|
|
||||||
Restart=always
|
|
||||||
ExecStart=/usr/bin/mpv --quiet --loop /srv/t_for_time/render/Saxophone-5.1.mp4
|
|
||||||
KillSignal=SIGINT
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=graphical-session.target
|
|
||||||
|
|
@ -16,6 +16,7 @@ import lxml.etree
|
||||||
from .pi import random
|
from .pi import random
|
||||||
from .render_kdenlive import KDEnliveProject, _CACHE, melt_xml, get_melt
|
from .render_kdenlive import KDEnliveProject, _CACHE, melt_xml, get_melt
|
||||||
|
|
||||||
|
default_prefix = "/srv/p_for_power"
|
||||||
|
|
||||||
def random_int(seq, length):
|
def random_int(seq, length):
|
||||||
n = n_ = length - 1
|
n = n_ = length - 1
|
||||||
|
|
|
||||||
109
sax.py
109
sax.py
|
|
@ -1,109 +0,0 @@
|
||||||
#!/usr/bin/python3
|
|
||||||
import os
|
|
||||||
from render_kdenlive import KDEnliveProject, _CACHE
|
|
||||||
import subprocess
|
|
||||||
|
|
||||||
def generate_sax_mix(root):
|
|
||||||
os.chdir(root)
|
|
||||||
|
|
||||||
|
|
||||||
root = os.path.abspath(".")
|
|
||||||
|
|
||||||
long_wav = "Soon_Kim_Long_Reverb_Only2.wav"
|
|
||||||
nois_wav = "Soon_Kim_Noise.wav"
|
|
||||||
reverb_wav = "Soon_Kim_Short_Reverb_Mix2.wav"
|
|
||||||
'''
|
|
||||||
i = item.models.Item.objects.get(data__title='Soon_Kim_Long_Reverb_Only2')
|
|
||||||
i.files.all()[0].data.path
|
|
||||||
'/srv/pandora/data/media/6b/44/16/3f2905e886/data.wav'
|
|
||||||
|
|
||||||
i = item.models.Item.objects.get(data__title='Soon_Kim_Short_Reverb_Mix2')
|
|
||||||
i.files.all()[0].data.path
|
|
||||||
'/srv/pandora/data/media/ee/e0/04/d4ab42c3de/data.wav'
|
|
||||||
|
|
||||||
i = item.models.Item.objects.get(data__title='Soon_Kim_Noise')
|
|
||||||
i.files.all()[0].data.path
|
|
||||||
'/srv/pandora/data/media/84/88/87/d2fb2e2dc2/data.wav'
|
|
||||||
'''
|
|
||||||
|
|
||||||
|
|
||||||
reverb = {
|
|
||||||
"src": reverb_wav,
|
|
||||||
"duration": 3600.0,
|
|
||||||
"filter": {
|
|
||||||
"volume": "3.5"
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
long = {
|
|
||||||
"src": long_wav,
|
|
||||||
"duration": 3600.0,
|
|
||||||
"filter": {
|
|
||||||
"volume": "-1"
|
|
||||||
},
|
|
||||||
}
|
|
||||||
noise = {
|
|
||||||
"src": nois_wav,
|
|
||||||
"duration": 3600.0,
|
|
||||||
"filter": {
|
|
||||||
"volume": "7.75"
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
project = KDEnliveProject(root)
|
|
||||||
project.append_clip('A1', long)
|
|
||||||
project.append_clip('A2', noise)
|
|
||||||
path = os.path.join(root, "sax-mix.kdenlive")
|
|
||||||
with open(path, 'w') as fd:
|
|
||||||
fd.write(project.to_xml())
|
|
||||||
|
|
||||||
project = KDEnliveProject(root)
|
|
||||||
project.append_clip('A1', reverb)
|
|
||||||
path = os.path.join(root, "sax-reverb-mix.kdenlive")
|
|
||||||
with open(path, 'w') as fd:
|
|
||||||
fd.write(project.to_xml())
|
|
||||||
|
|
||||||
cmds = []
|
|
||||||
cmds.append([
|
|
||||||
"melt", "sax-mix.kdenlive", '-quiet', '-consumer', 'avformat:sax-mix.wav'
|
|
||||||
])
|
|
||||||
cmds.append([
|
|
||||||
"melt", "sax-reverb-mix.kdenlive", '-quiet', '-consumer', 'avformat:sax-reverb-mix.wav'
|
|
||||||
])
|
|
||||||
cmds.append([
|
|
||||||
"ffmpeg", "-y",
|
|
||||||
"-nostats", "-loglevel", "error",
|
|
||||||
"-f", "lavfi", "-i", "anullsrc=r=48000:cl=mono", "-t", "3600", "silence.wav"
|
|
||||||
])
|
|
||||||
|
|
||||||
for src, out1, out2 in (
|
|
||||||
('sax-reverb-mix.wav', "fl.wav", "fr.wav"),
|
|
||||||
("sax-mix.wav", "bl.wav", "br.wav"),
|
|
||||||
):
|
|
||||||
cmds.append([
|
|
||||||
"ffmpeg", "-y",
|
|
||||||
"-nostats", "-loglevel", "error",
|
|
||||||
"-i", src,
|
|
||||||
"-filter_complex",
|
|
||||||
"[0:0]pan=1|c0=c0[left]; [0:0]pan=1|c0=c1[right]",
|
|
||||||
"-map", "[left]", out1,
|
|
||||||
"-map", "[right]", out2,
|
|
||||||
])
|
|
||||||
|
|
||||||
cmds.append([
|
|
||||||
"ffmpeg", "-y",
|
|
||||||
"-nostats", "-loglevel", "error",
|
|
||||||
"-i", "fl.wav",
|
|
||||||
"-i", "fr.wav",
|
|
||||||
"-i", "silence.wav",
|
|
||||||
"-i", "silence.wav",
|
|
||||||
"-i", "bl.wav",
|
|
||||||
"-i", "br.wav",
|
|
||||||
"-filter_complex", "[0:a][1:a][2:a][3:a][4:a][5:a]amerge=inputs=6[a]",
|
|
||||||
"-map", "[a]",
|
|
||||||
"-ar", "48000",
|
|
||||||
"-c:a", "aac", "Saxophone-5.1.mp4"
|
|
||||||
])
|
|
||||||
for cmd in cmds:
|
|
||||||
print(" ".join([str(x) for x in cmd]))
|
|
||||||
subprocess.call(cmd)
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue