이것을 "표준" 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에서 이 작업을 수행했다면 다음과 같은 작업을 수행했을 것입니다.
- TV 쇼 폴더의 정렬된 목록을 가져옵니다(이전 쇼에는 일반적으로 연도가 없지만 이후 쇼에는 연도가 있습니다).
- 각 폴더 정규식에 대해 종료 연도를 대체합니다( 시작 연도만 포함
/-\d*\)/
하고""
Plex 폴더와 대소문자를 구분하지 않고 일치합니다. 일치하지 않으면 연도 없이 시도합니다. - 일치하는 항목이 없으면 2로 돌아가서 다시 시도하세요.
- 패턴과 일치하는 Plex 버전 파일 목록을 가져옵니다
/S\d+E\d+\.mp4/
(모든 것을 리핑하고 스트림을 필터링하지 않았을 때의 자막이 포함될 수 있음). - 각 파일에 대해 시즌 번호를 얻은 다음
Season x
폴더에서 동일한 접두어를 검색하세요. 시즌 0이면Specials
폴더도 검색해 보세요. - 일치하는 이름의 확장자를 .mp4로 바꾸고, 바꾸지 않은 경우 .m4v로 바꿉니다.
- Plex 파일을 새 경로+이름에 복사합니다.
- 일치하는 파일을 제거한 다음 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 최적화 버전을 자동으로 사용하면 안 됩니다.
- 부정한
- 세척
- 자막 및/또는 챕터 없음
- 디인터레이스되지 않음
- 귀하 또는 다른 시청자가 (더 이상) 원하지 않는 언어로 된 자막이 내장되어 있는 경우
이는 알려진 버그에 따라 다르거나 입력이 트랜스코딩 소프트웨어 또는 iGPU의 필요한 인코딩 프로필에 100% 맞지 않을 수도 있습니다. 따라서 더 나은 방법은 최적화된 버전을 보고 개별적으로 교체하는 것입니다. 원본 파일을 잃어버리는 것은 저장 공간을 절약하는 것보다 더 큰 문제가 될 수 있습니다. 비용 때문에 공간을 절약하는 것이 목표라면 너무 많은 비디오를 다시 트랜스코딩하면 전기 요금이 늘어나고 스토리지 비용은 시간이 지남에 따라 점점 더 저렴해지고 있다는 점을 잊지 마십시오.
그리고 마지막으로대부분의 재트랜스코딩은 품질 저하를 의미합니다.그리고 그것의올바른 트랜스코딩 옵션을 찾는 것은 쉬운 일이 아닙니다.품질과 파일 크기에 대한 요구 사항을 충족합니다.