Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

tvnamer erfahrungen?

1 view
Skip to first unread message

Kay Martinen

unread,
Feb 10, 2023, 1:20:02 PM2/10/23
to
Hat jemand praktische Erfahrungen mit dem tool 'tvnamer'?

https://github.com/dbr/tvnamer

Damit soll man TV Serienepisoden umbenennen oder gar verschieben können
mittels Daten vom tvdb-API. Funktioniert das bei euch, z.b. unter linux
in einer konsole mit von einem Fileserver gemounteten Freigaben (SMB
oder NFS)?

Es scheint aber als müßten die Dateien da schon ein Tag oder Muster
aufweisen das auf die konkrete Episode einer Serie hinweist.

Ich habe; oder hätte gern alle; Serien die ich aufnahm Entweder in Einer
Ordnerstruktur wie

TV-Shows/<Serienname>/StaffelX/<Lfd_Nr>episodetitel.xyz

Oder; bei wenigen Staffeln und miniserien in

TV-Shows/<Serienname>/sXeY - episodentitel.xyz

Wobei xyz z.b. .TS oder ,MPG o.ä. Aufnahmeformate wären und sXeY eben
für Staffel und EpisodenNr (lfd. Nr. oder in der Staffel) stünden.

Problem. Vieles ist noch unsortiert und ungetaggt und trägt z.b. nur
Namen wie <sendername> - <serienname>[YYMMDD-HHMMSS].xyz

Da wünschte ich mir eher eine Schnittstelle zu fernsehserien.de um die
entsprechend vorbereiten zu können. Gibt es so ein Tool vielleicht auch
oder gar eines das in die Erwünschte Struktur umsortieren könnte?

Aktuell kann ich das alles nur manuell zuordnen, anhand vorher ein zu
grenzender Sender, Sendetermine und mit dem Ordner in Dolphin als
Zweitem Fenster neben der Browser-ansicht o.g. webseite.

tvnamer scheint erst dann einen Sinn zu machen, aber dann ist die meiste
Arbeit manuell bereits erledigt und es geht letztlich nur noch um das
verschieben von Datei/Ordner-menge X in einzelne Staffelordner.


Bye/
/Kay

--
"Kann ein Wurstbrot die Welt retten?" :-)

Markus Schaaf

unread,
Feb 10, 2023, 4:37:52 PM2/10/23
to
Am 10.02.23 um 19:11 schrieb Kay Martinen:
> Hat jemand praktische Erfahrungen mit dem tool 'tvnamer'?

Nope.

> Da wünschte ich mir eher eine Schnittstelle zu fernsehserien.de um die
> entsprechend vorbereiten zu können. Gibt es so ein Tool vielleicht auch
> oder gar eines das in die Erwünschte Struktur umsortieren könnte?

Hatte mal probiert einen Scraper für die zu schreiben, jedoch
gibt es kein API und das HTML ist nicht stabil. Nimm lieber
themoviedb.org, dafür gibt es Scraper und dann stimmt die
Reihenfolge auch bei anderen Programmen.

Ich habe mir für den persönlichen Gebrauch etwas zusammengerotzt,
das gut genug ist. Ich hänge den Quellcode deshalb hier einfach
an. Gebrauch:

$ fetch-titles --tv-show "Akte X" --numbers --range 1,2x3-2x5
01x01 Gezeichnet
01x02 Die Warnung
01x03 Das Nest
01x04 Signale
01x05 Der Teufel von Jersey
01x06 Schatten
01x07 Die Maschine
01x08 Eis
01x09 Besessen
01x10 Gefallener Engel
01x11 Eve
01x12 Feuer
01x13 Die Botschaft
01x14 Verlockungen
01x15 Lazarus
01x16 Ewige Jugend
01x17 Täuschungsmanöver
01x18 Der Wunderheiler
01x19 Verwandlungen
01x20 Der Kokon
01x21 Ein neues Nest
01x22 Wiedergeboren
01x23 Roland
01x24 Das Labor
02x03 Blut
02x04 Schlaflos
02x05 Unter Kontrolle

Zum Umbenennen kann man dann:

$ fetch-titles ... | name-files-from-list *.mp4

Natürlich sind die Treffer für den Titel nicht immer eindeutig.
Dann einfach auf https://themoviedb.org/ gehen und den Titel
suchen, anklicken und aus der URL die ID (kurze Zahl) ablesen,
und bei --title nnn angeben.

Vor Gebrauch bei TMDB registrieren, API-Key generieren und im
Script eintragen.

MfG

fetch-titles:
#!/usr/bin/python

import argparse
import tmdbv3api
import os
import re
import bisect

args = argparse.ArgumentParser()
args.add_argument( '--lang', metavar='iso_639_1' )
args.add_argument( '--numbers', action='store_true' )
args.add_argument( '--tv-show', metavar='title' )
args.add_argument( '--range', metavar='1,2x9-3x5' )
args = args.parse_args()

def get_lang():
if args.lang is not None: return args.lang
if 'LANG' in os.environ:
m = re.match( r'^([a-z]{2})(?:_[A-Z]{2})?(?:\..*)$',
os.environ['LANG'] )
if m: return m[1]
return 'en'

def se2range( season, episode ):
return 1000 * int(season) + int(episode)

def se2range_s( season, episode='' ):
if episode == '': episode = 0
return se2range( season, episode )

def se2range_e( season, episode='' ):
if episode == '': episode = 999
return se2range( season, episode )

sf = None
if args.range is not None:
sf = [[ 0, 0 ]]
for r in args.range.split(','):
v = r.split('-')
if len(v) < 2: v.append( v[0] )
v[0] = se2range_s( * v[0].split('x') )
v[1] = se2range_e( * v[1].split('x') )
sf.append( v )
sf.sort( key=lambda x: x[0] )

def chk_range( c ):
if sf is None: return True
i = bisect.bisect_right( sf, c, key=lambda x: x[0] ) - 1
return c <= sf[i][1]

tmdb = tmdbv3api.TMDb()
tmdb.api_key = "Hier eigenen API-Key einsetzen"
tmdb.language = get_lang()

if args.tv_show is not None:
if re.fullmatch( r'\d+', args.tv_show ):
show_id = int( args.tv_show )
else:
show_id = tmdbv3api.TV().search( args.tv_show )[0]['id']
show = tmdbv3api.TV().details( show_id, append_to_response='' )
for s in show['seasons']:
snr = int( s['season_number'] )
season = tmdbv3api.Season().details( show['id'], snr )
for e in season['episodes']:
enr = int( e['episode_number'] )
if chk_range( se2range( snr, enr )):
if args.numbers:
print( '%02dx%02d ' % ( snr, enr ), end='' )
print( e['name'] )

---8<---
name-files-from-list:
#!/bin/sh

while read -r name
do
from="$1"
ext="${from#*.}"
mv "$from" "$name.$ext"
shift
done
0 new messages