JAV

jav:// fvpi (Final stage)

Rina Kawakita 2018. 7. 29. 23:52

~/.local/bin/movieThumbnailer

#!/bin/env bash
#####################################################################
# Thumbnail Screenshot
#####################################################################
#
# This script takes screenshots of a movie
# Depends on mplayer, imagemagick and calc
#
# Original: Made by Starlite (http:starl1te.wordpress.com)
# https:starl1te.wordpress.com/2008/01/31/movie-thumbnailer
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see .
#
# For Attacker JAV Screenshot. media info,extra info,logo,timestamp..
# Completely Update & Modified: by nietz (2018-05-01)
#####################################################################

usage="Type 'movieThumbnailer -h' for help"
#logo="/home/nietz/redfox-logo.png"
#logo="/home/nietz/rarbg-logo.png"
logo="/home/nietz/vixen-white.svg"
font="/usr/share/fonts/nerd-fonts-complete/ttf/M+ 2m bold Nerd Font Complete.ttf"   ## 너드폰트, 일본어,영어,이미지 폰트
#font="/usr/share/fonts/noto-cjk/NotoSansCJK-Bold.ttc"  ## 한중일 폰트
font_sub="/home/nietz/.local/share/fonts/SpoqaHanSans_all/SpoqaHanSans_jp_original/SpoqaHanSansJPBold.ttf"   ## 한일 폰트
#font="/home/nietz/.local/share/fonts/SpoqaHanSans_all/SpoqaHanSans_original/SpoqaHanSansBold.ttf" ## 한일 폰트

_help(){
echo -e "\nusage: movieThumbnailer [options] [file] ... [fileN]\n
 Options:
  -t 


~/zshrc.d/aliases.zsh

# Jav Thumbnail Screenshot with Info | very fast : $ fvpi [Video File Path]
function fvpi() {
    [[ !$# -eq 0 ]] || return;
    local inputfile="$1"
    local outputfile="`echo ${inputfile%.*}`-preview.jpg"
    local width="1920"
    local height="1080"
    local number="100"
    [[ $2 == "" ]] || { height=$2; \
        if [[ "$height" == "2160" ]]; then width="3840";
        elif [[ "$height" == "1080" ]]; then width="1920";
        elif [[ "$height" == "720" ]]; then width="1280";
        elif [[ "$height" == "480" ]]; then width="1200";
        else ; fi }
    [[ $3 == "" ]] || number=$3;

    # shot screenshot: -n갯수, -r가로너비, -s 시드모드, -k 타임스탬프모드, -l 로고모드, -m Manual모드 
    ${HOME}/.local/bin/movieThumbnailer -n${number} -r${width} -s -k -l "${inputfile}"

    # view screenshot by mpv
    if ( echo "${inputfile}" | grep -qi " "); then
        inputfile=`echo "${inputfile}" | sed 's/ /_/g'`
        outputfile="`echo ${inputfile%.*}`-preview.jpg"
    fi
    if [[ "`pwd`" == "`dirname "${outputfine}"`" ]]; then
        mpv --profile jjal ${outputfile} >/dev/null 2>&1
    else
        mpv --profile jjal $(basename ${outputfile}) >/dev/null 2>&1
    fi
}

# p7zip - Uncompressed, Folder_name Base64 Pass: $ 7zjav [directory]
function 7zjav () {
    [[ !$# -eq 0 ]] || return;
    dir_name="$1"
    #dir_name=$(echo $dir_name | sed -e 's/\/$//')
    dir_name=$(basename $dir_name)
    pass=$(echo -n "${dir_name}" | base64)
    7z a -p${pass} -scsUTF-8 -ssc -mx0 ${dir_name}.7z ${1}
}


$ fvpi SSPD-133.mkv






Summary 

$ ㅇㄷㅈㅅ rbd-794

1. javscrapy  스크립트: jav 라이브러리 폴더 경로에 품번폴더 생성, 마그넷 txt. json 파일 다운


2. javmoviescraper 스크립트: 포스터, 팬아트, nfo 메타데이터 생성


3. extra_meta 스크립트: 갤러리 이미지들, 예고편, extra nfo 내용 번역 추가(polt, tag, ...)


4. aria2c 스크립트: 해당 품번 폴더에 동영상 다운


5. 60fps 인코딩스크립트

  ~/.config/mpv/vapoursynth/IvtcDeinterlaceMvtools.vpy

# vim: set ft=python:
## Use MVTools's BlockFPS function to perform motion interpolation on the video in realtime.

import vapoursynth as vs
import functools
core = vs.get_core()

dst_fps = display_fps
#dst_fps = 60

def conditionalDeint(n, f, orig, deint):
    if f.props._Combed:
        return deint
    else:
        return orig

def conditionIVTC(clip):
    clip = core.vivtc.VFM(clip, 1)
    clip = core.vivtc.VDecimate(clip)

    deint = core.tdm.TDeintMod(clip, order=1, edeint=core.nnedi3.nnedi3(clip, field=1))
    combProps = core.tdm.IsCombed(clip)
    clip = core.std.FrameEval(clip, functools.partial(conditionalDeint, orig=clip, deint=deint), combProps)


    return clip

if "video_in" in globals():
    # realtime
    clip = video_in

    # Interpolating to fps higher than 60 is too CPU-expensive, smoothmotion can handle the rest.
    while (dst_fps > 60):
        dst_fps /= 2

    # Skip interpolation for >1080p or 60 Hz content due to performance
    if not (clip.width > 1920 or clip.height > 1100 or container_fps > 59):

        # f3kdb 
        if (clip.height <= 900):
            clip = core.std.Trim(clip, first=0, length=500000)
            clip = core.f3kdb.Deband(clip, output_depth=16, dynamic_grain=True, grainy=16, grainc=16)

        src_fps_num = int(container_fps * 1e8)
        src_fps_den = int(1e8)

        # Needed because clip FPS is missing
        clip = core.std.AssumeFPS(clip, fpsnum = src_fps_num, fpsden = src_fps_den)
        #print("Motion Interpolation from ",src_fps_num/src_fps_den,"fps to",dst_fps_num/dst_fps_den,"fps.")
else:
    # run with vspipe
    #clip = core.ffms2.Source(source=in_filename)
    clip = core.lsmas.LWLibavSource(source=in_filename, format="YUV420P8", cache=0)

    # resize
    #clip = core.resize.Bicubic(clip,1280,720,filter_param_a=0,filter_param_b=0.75)
    clip = core.resize.Spline36(clip,1280,720,filter_param_a=0,filter_param_b=0.75)

    # deinterlace
    #clip = conditionIVTC(clip)

    dst_fps=float(dst_fps)

dst_fps_num = int(dst_fps * 1e4)
dst_fps_den = int(1e4)

sup  = core.mv.Super(clip, pel=2, hpad=16, vpad=16)
bvec = core.mv.Analyse(sup, blksize=16, isb=True , chroma=True, search=3, searchparam=1)
fvec = core.mv.Analyse(sup, blksize=16, isb=False, chroma=True, search=3, searchparam=1)
#clip = core.mv.BlockFPS(clip, sup, bvec, fvec, num=dst_fps_num, den=dst_fps_den, mode=3, thscd2=12)

clip.set_output()


 -- ffmpeg example command 1

   $ vspipe --arg in_filename="/home/user/Video/Jav/RBD-794/RBD-794.mkv" --arg display_fps=60 --y4m /home/user/.config/mpv/vapoursynth/motioninterpolation.vpy - | ffmpeg -thread_queue_size 256 -i pipe:0 -i "/home/user/Video/Jav/RBD-794/RBD-794.mkv" -pix_fmt yuv420p10le -c:v libx265 -preset ultrafast -crf 18 -x265-params ctu=32:sao=0 -c:a libopus -b:a 64k -ac 2 -strict -2 -map 0:0 -map 1:1 -map_metadata -1 "RBD-794.Hevc.Opus.720p.Mi60.mkv"


  자막 확보 후, nfo에서 제목, 배우, 줄거리 추출 후 리먹싱


   $ ffmpeg -i "RBD-794.mkv" -i "RBD-794.kor.srt" -c:v copy -c:a copy -c:s copy -map_metadata -1 -map 0:0 -map 0:1 -map 1:0 -metadata title="RBD-794 - 美人モデル理性崩壊調教 飼育地獄 [天海つばさ] (2016)" -metadata actor="天海つばさ, Tsubasa Amami, 아마미 츠바사" -metadata description="新人モデル、川瀬翔子。駆け出しながらファッション誌の表紙に抜擢され、流行に敏感な女子達の 間で話題となり、人気はうなぎのぼり。そんな華やかな世界とは縁のない、コンビニ店員江藤のもとへ買い物にやって来た翔子に…。&#13;


신참 모델, Kawase Shoko. 그녀가 달아나고 패션에 민감한 소녀들 사이에서 화제가 된 동안 패션 잡지의 표지로 선정되었는데, 인기는 켈리입니다. 그런 멋진 세계와는 관계없는 점포 편의점 점원에게 쇼핑하러 온 쇼코에게 ....


Newcomer model, Kawase Shoko. It was selected as a cover of a fashion magazine while she was running out and became a topic among girls sensitive to fashion, popularity is an eelbee. To Shoko who came to shopping to a store convenience store clerk Eto who has nothing to do with such a gorgeous world ...." -metadata comment="From 4.95GiB, To Hevc 10bit 720p 60fps(Vapoursynth Motion-Interpolation) low-quality" -metadata:s:v language="jpn" -metadata:s:a language="jpn" -metadata:s:s:0 title="Korean-SRT" -metadata:s:s:0 language="kor" -disposition:s:s:0 default -strict -2 RBD-794.enc.mkv




 -- ffmpeg example command 2

## MIDE-051.metadata
content_id="MIDE-051"
bysubtitle="yumekanaeru"
year="2014"
title_original="パンチラ誘惑お姉さん"
actor_original="大橋未久"
actor="大橋未久(Miku Ohashi, 오하시 미쿠)"
title="MIDE-051 - パンチラ誘惑お姉さん [大橋未久] (2014)"
description="父子2人のむさ苦しかった生活。そんな家に就職活動で上京してきた従妹、未久ねえちゃんが泊まりにくることに!バラ色の共同生活は、チラリ連発のチンピク生活へ!食事中も、テレビ見てるときも、父の目を盗んで、僕にパンチラしてくる・・。萎えるヒマのない大橋未久との勃起生活をお楽しみください!

부자 2 명의 지저분 어려웠던 생활. 그런 집에 취직 활동에 상경 해 온 사촌 여동생, 未久 누나가 자러 오게! 장미 빛의 공동 생활은 살짝 연발 찐삐쿠 생활에! 식사 중에도, TV보고있을 때도, 아버지의 눈을 피해, 나에게 엿 해 온다 ··. 쇠약 틈없는 대교되지 않은 久과 발기 생활을 즐기세요!

The living life of two fathers' miserable weakness. A cousin who has been in Tokyo for a job hunting like that, Mr. Noboru will come to stay! A rosy collegiate life is a chirpy lump of chirping! Even during meals, when watching TV, I steal my father's eyes and I will panickle. Please enjoy the erection life with Morning Mai Ohashi with no wilting soil!"
copyright="https://www.moodyz.com/works/detail/mide051/"
source_size="4.92 Gib"
comment="From 4.92 GiB, To Hevc 10bit 720p 60fps low-quality - Vapoursynth Motion-Interpolation by Redfox"


## encoding
if [[ -e MIDE-051-encode.log ]];then
    mv MIDE-051-encode.log "MIDE-051-encode-backup.$(date).log"; touch MIDE-051-encode.log
else
    touch MIDE-051-encode.log
fi
vspipe --arg display_fps=60 \
    --arg in_filename="/run/media/nietz/data_02/MIDE-051/MIDE-051.wmv" \
    --y4m /home/nietz/.config/mpv/vapoursynth/mvtools.vpy - | \
    ffmpeg -v info -thread_queue_size 1024 \
    -i pipe:0 \
    -i ~/redfox-logo.png \
    -i "/run/media/nietz/data_02/MIDE-051/MIDE-051.wmv" \
    -filter_complex "overlay=main_w-overlay_w-5:main_h-overlay_h-5:enable=between(t\,55\,60),drawbox=y=ih/PHI:color=black@0.4:width=iw:height=48:t=fill:enable=between(t\,55\,60),drawtext=fontfile=/home/nietz/.local/share/fonts/SpoqaHanSans_all/SpoqaHanSans_subset/SpoqaHanSansBold.ttf:text='\[무료자막배포 레드폭스 닷컴\] Subtitle\: \by yumekanaeru':fontcolor=#ae835a@0.8:fontsize=32:x=(w-tw)/2:y=(h/PHI)+8:enable=between(t\,55\,60)" \
    -pix_fmt yuv420p10le \
    -c:v libx265 \
    -preset medium \
    -x265-params crf=16:ctu=32:vbv-maxrate=2000:vbv-bufsize=3000:min_keyint=60:keyint=600:sao=0:strong-intra-smoothing=0:no-info=1 \
    -c:a libopus -ac 2 -b:a 64k -vbr on -strict -2 \
    /run/media/nietz/data_02/MIDE-051/test.mkv |&
tee /dev/tty >> MIDE-051-encode.log


## Muxing
if [[ -e MIDE-051-muxing.log ]];then
    mv MIDE-051-muxing.log "MIDE-051-muxing-backup.$(date).log";touch MIDE-051-muxing.log
else
    touch MIDE-051-muxing.log
fi
ffmpeg -v info -i test.mkv -i MIDE-051.kor.srt -c copy \
    -metadata title="MIDE-051 - パンチラ誘惑お姉さん [大橋未久] (2014)" \
    -metadata actor="大橋未久, Miku Ohashi, 오하시 미쿠" \
    -metadata description="父子2人のむさ苦しかった生活。そんな家に就職活動で上京してきた従妹、未久ねえちゃんが泊まりにくることに!バラ色の共同生活は、チラリ連発のチンピク生活へ!食事中も、テレビ見てるときも、父の目を盗んで、僕にパンチラしてくる・・。萎えるヒマのない大橋未久との勃起生活をお楽しみください!

부자 2 명의 지저분 어려웠던 생활. 그런 집에 취직 활동에 상경 해 온 사촌 여동생, 未久 누나가 자러 오게! 장미 빛의 공동 생활은 살짝 연발 찐삐쿠 생활에! 식사 중에도, TV보고있을 때도, 아버지의 눈을 피해, 나에게 엿 해 온다 ··. 쇠약 틈없는 대교되지 않은 久과 발기 생활을 즐기세요!

The living life of two fathers' miserable weakness. A cousin who has been in Tokyo for a job hunting like that, Mr. Noboru will come to stay! A rosy collegiate life is a chirpy lump of chirping! Even during meals, when watching TV, I steal my father's eyes and I will panickle. Please enjoy the erection life with Morning Mai Ohashi with no wilting soil!"" \
    -metadata copyright="https://www.moodyz.com/works/detail/mide051/" \
    -metadata comment="From 4.92 GiB, To Hevc 10bit 720p 60fps low-quality - Vapoursynth Motion-Interpolation - by Redfox" \
    -metadata:s:v language="jpn" \
    -metadata:s:a language="jpn" \
    -metadata:s:s:0 title="Korean-SRT" \
    -metadata:s:s:0 language="kor" \
    -disposition:s:s:0 default \
    -strict -2 MIDE-051.mkv |&
tee /dev/tty | sed 's/.*\r//' >> MIDE-051-muxing.log
echo; fvpi MIDE-051.mkv


  -- h265 encoding scripts : https://github.com/Aanok/mediautils/blob/master/h265

#!/bin/bash
# run as 'ffmpeg [...] /dev/null 2>/var/log/ffmpeg.log &' for background execution
# to grab all streams from the first input file, inlcuding attachments, use '-map 0'
# to grab all attachments from the first input file use '-map 0:t'
# to encode with 10 bits of colour depth use '-pix_fmt yuv420p10'
# to strip the final dot and extension from $x use '${x%.*}'
# if you need to reencode audio use Opus: '-c:a libopus -vbr on -compression_level 10 -b:a 128000' (64kbps per channel)
# to set all audio streams to 2 channels: '-ac 2' (note this will just copy over FL and FR channels without any mixing)
# to convert 5.1 sound to stereo for all audio streams with good volume levels: '-af "pan=stereo|FL=FC+0.30*FL+0.30*BL|FR=FC+0.30*FR+0.30*BR"'
# to encode in 720p with blackbanding use '-s hd720 -aspect 16:9' (this for 720p output; aspect adds the black bands)

##### NB: ffmpeg was programmed by a herd of baboons, so tty options have to be passed as an array instead of a string


# conveniency function printing help/usage information
usage() {
	echo "Usage:"
	echo "$0
	--vaapi
	--map-args  (default: -map 0) (please pass them in single quotes)
	--opus [bitrate]
	--downmix-stereo
	--outdir  (default: ./reencode)
	--wipe-metadata [t] (pass t to preserve attachment metadata)
	--keep-size
	--quality  (default: 20 for libx265, as per ffmpeg for hevc_vaapi)
	--misc-args  (please pass them in single quotes)"
}

# convenciency function printing an error message when an options requries a non-empty argument following but there isn't one
missing_arg_error() {
	printf 'ERROR: "%s" requires a non-empty option argument.\n' "$1" >&2
}


##### PRELIMINARIES #####

# set defaults

# OUTPUT DIRECTORY
OUTDIR=reencode

# STREAM MAPPING
MAPARGS=('-map' '0')

# AUDIO CODEC
AUDIOCODEC="copy"

# VIDEO QUALITY
VQUAL="20"

# ARGUMENT VQUAL IS PASSED TO
VQUAL_ARG='-crf'

# VIDEO ENCODER
VENC=('-pix_fmt' 'yuv420p10' '-c:v' 'libx265' '-preset' 'slow')


# parse command-line options
while :; do
  case "$1" in
    -h|--help)
    # print usage information
      usage
      exit
      ;;
    --vaapi)
    # use hevc_vaapi encoder
      VENC=('-vaapi_device' '/dev/dri/renderD129' '-c:v' 'hevc_vaapi')
      VQUAL_ARG='-qp'
      VIDEOFILTER='format=nv12,hwupload'
      ;;
    --map-args)
    # set stream mapping
      if [ -n "$2" ]; then
      # mind the lack of quotes for $2: Bash is a special boy when strings start with -
        MAPARGS=( $2 )
        shift
      else
        missing_arg_error "--map-args"
        exit 1
      fi
      ;;
    --misc-args)
    # arbitrary arguments
      if [ -n "$2" ]; then
      # likewise lack of quotes, see above
        MISCARGS=( $2 )
        shift
      else
        missing_arg_error "--misc-args"
        exit 1
      fi
      ;;
    --opus)
    # set audio conversion to Opus
      AUDIOCODEC=('libopus' '-vbr' 'on' '-compression_level' '10' '-b:a')
      # check for optional bitrate argument
      # please note [[ instead of [, it is required for && and regex comparison
      if [[ -n "$2" && "$2" != -* ]]; then
        AUDIOCODEC=( "${AUDIOCODEC[@]}" "$2" )
        shift
      else
        AUDIOCODEC=( "${AUDIOCODEC[@]}" "128000" )
      fi
      ;;
    --downmix-stereo)
    # set downmix of 5.1 surround channels to stereo
      DOWNMIX=(-ac 2 -af 'pan=stereo|FL=FC+0.30*FL+0.30*BL|FR=FC+0.30*FR+0.30*BR')
      ;;
    --outdir)
    # set output directory
      if [ -n "$2" ]; then
        OUTDIR="$2"
        shift
      else
        missing_arg_error "--outdir"
        exit 1
      fi
      ;;
    --wipe-metadata)
    # start from blank slate metadata in output file (NB will preserve chapters)
      METADATAARGS=( "${METADATAARGS[@]}" '-map_metadata' '-1'  )
      # carry over attachment metadata, required if e.g. there are font attachments
      # please note [[ for &&
      if [[ -n "$2" && "$2" == "t" ]]; then
        METADATAARGS=( "${METADATAARGS[@]}" '-map_metadata:s:t' '0:s:t' )
        shift
      fi
      ;;
    --keep-size)
    # set if keeping source file dimensions
      KEEPSIZE="yes"
      ;;
    --quality)
    # set CRF/QP
      if [ -n "$2" ]; then
        VQUAL="$2"
        shift
      else
        mising_arg_error "--quality"
        exit 1
      fi
      ;;
    -?*)
    # unrecognized
      printf 'ERROR: Unkown option "%s"\n' "$1" >&2
      usage
      exit 1
      ;;
    *)
    # end of options, leave case statement
      break
      ;;
  esac
  shift
done


# RESOLUTION
# by default we enforce a 720p height, proportional width. For a 16:9 input, this will give 720p resolution.
# note HEVC requires even height size, hence the -2
if [ -z "$KEEPSIZE" ]; then
  if [ -n "$VIDEOFILTER" ]; then
    VIDEOFILTER="scale=w=-2:h=720,$VIDEOFILTER"
  else
    VIDEOFILTER="scale=w=-2:h=720"
  fi
fi


# add parameter in front if we're gonna use it
if [ -n "$VIDEOFILTER" ]; then
  VIDEOFILTER=( '-vf' "$VIDEOFILTER")
fi


# we always add CRF to video stream metadata
METADATAARGS=( "${METADATAARGS[@]}" '-metadata:s:v:0' "h265_crf=$VQUAL" )


# figure out a task name
shopt -s extglob
if [[ "$PWD" == */[sS]@(eason\ +([0-9])|pecial?(s))* ]]; then
	taskname="${PWD%%/[sS]@(eason\ +([0-9])|pecial?(s))*}"
	taskname="${taskname##*/}"
else
	taskname="${PWD##*/}"
fi

# figure out if background execution
if [[ $(ps -o stat= -p $$) == *+* ]]; then
	# Running in foreground
  STDINSRC='/dev/stdin'
  STDOUTDEST='/dev/stdout'
  STDERRDEST='/dev/stderr'
else
  # Running in background
  STDINSRC='/dev/null'
  STDOUTDEST='/dev/null'
  STDERRDEST='ffmpeg.log'
fi


##### WORK #####

# create output directory if it doesn't exist
if [ ! -d "$OUTDIR" ]; then mkdir -p "$OUTDIR"; fi

# compute list of input and output
declare -a INPUT
declare -a OUTPUT
i=0
for x in *.@(mkv|mp4|avi|flv|f4v|wmv); do
  INPUT[$i]="$x"
  OUTPUT[$i]="${x%.*}.mkv"
  ((i++))
done


# we'll keep track of successes and failures
successes=( )
failures=( )
# execute actual reencoding operations
i=0
while [ -n "${INPUT[$i]}" ]; do
  ARGS=(-n -i "${INPUT[$i]}" "${SIZE[@]}" "${MAPARGS[@]}" "${METADATAARGS[@]}" "${VENC[@]}" "${VIDEOFILTER[@]}" "${VQUAL_ARG[@]}" "${VQUAL[@]}" -c:a "${AUDIOCODEC[@]}" -c:s copy "${DOWNMIX[@]}" "${MISCARGS[@]}" "./$OUTDIR/${OUTPUT[$i]}")

  if ffmpeg "${ARGS[@]}" <$STDINSRC >$STDOUTDEST 2>$STDERRDEST; then
  # ffmpeg exited with success, file should have been reencoded
    successes=( "${successes[@]}" "${OUTPUT[$i]}" )
  else
    # there was a failure of some kind
		failures=( "${failures[@]}" "${INPUT[$i]}" )
  fi
  ((i++))
done


##### EMAIL NOTIFICATION #####

# setup start of body of mail notification
if [ -f mailbody ]; then rm mailbody; fi
echo 'Reencoding attempt of' "$taskname" 'completed.' >> mailbody
echo >> mailbody

# complete body of mail notification
if [ ${#successes[@]} = 0 ]; then
	echo 'No file was successfully reencoded.' >> mailbody
else
	echo "The following files were successfully generated under directory $OUTDIR:" >> mailbody
	printf '%s\n' "${successes[@]}" >> mailbody
fi
echo >> mailbody

if [ ${#failuress[@]} = 0 ]; then
  echo 'All input files were processed.' >> mailbody
else
  echo 'There was an error processing the following files:' >> mailbody
  printf '%s\n' "${failures[@]}" >> mailbody
fi

# send mail notification
cat mailbody | mail -s "Reencoding $taskname" fabrizio.baldini@protonmail.com >$STDOUTDEST 2>$STDERRDEST

# cleanup
rm mailbody



   -- final ffmpeg command script (for JAV)

         ...................


 

6. fvpi 스크립트 : 프리뷰 이미지를 뽑아내고, 텔레그램으로 해당 이미지 전송. 인코딩 오류 있는지 대략적으로 확인 후 시청 대기...





7. 오토메이션 완료 : emby, plex, kodi, 스마트 TV의 DNLA/UPNP 등으로 선택시청, MPAA XXX 등급 태그 이용  "자녀 보호 등급" 설정,  라이브러리 접속 제한 설정

  7-1. xxxxxx 스크립트 : 

    $ xxxxx juy-455 (or $ xxxxx -l id_list.txt)

    1+2+3+4+5+6 후.  google-drive-ocamlfulse(or rcron)을 통해 구글드라이브/jav folder로 이동 라이브러리화 완료

- (후방 주의) 후방 Plex Server: https://imgur.com/a/EYBbQKl


 - 감상 : pmcli + mpv

    https://imgur.com/qEJDmoi.gifv



 jav 사이트 크롤링. 영상 다운 없이, 포스터, nfo만 다운 정리.  jav DB 완성. 그리고 하드 앵꼬

- 후방 emby server


8. javscrape 스크립트: corn 탭 등재, 한달에 한번씩 돌려준다. 포스터, nfo 만 주기적으로 자동 정리 추가...


표지 수집 뵨태...