p_for_power

This commit is contained in:
j 2025-11-27 18:09:06 +01:00
commit d4372d0595
16 changed files with 24 additions and 154 deletions

View file

@ -21,7 +21,7 @@ https://textb.org/r/t_for_time_subtitles_5_ashley/
data = requests.get(url).text
parts = data.strip().split('##')
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:
part = part.strip().split('\n')
if part:
@ -86,7 +86,7 @@ def update_subtitles():
wav = i.files.filter(selected=True)[0].data.path
id = i.get('title').split('_')[0]
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):
print(i, wav, txt)
subtitles = gentle2subtitles(align_text(txt, wav))

View file

@ -1015,7 +1015,7 @@ examples (config.SITENAME.jsonc) that are part of this pan.do/ra distribution.
the system (from).
*/
"site": {
"description": "T for Time - pan.do/ra",
"description": "P for Power - pan.do/ra",
"email": {
// E-mail address in contact form (to)
"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"
},
"https": true,
"id": "t_for_time",
"name": "T for Time",
"id": "p_for_power",
"name": "P for Power",
// Set to true to allow search engines to index the site
"public": false,
"sendReferrer": true,
"url": "time.0x2620.org"
"url": "power.0x2620.org"
},
/*
"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.
*/
"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.

View file

@ -1,13 +1,13 @@
from django.core.management.base import BaseCommand
from ...render import generate_clips
from ...render import generate_clips, default_prefix
class Command(BaseCommand):
help = 'generate symlinks to clips and clips.json'
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):
return generate_clips(options)

View file

@ -5,14 +5,14 @@ import subprocess
from django.core.management.base import BaseCommand
from django.conf import settings
from ...render import render_infinity
from ...render import render_infinity, default_prefix
class Command(BaseCommand):
help = 'render infinity'
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('--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')

View file

@ -5,14 +5,14 @@ import subprocess
from django.core.management.base import BaseCommand
from django.conf import settings
from ...render import render_all
from ...render import render_all, default_prefix
class Command(BaseCommand):
help = 'genrate kdenlive porject and render'
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('--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')

View file

@ -5,14 +5,14 @@ import subprocess
from django.core.management.base import BaseCommand
from django.conf import settings
from ...render import update_subtitles
from ...render import update_subtitles, default_prefix
class Command(BaseCommand):
help = 'genrate kdenlive porject and render'
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')
def handle(self, **options):

View file

@ -1,6 +1,6 @@
[Desktop Entry]
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
NoDisplay=false
X-GNOME-Autostart-enabled=true

View file

@ -1,6 +1,6 @@
[Desktop Entry]
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
NoDisplay=false
X-GNOME-Autostart-enabled=true

View file

@ -7,7 +7,7 @@ Wants=network-online.target
Type=simple
Restart=on-failure
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]
WantedBy=graphical-session.target

View file

@ -6,7 +6,7 @@ After=gnome-session.target network-online.target
Type=simple
Restart=on-failure
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]
WantedBy=graphical-session.target

View file

@ -13,7 +13,7 @@ import mpv
import logging
logger = logging.getLogger('t_for_time')
logger = logging.getLogger('p_for_power')
SYNC_TOLERANCE = 0.05
SYNC_GRACE_TIME = 5
@ -74,7 +74,7 @@ class Sync(Thread):
input_vo_keyboard=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:
self.sax = None
@ -408,11 +408,11 @@ class Sync(Thread):
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('--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('--window', action='store_true', help='run in window', default=False)
parser.add_argument('--debug', action='store_true', help='debug', default=False)

View file

@ -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=

View file

@ -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

View file

@ -16,6 +16,7 @@ import lxml.etree
from .pi import random
from .render_kdenlive import KDEnliveProject, _CACHE, melt_xml, get_melt
default_prefix = "/srv/p_for_power"
def random_int(seq, length):
n = n_ = length - 1

109
sax.py
View file

@ -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)