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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

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