쇼 스캔 시간 단축

기본 시리즈 스캐너

기본 PLEX series scanner에는 mp4 파일에서 메타정보를 읽는 코드가 들어 있습니다. 새로운 파일이 추가되었을 경우 추가된 파일만 어떻게 할 것 같겠지만 PLEX는 그렇게 동작하지 않습니다.

mp4 파일 10개가 들어 있는 쇼에 파일 하나가 더 추가되어 스캔할 경우, 기존 10개의 파일 모두 다시 메타정보를 읽어서 혹시 메타에 있을지도 모르는 시즌과 에피소드 번호를 읽는 구조입니다. 이는 폴더 내에 파일이 추가, 삭제, 시간 변경 등 스캐너 실행 상황이 발생할 때마다 메타정보를 계속해서 읽습니다.

파일 IO가 발생하기에 당연히 시간이 늘어나는데 로컬에서는 별문제가 되진 않겠지만, 마운트 하여 사용하는 경우 그 시간이 파일 수에 비례하여 계속 늘어납니다. 마운트 된 드라이브내의 쇼를 한번 스캔한 후 PMS User 폴더내의 \Plex Media Server\Logs\Plex Media Scanner.log 파일을 한번 열어보시면,

11:27:26.135 [16332] DEBUG - Adding file for scanner: "P:\video\[방송중]\데일리\좋은아침\좋은아침.E5465.181224.1080p-SP.mp4"
11:27:26.329 [16332] DEBUG - Directory had 36 files, database had 35 files, can't skip.
11:30:40.378 [16332] DEBUG - * Scanning 좋은아침 Season 1 Episode 5465

이런 식으로 can’t skip 부분부터,  다음 줄 로그까지의 시간이 스캐너가 동작한 시간입니다.

기존 코드로 3분 14초 걸렸는데, mp4 메타 읽는 부분만 제거하면

11:40:54.810 [6008] DEBUG - Directory had 37 files, database had 36 files, can't skip.
11:40:55.169 [6008] DEBUG -       * Scanning 좋은아침 Season 1 Episode 5429

0.3초 걸립니다.

저의 경우 적용 전 gsuite 내의 파일은 파일당 5초 정도가 걸렸는데, 적용 후에는 전체 파일이 3초 안에 다 끝납니다.

이게 시간도 시간이지만, 제가 최근 gdrive 다운로드 제한이 자주 발생했었는데,

방송 파일이 늘어나면서, 이 스캐너 때문에 시간당 API 호출 제한을 초과했으리라 강하게 의심됩니다.

gsuite 사용하시는 분들이라면 반드시 기본 스캐너를 변경하시기 바랍니다.

일단 이것만 적용해도 기존 스캔 시간 대비 절반 정도 되는 것 같습니다.

국내 방송용 스캐너라고 이전에 올린 적이 있었는데, 그때는 단순히 원 소스에 4자릿수 에피소드 인식 같은 간단한 것만 추가했던 거라 자세히 못 봤던 게 후회되네요. 아무튼 그 파일을 쓰시는 분들도 다시 받아서 사용하시기 바랍니다.

 – 다운로드 및 적용 방법 : https://github.com/soju6jan/SJVA-Scanners

https://github.com/soju6jan/SJVA-Scanners/blob/master/Plex%20Series%20Scanner%20Patch.py

 * raw 버튼에서 마우스 오른쪽 클릭 -> 다른 이름으로 저장 누르시면 다운로드 됩니다.

 * 기본적으로 Scanners 폴더, Series 폴더가 없으니 만드셔야 합니다.

스캐너란?

간혹 plex에 파일을 추가했는데 반응이 없다든지 매칭이 안된다라는 질문 글이 있습니다. 

이때 이것저것 에이전트를 변경하면서 매칭되는 에이전트를 찾는 분들이 계시는데….. 에이전트를 변경해서 해결될 문제가 아닙니다.

간단히 스캐너에 대해 설명드리자면.

기본적인 PLEX 스캔 흐름(Show)

 – PMS 스캐너(독립된 실행파일) 스캔 시 폴더를 탐색하여 파일 리스트를 만듭니다. 

 – 이 폴더 내의 쇼가 기존 정보과 달라 스캔이 필요하다면 스캐너에 파일 목록을 넘깁니다.

 – 스캐너는 받은 파일 목록을 가지고 쇼 이름, 시즌, 에피 넘버 목록을 작성합니다.

 – PMS 스캐너는 미디어 목록을 받고 기존 저장된 정보와 매칭하고, 필요하다면 FFMPEG를 이용해 파일을 분석합니다.

 – 또 메타를 업데이트해야 할 상황이라면 섹션에 맞는 에이전트에게 쇼 이름을 넘겨서 메타정보를 업데이트합니다.

대충 이런 구조인데 에이전트 입장에서는 이 쇼에 어떤 파일이 들어와 있는지 알 수 없이 그냥 메타데이터만 만들어 놓습니다. (알려면 알 수도 있으나 논외) 예를 들어 무한도전 100회 파일이 하나 있어 라이브러리 등록을 했다고 한다면, 실제 메타 정보에는 그 파일에 해당하는 에피소드 줄거리만 있는 게 아니라 모든 에피소드 줄거리 정보를 저장해 놓고 있습니다. (제작자마다 다르게 구현 가능)

추후 99회 파일이 들어온다면 메타데이터 새로고침을 안해도 자동으로 줄거리가 뜹니다. (실행파일 옵션에서 메타새로고침 없이 스캔만 가능) 즉, 에이전트는 메타데이터 전체 리스트를 만들어 놓는 역할이고 스캐너는 그 리스트에 들어가도록 해주는 역할입니다.

폴더명, 파일명을 토대로 리스트업은 스캐너가 하기에 어떻게 작성하냐에 따라 전혀 다르게 동작할 수도 있습니다.

기본적인 네이밍 규칙을 적용한게 기본 스캐너입니다.

https://support.plex.tv/articles/categories/media-preparation/naming-and-organizing-tv-shows/

국내 방송 다운로드 폴더 전용 스캐너

위 링크에서 다운로드 폴더 전용 스캐너를 적용하면, 위의 규칙과 상관없이 원하는 결과를 얻습니다.

이 스캐너는 폴더명 대신 파일명에서 쇼 이름을 추출하여 리스트업합니다.

 – 다운로드 폴더입니다.

– 이 폴더를 download 스캐너를 적용해줍니다.

– 결과

이외에도 약간이나마 gsuite 스캔 시간을 줄이는 방법과 부분 스캔 방법이 있으니 기회가 되면 설명드리겠습니다.

미디어 파일 위치 변경

찾아보시면 PMS을 변경할 경우 메타데이터를 옮기는 방법은 많습니다. 그런데 실제 파일 위치를 변경하는 방법은 없어 소개해드립니다.

먼저 실제 파일은 옮길 위치에 변경하시거나 다른 드라이브로 마운트 하신 후 진행하세요

순서

 1) PMS 중단

 2) Plex user 폴더 내의 Plex Media Server\Plug-in Support\Databases\com.plexapp.plugins.library.db 파일 백업

 3) DB Browser for sqlite 설치 (https://sqlitebrowser.org/)  이 외 sqlite 지원 앱 이용 가능

 4) 프로그램 실행 후 파일 -> 데이터베이스 열기에서 db파일 선택

   – 섹션 위치 변경

     * 두번째 탭 데이터 보기에서 테이블 section_locations 선택

     * 섹션 root_path 직접 수정

   – 실제 미디어 파일 위치 정보가 있는 테이블 : media_part

이 테이블에서 file 필드 값을 변경해주면 되는데 일괄로 하려면 SQL 쿼리를 입력해야 합니다.

4번째 탭 SQL 실행에서 쿼리 입력 후 실행해주면(F5)

 file위치가 변경되었습니다.

 5) 변경사항 저장하기를 누른 후, PMS 실행 

 6) 스캔 등 아무것도 하지 않은 상태에서 파일 재생이 잘 되면 성공

쿼리

UPDATE media_parts
SET file = REPLACE(file, 'Z:\한국\드라마', 'Y:\Drama')
WHERE file LIKE('Z:\한국\드라마%')

어렵지 않습니다. 그냥 경로만 적으면 된다고 생각하세요. 잘못되더라고 DB 백업을 해놨기에 걱정없습니다.

위 쿼리는 file명에서  ‘Z:\한국\드라마’ 로 시작하는 부분을  ‘Y:\Drama’ 로 변경하겠다는 의미입니다.

WHERE 부분은 조건문인데 WHERE file LIKE(‘Z:\한국\드라마\강남스캔들%’)이라고 하면 강남스캔들만 Y:\Drama로 바뀌게 됩니다.

댓글로 질문 주시면 답변해드리겠습니다.

gsuite 잦은 밴으로 인하여 라이브러리를 분리할 때 적용했는데 잘 됩니다.

os를 변경해도 split 문자만 변경해주면 잘 되지 않을까 생각되네요.

참고로 gsuite에서 팀드라이브를 사용하여 파일 옮기실때 구글 웹은 믿지 마시고 상당히 오랜시간 기다리시면서 작업하시기 바랍니다.

To be continued…

wait-for-it.sh 사용에 관하여

https://ohgyun.com/749

version: ‘2’
services:

nginx:
image: nginx
volumes:
– ./nginx/nginx.conf:/etc/nginx/nginx.conf
links:
– node:node
ports:
– “80:80”
depends_on:
– node

node:
image: [YOUR IMAGE]
volumes:
– ./node/src/app:/src/app
links:
– mongo:mongo
ports:
– “3000”
depends_on:
– mongo
entrypoint: ./wait-for-it.sh mongo:27017

mongo:
image: mongo
ports:
– “27017”

부모 vhd 만들기..

부모 vhd만들기..

diskpart
list volume
select volume 0
creat vdisk file=c:\VHD\win10_parent.vhd maximum=60000 type=expandable
attach vdisk
exit

부모에 설치다하고…자식만들기
diskpart
create vdisk file=”c:\VHD\child_keizno.vhd” parent=”c:\VHD\win10_parent..vhd”
create vdisk file=”c:\VHD\child_keizno1.vhd” parent=”c:\VHD\child_keizno.vhd”
이런식…

WP Extra File Types 설치로 업로드 제한 풀기

워드프레스 플러그인 WP Extra File Types 설치

플러그인을 설치하고 활성화한 다음 설정 > Extra File Types에서 업로드를 허용할 파일 유형(예: .woff 파일 타입)의 체크란을 체크하고 하단의 ‘변경 사항 저장’을 누르면 됩니다.

제한된 파일 유형 허용하기

업로드를 허용하려는 파일 유형이 리스트에 없는 경우에는 사용자 정의 파일 유형 (Custom File Type)을 추가할 수 있습니다.

사용자 정의 파일 유형 추가하는 방법
ex) hwp .hwp application/hangul

하단의 Add your custom file types (사용자 정의 파일 타입 추가) 옆의 더하기 아이콘을 클릭하여 파일 타입을 추가하도록 합니다.

indirect로 이름상자중에 고르기

  1. 데이터 유효성검사/목록/수식에서 이름상자 띄우기 단축기 F3인데..이름을 사전에 지정해야함. 단, 표이름은 안되는 것 같음.
  2. 데이터 유효성검사 / 목록 / 수식에 =indirect(“이름”)
  3. 그냥 이름상자 열기는 Ctrl+F3임..
  4. 이름관리자 열어서 동적범위 지정하는 공식은
    = offset(시작좌표찍고 콤마3개 counta(행범위 즉 아래로) 콤마 counta(열범위 즉 오른쪽으로) 괄호 한번더 닫고)
    • =offset($A$1,,,counta($a$1:$a$100),counta($a$1:$aa$1))

VHD 관리하기..

자식 VHD를 부모 VHD에 합치기…

sel vdisk file=”자식VHD파일 경로”
merge depth=1

이렇게 하면 된다.
주의 할점은 부모노드가 아닌 “자식 VHD 파일” 을 지정해야 한다는점.

이렇게 하면 병합할 양에 따라 어느정도 병합시간이 지난후…

파일을 보면…

부노 노드의 용량이 자식노드 수준으로 커진것을 볼 수 있다.
만약 용량이 변화가 없다면, 제대로 안된것이므로 다시 한번 시도를…
참고로, 부모노드 파일이 “읽기전용” 이면 작업이 안된다.

하여튼, 이후로는 부모노드를 부팅 디스크로 지정하고 부팅하면, 병합당시 자식노드의 환경과 동일한 상태로 부팅이 된다.

자식 VHD 만들기

diskpart

create vdisk file=자식.vhdx parent=부모.vhdx

폴더 경로\VHD이름.vhdx 이런식으로 적으면 된다.

예를 들어, 아래와 같이 입력한다.

create vdisk file=F:\child.vhdx parent=F:\win10.vhdx

Teens use apps to keep secrets?

Cras accumsan elit augue, sit amet vestibulum turpis fringilla nec. Etiam eu dictum tortor. Sed feugiat lacus non ultricies pulvinar. Nam ac mauris ut nisi euismod tempus. Mauris molestie vel diam et imperdiet. Interdum et malesuada fames ac ante ipsum primis in faucibus. Curabitur varius condimentum risus nec efficitur. Integer porta a justo eu porta. Pellentesque sed ultricies risus, eu porttitor est.