기존 부분 일치 파일 이동(Plex 트랜스코더)

기존 부분 일치 파일 이동(Plex 트랜스코더)

이것을 "표준" bash 스크립트(QNAP에서 실행)로 작성하는 방법을 찾으려고 노력하고 있지만 어디서부터 시작해야 할지 모르겠습니다. NodeJS에서 할 수 있지만(회사에서 항상 사용하기 때문에) 실제로는 그렇게 할 수 없습니다. 차라리 뭔가를 가지세요.

나는 실제 스크립트가 아닌 이 작업을 수행하는 방법에 대한 지침을 찾고 있습니다(그래도 멈추지 마세요) ;-)

내장된 Plex를 사용하여 파일 변환(호환성 등을 위해) - 다양한 영화 파일(가장 일반적으로 .avi, .mp4 또는 .mkv 확장자를 사용)이 포함된 폴더 트리를 가져와 .mp4로 변환합니다. 문서는 약간 다른 경로를 사용합니다. .

Plex 출력 파일을 이동하는 대신 Plex가 자체 정리하도록 하여 입력 파일로 다시 복사하고 싶습니다.

예제 구조 - from...

Plex 버전/모바일에 최적화됨/내 TV 쇼/S01E01.mp4

...도착하다...

내 TV 쇼(1990-1995)/시즌 1/s01e01 내 에피소드 이름.mkv

노트:

  • 루트 경로는 두 가지 모두 동일합니다(내 설정의 경우 다른 사람이 Plex Versions해당 폴더를 내부에 포함 할 수 있습니다 My TV Show (1990-1995). 이 스크립트는 완료되면 GitHub에 게시됩니다 등).

  • TV 프로그램 제목은 변경될 수 있습니다. 괄호 안에 시작 날짜와 종료 날짜(또는 -진행 중인 경우 이후 날짜)를 입력했습니다. Plex는 동일한 이름을 가진 프로그램이 여러 개 있는 경우 시작 연도가 있을 수 있는 "공식" 이름을 사용합니다.

  • 위의 내용을 고려하면 기본 이름은 같지만 연도가 다른 여러 쇼가 있을 수 있습니다.

  • 대상 기본 이름은 Season x폴더에 있고(선행 분기 번호 없음 0) 동일한 접두사를 갖습니다.

  • 시즌 0이라면 아마 Specials/폴더에 있을 겁니다. (언젠가는 일관되게 만들겠습니다.)

  • 원본 파일 이름이 .mp4 파일 이름인 경우 복사된 대상 파일의 파일 이름은 .m4v여야 합니다.

  • 새 파일을 복사한 후 원본 파일을 삭제할 수 있습니다(복사 소스와 대상 파일은 유지).

NodeJS에서 이 작업을 수행하려면 다음과 같이 해야 합니다.

  1. TV 쇼 폴더의 정렬된 목록을 가져옵니다(이전 쇼에는 일반적으로 연도가 없지만 이후 쇼에는 연도가 있습니다).
  2. 각 폴더에 대해 종료 연도를 정규식으로 바꿔 시작 연도만 /-\d*\)/포함 ""하고 Plex 폴더를 대소문자를 구분하지 않고 일치시키세요. 일치하는 항목이 없으면 연도를 포함하지 마세요.
  3. 일치하는 항목이 없으면 2로 돌아가서 다시 시도하세요.
  4. 패턴과 일치하는 Plex 버전 파일 목록을 가져옵니다 /S\d+E\d+\.mp4/(아마도 모든 것을 추출하고 스트림을 필터링 해제했을 때의 자막이 포함되어 있을 수 있음).
  5. 각 파일에 대해 시즌 번호를 가져온 다음 Season x폴더에서 동일한 접두어를 검색하세요. 시즌 0이라면 해당 Specials폴더도 검색해 보세요.
  6. 일치하는 이름의 확장자를 .mp4로 바꾸거나 대체가 이루어지지 않은 경우 .m4v로 바꿉니다.
  7. Plex 파일을 새 경로+이름에 복사합니다.
  8. 일치하는 파일을 삭제하고 5를 반환합니다.

이제 명백한 연결 해제와 동일한 이름 변수를 사용할 수 있습니다. 제가 도움을 받고 싶은 부분은 다음과 같습니다.

초기 폴더를 일치시키는 가장 좋은 방법(1-3)은 무엇입니까, 아니면 더 나은 바로 가기가 있습니까?파일이 이미 존재하는 경우에만 대상 폴더에 복사합니다. 하지만 소스 파일의 파일 확장자는 다릅니다.)

파일이 존재하는지 확인하고, 존재하지 않으면 다른 확장자 조합을 시도해 보십시오.

편집: 30TB가 넘는 파일의 경우 Plex는아니요원본 문서를 교체하세요(2015년부터 공개적으로 요청됨).

답변1

개인적으로 메인 Plex 라이브러리 폴더의 파일을 변환하려면 FFmpeg를 사용하는 것이 좋습니다. 대략 다음과 같습니다.

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

원본 파일의 디렉터리에 최적화된 버전을 저장하도록 Plex를 설정할 수도 있습니다.

즉, 이 코드는가능한당신이 찾고 있는 것을 수행하지만 완전히 테스트되지 않았습니다.

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

답변2

다음과 같은 이유로 Plex 최적화 버전을 자동으로 사용하면 안 됩니다.

  1. 부패
    여기에 이미지 설명을 입력하세요.
  2. 쓰지 않음
    여기에 이미지 설명을 입력하세요.
  3. 자막 및/또는 챕터 없음
    여기에 이미지 설명을 입력하세요.
  4. 인터레이스 없음
    여기에 이미지 설명을 입력하세요.
  5. 귀하 또는 다른 시청자가 원하지 않는 언어로 자막을 굽습니다.

이는 알려진 버그에 따라 다르며, 입력이 트랜스코딩 소프트웨어 또는 iGPU에서 요구하는 인코딩 프로필에 100% 적합하지 않을 수도 있습니다. 따라서 더 나은 접근 방식은 최적화된 버전을 살펴보고 개별적으로 교체하는 것입니다. 원본 파일을 잃는 것은 저장 공간을 절약하는 것보다 더 큰 문제가 될 수 있습니다. 비용 때문에 공간을 절약하는 것이 목표라면 너무 많은 비디오를 다시 트랜스코딩하면 전기 요금이 늘어나고 저장 공간은 시간이 지남에 따라 저렴해진다는 점을 잊지 마세요.

마침내대부분의 재트랜스코딩은 품질 저하를 의미합니다.그리고 그것의올바른 트랜스코딩 옵션을 찾는 것은 쉬운 일이 아닙니다.품질 및 파일 크기 요구 사항을 충족하십시오.

관련 정보