Mova arquivos parcialmente correspondentes que já existem (transcodificador Plex)

Mova arquivos parcialmente correspondentes que já existem (transcodificador Plex)

Estou tentando descobrir como escrever isso como um script bash "padrão" (executando em um QNAP), mas não sei por onde começar - posso fazer isso em NodeJS (já que o uso o tempo todo para meu trabalho) , mas realmente preferiria ter alguma coisa.

Estou procurando dicas sobre como fazer isso, em vez de um script real (embora não deixe que isso o impeça) ;-)

Usando os arquivos convertidos Plex integrados (para compatibilidade, etc.) - a entrada para isso é uma árvore de pastas com vários arquivos de filme (as extensões são mais comumente .avi, .mp4 ou .mkv), que então transforma em um arquivo .mp4 em um caminho um pouco diferente.

Quero copiar (não mover - deixarei o Plex limpar sua própria bagunça) os arquivos de saída do Plex de volta aos arquivos de entrada.

Estrutura de exemplo - de...

Versões Plex/Otimizado para celular/Meu programa de TV/S01E01.mp4

...para...

Meu programa de TV (1990-1995)/Temporada 1/s01e01 Meu nome do episódio.mkv

Notas:

  • O caminho raiz para ambos é o mesmo (para minha configuração, outros podem ter a Plex Versionspasta dentro da My TV Show (1990-1995)pasta - este script irá para o GitHub quando terminar, etc.).

  • O nome do programa de TV pode mudar. Coloquei a data de início e de término (ou um final, -se estiver em andamento) entre colchetes. Plex usará o nome “oficial”, que poderá ter ano de início se houver mais de um programa com o mesmo nome.

  • Tendo em mente o que foi dito acima, posso ter vários programas com o mesmo nome base, mas em anos diferentes.

  • O nome base de destino estará na Season xpasta (número da temporada sem início 0) e terá o mesmo prefixo.

  • Se for a temporada 0, então pode estar na Specials/pasta (vou deixar as coisas consistentes em algum momento).

  • Se o nome do arquivo original tiver um nome de arquivo .mp4, o arquivo de destino copiado deverá ter um nome de arquivo .m4v.

  • Depois de copiar o novo arquivo, o arquivo original pode ser removido (deixando os arquivos de origem e de destino da cópia).

Se eu estivesse fazendo isso no NodeJS, faria algo como o seguinte:

  1. Obtenha uma lista ordenada de pastas de programas de TV (os programas anteriores geralmente não têm anos, enquanto os posteriores têm).
  2. Para cada regex de pasta, substitua os anos finais ( /-\d*\)/para ""incluir apenas o ano de início e a correspondência sem distinção entre maiúsculas e minúsculas nas pastas Plex. Se não houver correspondência, tente sem ano.
  3. Se nenhuma correspondência for encontrada, volte para 2 e tente novamente.
  4. Obtenha uma lista de arquivos de versão do Plex que correspondem ao padrão /S\d+E\d+\.mp4/(pode haver legendas incluídas de quando eu apenas copiei tudo e não filtrei os streams).
  5. Para cada arquivo, obtenha o número da temporada e procure na Season xpasta o mesmo prefixo. Se for a temporada 0, pesquise também na Specialspasta.
  6. Substitua a extensão no nome correspondente por .mp4; se nenhuma substituição for feita, substitua-a por .m4v.
  7. Copie o arquivo Plex para o novo caminho+nome.
  8. Remova o arquivo correspondente e volte para 5.

Agora posso fazer variáveis ​​para nomes, o mesmo para a desvinculação óbvia - o que eu gostaria de ajuda é -

A melhor maneira de fazer com que a pasta inicial corresponda (1-3 é a melhor maneira ou existe um atalho melhor? Olhando para este:Copie os arquivos para uma pasta de destino somente se os arquivos já existirem. mas os arquivos de origem têm uma extensão de arquivo diferente)

Verificando se um arquivo existe e, caso contrário, tente diferentes combinações de extensões.

editar: há mais de 30 TB de arquivos e o Plex temnãosubstituir os arquivos originais (há uma solicitação aberta para isso desde 2015).

Responder1

Eu pessoalmente sugeriria usar o FFmpeg para converter os arquivos da pasta principal da biblioteca Plex. Algo como:

set -s globstar;

for f in ./**/*.{avi,mp4,mkv}; do
    ffmpeg -i "$f" -c:a aac -c:v libx264 -preset slow "${f%.*}_b.mp4"
    rm "$f"
    mv "${f%.*}_b.mp4" "${f%.*}.mp4"
done

Você também pode configurar o Plex para armazenar sua versão otimizada no diretório dos arquivos originais.

Dito isto, este códigopoderfaça o que você está procurando, mas não foi testado:

Plex_Main="/Main/Plex/Dir/"
Optimized="/Optimized/Versions/Dir/"

for DIR in "$Optimized"/*; do
    if [[ -d "$DIR" ]]; then
        SHOW_MATCHES=("$Plex_Main"/*"$(basename "$DIR")"*/)

        # If there is one, and only one, match
        if [[ ${#SHOW_MATCHES[@]} -eq 1 ]]; then
            # The non-optimized show path
            SHOW_PATH="$Plex_Main"/*"$(basename "${DIR[0]}")"*

            for f in "$DIR"/*.mp4; do
                # Remove file extension
                EP_ID="${f%.*}"

                EP_MATCHES=("$SHOW_PATH"/*"${EP_ID[0]}"*)

                if [[ ${#EP_MATCHES[@]} -eq 1 ]]; then
                    ORIG_FILE="${EP_MATCHES[0]}"
                    cp "$f" "$SHOW_PATH/${ORIG_FILE%.*}.mp4"
                fi
            done
        fi
    fi
done

Responder2

Você não deve usar automaticamente as versões otimizadas do Plex, pois poderiam ser:

  1. Corrupto
    insira a descrição da imagem aqui
  2. Lavado
    insira a descrição da imagem aqui
  3. Sem legendas e/ou capítulos
    insira a descrição da imagem aqui
  4. não desentrelaçado
    insira a descrição da imagem aqui
  5. com legendas gravadas em um idioma que você ou outro espectador não deseja (mais)

Isso depende de bugs conhecidos ou talvez a entrada não se ajuste 100% ao perfil de codificação necessário do software de transcodificação ou iGPU. Portanto, o melhor método seria visualizar as versões otimizadas e substituí-las individualmente. Perder o arquivo original pode ser um problema maior do que economizar espaço de armazenamento. Se o seu objetivo é economizar espaço por causa dos custos, não se esqueça que a retranscodificação de tantos vídeos aumenta a conta de luz e o armazenamento está ficando cada vez mais barato com o tempo.

E finalmentea maior parte da retranscodificação significa perda de qualidadee os seusnão é uma tarefa fácil encontrar as opções de transcodificação corretasatendendo às suas necessidades de qualidade e tamanho de arquivo.

informação relacionada