Пакетное переименование эпизодов

pcspkres el módulo estándar; le permite controlar el altavoz de la PC a través de la capa de entrada. El enlace simbólico canónico es /dev/input/by-path/platform-pcspkr-event-spkr. Puede enviar eventos al altavoz escribiendo en él (la mayoría de los demás dispositivos de entrada producirán eventos, que usted lee desde el nodo del dispositivo de entrada ). El parlante de la PC es muy simple, básicamente puede reproducir tonos de una frecuencia determinada, que puede usarse para pitidos con diferentes tonos.

snd_pcspes un intento de usar este hardware muy limitado para producir un sonido PCM completo. Aparece como un dispositivo ALSA. No funciona muy bien, al menos en mi sistema; el sonido es apenas reconocible. Me sorprendería si un "tutorial lo requiere".

1
15.02.2019, 19:37
1 ответ

Предположения:

  1. Файлы, которые нужно переименовать, имеют вид [<tag>] <name> - <serial> [<quality>].mkv.
  2. У каждого аниме есть файл поиска с именем <name>.lst, в котором перечислены эпизоды в последовательном порядке, например. One Piece.lstсодержит:

    S01E01
    S01E02
    ...
    S01E08
    S02E01
    ...
    
  3. Вы используете оболочку bash не ниже версии 4 ().

Вот скрипт для канонизации ваших аниме-видео:

#!/bin/bash
# USAGE: canon_vids <dir>...
# Canonicalize the filenames of all MKV vids in each <dir>

# All the anime lookup tables are in the lookup subdirectory
# where canon_vids is stored
lookup_dir="$(dirname "$0")/lookup"

log_skip() {
  echo "SKIP ($1): $2"
}

find "$@" -name \*.mkv | while read f; do
  # Check filename against our desired pattern
  # (We don't want to rename what's already been renamed!)
  if [[ $f =~ /(\[[^]]+\])\ (.*)\ -\ ([0-9]+)\ (\[[^]]+\].mkv) ]]; then
    # We've now split our filename into:
    prefix="${BASH_REMATCH[1]}"
    name="${BASH_REMATCH[2]}"
    serial="${BASH_REMATCH[3]##0}"
    suffix="${BASH_REMATCH[4]}"
    # Some sanity checks
    if (( serial <= 0 )); then
      log_skip "$f" "Invalid serial# '$serial' for $name"; continue
    fi
    # Let's look up the episode
    episode="$(sed -n ${serial}p "$lookup_dir/${name}.lst")"
    if [[ -z "$episode" ]]; then
      log_skip "$f" "Can't find serial# '$serial' for $name"; continue
    fi
    mv -vn "$f" "${f%/*}/${prefix} ${name} - ${episode} ${suffix}"
  fi
done

А вот бонусный скрипт, который генерирует эти файлы поиска, учитывая количество эпизодов в каждом сезоне:

#!/bin/bash
# USAGE: generate_series <#eps>...
while [[ $1 ]]; do
  ((s++))
  for e in $(seq "$1"); do
    printf "S%02dE%02d\n" $s $e
  done
  shift
done

И все это проверить:

$ ls
canon_vids  generate_series

# Create One Piece lookup table
$ mkdir lookup
$./generate_series 8 22 17 13 9 22 39 13 52 31 99 56 100 35 62 49 118 33 96 > lookup/One\ Piece.lst
$ tail -n lookup/One\ Piece.lst
S19E92
S19E93
S19E94
S19E95
S19E96
$ wc -l lookup/One\ Piece.lst 
874 lookup/One Piece.lst

# Create fake One Piece MKVs (adding a couple more to trigger errors)
$ mkdir op
$ for i in $(seq 0 876); do touch "$(printf "op/[TAG] One Piece - %02d [quality].mkv" $i)"; done
$ ls op | wc -l
877

# And now, the moment of truth...
$./canon_vids op
renamed 'op/[TAG] One Piece - 724 [quality].mkv' -> 'op/[TAG] One Piece - S17E97 [quality].mkv'
renamed 'op/[TAG] One Piece - 86 [quality].mkv' -> 'op/[TAG] One Piece - S06E17 [quality].mkv'
...
renamed 'op/[TAG] One Piece - 819 [quality].mkv' -> 'op/[TAG] One Piece - S19E41 [quality].mkv'
SKIP (op/[TAG] One Piece - 00 [quality].mkv): Invalid serial# '0' for One Piece
renamed 'op/[TAG] One Piece - 52 [quality].mkv' -> 'op/[TAG] One Piece - S04E05 [quality].mkv'
...
renamed 'op/[TAG] One Piece - 865 [quality].mkv' -> 'op/[TAG] One Piece - S19E87 [quality].mkv'
SKIP (op/[TAG] One Piece - 875 [quality].mkv): Can't find serial# '875' for One Piece
renamed 'op/[TAG] One Piece - 295 [quality].mkv' -> 'op/[TAG] One Piece - S11E69 [quality].mkv'
...
renamed 'op/[TAG] One Piece - 430 [quality].mkv' -> 'op/[TAG] One Piece - S13E49 [quality].mkv'
SKIP (op/[TAG] One Piece - 876 [quality].mkv): Can't find serial# '876' for One Piece
renamed 'op/[TAG] One Piece - 655 [quality].mkv' -> 'op/[TAG] One Piece - S17E28 [quality].mkv'
...
renamed 'op/[TAG] One Piece - 93 [quality].mkv' -> 'op/[TAG] One Piece - S07E02 [quality].mkv'
renamed 'op/[TAG] One Piece - 278 [quality].mkv' -> 'op/[TAG] One Piece - S11E52 [quality].mkv'

# OK, but what happens when we run it again? Will our files be further renamed? Will Luffy find One Piece?
$./canon_vids op 
SKIP (op/[TAG] One Piece - 00 [quality].mkv): Invalid serial# '0' for One Piece
SKIP (op/[TAG] One Piece - 875 [quality].mkv): Can't find serial# '875' for One Piece
SKIP (op/[TAG] One Piece - 876 [quality].mkv): Can't find serial# '876' for One Piece

# Of course! Those files were never found in the lookup table, so they're still
# candidates for renaming. More importantly, no other files were touched.
1
28.04.2021, 23:37

Теги

Похожие вопросы