* .Mkv рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рдЙрддрд╛рд░рдиреЗ рдХреА рд╕рдмрдЯрд╛рдЗрдЯрд▓ рдХрд╛ рд╕реНрд╡рдЪрд╛рд▓рди

рдХреБрдЫ рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ рдореБрдЭреЗ рд╕реИрдорд╕рдВрдЧ рд╕реНрдорд╛рд░реНрдЯрдЯреАрд╡реА рдХреЗ рд╕рд╛рде рдПрдХ рдЯреАрд╡реА рдорд┐рд▓рд╛ред рдбрд┐рд╡рд╛рдЗрд╕ рдиреЗ рдореВрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореАрдбрд┐рдпрд╛ рд╕реЗрдВрдЯрд░ ( рдкреНрд▓реЗрдХреНрд╕ рдореАрдбрд┐рдпрд╛ рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рднрд╛рдИ рдЧрдИ) рдХреЗ рд╕рд╛рде рдЬрд▓реНрджреА рд╕реЗ рджреЛрд╕реНрдд рдмрдирд╛ рд▓рд┐рдП, рд▓реЗрдХрд┐рди рд▓рдЧрднрдЧ рддреБрд░рдВрдд рдПрдХ рдмрд╣реБрдд рдЕрдкреНрд░рд┐рдп рдЦрд╛рдореА рдереА - * .mkv рдореЗрдВ рдПрдореНрдмреЗрдбреЗрдб рдЙрдкрд╢реАрд░реНрд╖рдХ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреА рдХрдореА ред рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдЙрдкрд╢реАрд░реНрд╖рдХ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдиреЗ рдореБрдЭреЗ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЦреБрд╢ рдирд╣реАрдВ рдХрд┐рдпрд╛, рдФрд░ рдЪреВрдВрдХрд┐ рдЯреЛрд░реЗрдВрдЯ рдХреНрд▓рд╛рдЗрдВрдЯ рдореАрдбрд┐рдпрд╛ рд╕рд░реНрд╡рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╣реА рдорд╢реАрди рдкрд░ рдШреВрдо рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЧрдИ рдлрд┐рд▓реНрдореЛрдВ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдХрдЯ рдХреЗ рддрд╣рдд рдПрдХ рдХрд╣рд╛рдиреА рд╣реИ рдХрд┐ рдХреИрд╕реЗ, рдЬреЗрдПрд╕ рдХреЛрдб рдХреА 30 рд▓рд╛рдЗрдиреЛрдВ, рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдФрд░ рдбреЗрд▓реНрдпреВрдЬ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧ-рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреАрд╡реА-рдлреНрд░реЗрдВрдбрд▓реА рдлреЙрд░реНрдореЗрдЯ рдореЗрдВ * mkv рдлрд╛рдЗрд▓ рд▓рд╛рдПрдВред

рд╕реНрд░реЛрдд рдбреЗрдЯрд╛


рддреЛ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕: рдЙрдмрдВрдЯреВ рд╕рд░реНрд╡рд░ 12.04LTS, рдбреЗрд▓реНрдпреВрдЬ 1.3.5 рдФрд░ рдПрдХ рд╡реЗрдм рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╕рд╛рде Plex Media Server 0.9.7.28 рдХреЗ рд╕рд╛рде рдПрдХ рд╣реЗрдбрд▓реЗрд╕ рдорд╢реАрдиред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдПрдХ рдорд┐рдиреА-рдЯрд┐рдХ рдХрд░реЗрдВрдЧреЗред

рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдХреНрд░рдо:
  1. рддрд╛рдЬрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рдЯреЙрд░реЗрдВрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбреЗрдЯрд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдФрд░ * .mkv рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛;
  2. рдЙрдкрд╢реАрд░реНрд╖рдХ рдирд┐рд╖реНрдХрд░реНрд╖рдг;
  3. Plex рдХреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЕрдкрдбреЗрдЯред

рдореИрдВ рдЪрд╛рд╣реВрдВрдЧрд╛:

рдЬрд▓рдкреНрд░рд▓рдп рдХреЗ рд▓рд┐рдП рд╣реБрдХ


рдмреЗрд╕рд┐рдХ рдбреЗрд▓реНрдпреВрдЬрд╝ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдореЗрдВ, рдПрдХ рдПрдХреНрд╕рдХреНрдпреВрдЯ рдкреНрд▓рдЧ рдЗрди рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рдЯреЛрд░реЗрдВрдЯ рдЬреЛрдбрд╝рдиреЗ рдФрд░ / рдпрд╛ рдЕрдкрдирд╛ рдбрд╛рдЙрдирд▓реЛрдб рдкреВрд░рд╛ рдХрд░рдиреЗ рдкрд░ рдПрдХ рдордирдорд╛рдирд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (рдЖрдк рдпрд╣рд╛рдБ рдкреНрд░рд▓реЗрдЦрди рдФрд░ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ)ред рд╣рдо рдХреЗрд╡рд▓ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЧрдП рддрд░реНрдХреЛрдВ рдХреЗ рд╕рдЯреАрдХ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рд╡рд░реНрдгрди рдордиреБрд╖реНрдп рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░реАрдХреНрд╖рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
#!/bin/bash echo -e "$1\n$2\n$3" >> /specshare/sample.txt 

рд╣рдо рдХреБрдЫ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдмрдЪрд╛рдПрдВрдЧреЗ (рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ / рдЪрд╢реНрдорд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛) testhook.sh рдирд╛рдо рдХреЗ рддрд╣рдд рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдирд┐рд╖реНрдкрд╛рджрди рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП
 sudo chmod +x testhook.sh 

рдЗрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред Deluge рдХреА рджреВрд░рд╕реНрде рдкрд╣реБрдБрдЪ рдХреЗ рд▓рд┐рдП, рдореИрдВ GTK рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЬрд┐рд╕рдореЗрдВ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдХреНрд░рдо рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:
  1. рдЗрд╕рдореЗрдВ Edit-Preferences-Plugins рдЦреЛрд▓реЗрдВ рдФрд░ Execute рдХреЗ рд╕рд╛рдордиреЗ рдПрдХ рдЪреЗрдХрдорд╛рд░реНрдХ рд▓рдЧрд╛рдПрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╕рдВрдмрдВрдзрд┐рдд рдЖрдЗрдЯрдо рд╢реНрд░реЗрдгрд┐рдпрд╛рдБ рдкреИрдирд▓ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛;
  2. Execute рдЕрдиреБрднрд╛рдЧ рдореЗрдВ, рдИрд╡реЗрдВрдЯ рдХреЙрдореНрдмреЛ рдмреЙрдХреНрд╕ рдореЗрдВ, рдЯреЛрд░реЗрдВрдЯ рдХрдВрдкреНрд▓реАрдЯ рд╕реЗрдЯ рдХрд░реЗрдВ, рдХрдорд╛рдВрдб рдлрд╝реАрд▓реНрдб рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдкрде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ:
  3. рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, рдЬреЛрдбрд╝реЗрдВ, рдареАрдХ рд╣реИ, рдФрд░ рдлрд┐рд░ рдбреЗрдореЙрди рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░реЗрдВ:
     sudo service deluged restart 


рдЕрдВрддрд┐рдо рдЪрд░рдг рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЕрдиреНрдпрдерд╛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реБрдП, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдмрд╕ рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЕрдм рдбрд╛рдЙрдирд▓реЛрдб рдкрд░ рдПрдХ рдЫреЛрдЯреА рд╕реА рдзрд╛рд░ рдбрд╛рд▓реЗрдВ рдФрд░ рдирдореВрдирд╛ рдЯрд╛рдЗрдк рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреБрдЫ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:
1759d534dbe371565632ec0cccbb1579d344c5ca
Totally.Legal.Open.Source.Software.iso
/ рд╕реНрдЯреЛрд░ / рдбрд┐рд╕реНрдЯреНрд░реАрдмреНрдпреВрдЯрд░реНрд╕

рдкрд╣рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдзрд╛рд░ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдбреЗрдореЙрди рд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рджреВрд╕рд░рд╛ рдзрд╛рд░ рдХрд╛ рдирд╛рдо рд╣реИ; рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣ рдпрд╛ рддреЛ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдпрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдирд╛рдо рд╣реИ (рдпрджрд┐ рд╡рд┐рддрд░рдг рдореЗрдВ рдХрдИ рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ)ред рддреАрд╕рд░рд╛ рдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдореВрд▓ рдлрд╝реЛрд▓реНрдбрд░ рдХрд╛ рдирд╛рдо рд╣реИред

рдЕрдм рдЬрдм рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреНрдпрд╛ рджрд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЙрд╕реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рджреЛ рдлрд╝рд╛рдЗрд▓реЗрдВ рдмрдирд╛рдПрдБрдЧреЗ рдЬрд╣рд╛рдБ testhook.sh рдкрдбрд╝реА рдереА: extractor.sh рдФрд░ deluge-movie-callback.sh ред рдЙрдкрд╢реАрд░реНрд╖рдХ рдХреЗ рдкреНрд░рддреНрдпрдХреНрд╖ рдирд┐рд╖реНрдХрд░реНрд╖рдг рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдЧреА, рдФрд░ рд╣рдо рдЗрд╕реЗ рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рд╡рд╛рдкрд╕ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рджреВрд╕рд░реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрдВрдЧреЗ:
 #!/bin/bash torrentname=$2; torrentpath=$(readlink -f "$3"); fullpath="$torrentpath/$torrentname"; echo "============================" >> /specshare/log.txt; echo "$(date +"%D %T"): $1 $2 $3" >> /specshare/log.txt; echo "$(date +"%D %T"): $fullpath" >> /specshare/log.txt; if [[ "$fullpath" != /store/films/* ]]; then echo "$(date +"%D %T"): Invalid path" >> /specshare/log.txt; exit 0; fi; echo "$(date +"%D %T"): path ok" >> /specshare/log.txt; mkvlist=$(find "$fullpath" -type f | grep .mkv); while read -r fname; do /specshare/extractor.sh "$fname" "eng,rus,unk"; done <<< "$mkvlist"; 

рдпрд╣рд╛рдВ рдХреБрдЫ рднреА рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ - рд╣рдо $ 3 рдФрд░ $ 2 рдХреЗ рддрд░реНрдХреЛрдВ рд╕реЗ рдкреВрд░реНрдг рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХреЛ рдЧреЛрдВрдж рдХрд░рддреЗ рд╣реИрдВ, рд╕рд┐рдореНрдмрд▓рд┐рдВрдХ рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ (рдпрджрд┐ рдХреЛрдИ рд╣реЛ), рдкрде рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ (рдХреЗрд╡рд▓ рдлрд┐рд▓реНрдореЗрдВ / рдЙрдиреНрд╣реЗрдВ рд╕реНрдЯреЛрд░ / рдлрд┐рд▓реНрдореЛрдВ рдХреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдореБрдЭреЗ рдмрд╛рдХреА рд╡реАрдбрд┐рдпреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд╢реАрд░реНрд╖рдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ) рдФрд░ рдкрд░рд┐рдгрд╛рдореА рдкрде рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рднреА рд╕рдВрд▓рдЧреНрди mkv рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВред рдЙрд╕рдХреЗ рдмрд╛рдж, рдкреНрд░рддреНрдпреЗрдХ .mkv рдХреЗ рд▓рд┐рдП, рдПрдХреНрд╕рдЯреНрд░реИрдХреНрдЯрд░ рдЪрд▓рд╛рдПрдВред рд╢рд╢ , рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЧреБрдЬрд░рдирд╛ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЖрдИрдПрд╕рдУ 639-1 рдХреЛрдб рдХреА рд╕реВрдЪреАред "рдЕрдирдХ" рдПрдХ рд▓рд╛рдкрддрд╛ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░рд╛ рдЦреБрдж рдХрд╛ рдкрджрдирд╛рдо рд╣реИ, рдЕрдЧрд░ рдЙрдкрд╢реАрд░реНрд╖рдХ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдзрд╛рд░рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИред рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рд╖реНрдкрд╛рджрди рд▓реЙрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд▓реЙрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдиреЛрдЯ
рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХрд╣реАрдВ рднреА рд▓реЙрдЧ рд▓рд┐рдЦрдирд╛, рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдкрд╣реБрдВрдЪ рдореЗрдВ рд╕рд░рд▓рддрд╛ рдФрд░ рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП рд╢реБрджреНрдзрддрд╛ рдХрд╛ рддреНрдпрд╛рдЧ рдХрд░реЗрдВрдЧреЗ (рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ / рдЪрд╢реНрдорд╛ samba рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╢рд░реАрд░ рдХреЗ рдиреНрдпреВрдирддрдо рдЖрдВрджреЛрд▓рдиреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рдВрдбреЛрдЬ рдбреЗрд╕реНрдХрдЯреЙрдк рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ)ред


рдЙрдкрд╢реАрд░реНрд╖рдХ рдирд┐рд╖реНрдХрд░реНрд╖рдг


рдЙрдкрд╢реАрд░реНрд╖рдХ рдХреЗ рд╕рд╛рде рдкрдЯрд░рд┐рдпреЛрдВ рдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо mkvtoolnix рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╕реНрдерд╛рдкрдирд╛ рд╕рд░рд▓ рд╣реИ:
 sudo apt-get install mkvtoolnix 

рд╣рдо рджреЛ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ: mkvmerge рдФрд░ mkvextract ред рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдзрд╛рдЧреЗ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
 mkvmerge -I <filename> 

рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ, рдПрдХ рд╣реА рдкреИрдХреЗрдЬ рд╕реЗ mkvinfo рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, mkvmerge рдХрд╛ рдЙрддреНрдкрд╛рджрди рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдФрд░ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рд╣рдореЗрдВ рдЗрд╕ рд╕реВрдЪреА рдЬреИрд╕рд╛ рдХреБрдЫ рдорд┐рд▓рддрд╛ рд╣реИ:
рдЯреНрд░реИрдХ рдЖрдИрдбреА 1: рд╡реАрдбрд┐рдпреЛ (V_MPEG4 / ISO / AVC) [рднрд╛рд╖рд╛: eng track_name: \ sMatrix \ s1999 \ s1080p \ sBluRay \ sDD5.1 тАЛтАЛ\ / sx264-CtrlHD display_dim рдкреЗрдВрд╢рди: 1280x532 default_track: 0 рдордЬрдмреВрд░_рдкреНрд░реЗрдЪрд░: mpegред ]
рдЯреНрд░реИрдХ рдЖрдИрдбреА 2: рдСрдбрд┐рдпреЛ (A_AC3) [рднрд╛рд╖рд╛: rus track_name: DUB-Blu-ray default_track: 1 рдордЬрдмреВрд░_рдЯреНрд░реИрдХ: 0 рдбрд┐рдлрд╝реЙрд▓реНрдЯ_ рдЕрд╡рдзрд┐: 32000000 рдСрдбрд┐рдпреЛ_рд╕рдорд▓рд┐рдВрдЧ_рдлреНрд░реАрдХреНрд╡реЗрдВрд╕реА: 488 рдСрдбрд┐рдпреЛ_рдЪреИрдирд▓: 6]
<рдХрдИ рдирд┐рд░реНрдмрд╛рдз рдСрдбрд┐рдпреЛ рдЯреНрд░реИрдХ ...>
рдЯреНрд░реИрдХ рдЖрдИрдбреА 9: рдСрдбрд┐рдпреЛ (A_DTS) [рднрд╛рд╖рд╛: eng track_name: рдореВрд▓ рдбрд┐рдлрд╝реЙрд▓реНрдЯ_ рдЯреНрд░реИрдХ: 0 рдордЬрдмреВрд░_рдЯреНрд░реИрдХ: 0 рдбрд┐рдлрд╝реЙрд▓реНрдЯ_ рдЕрд╡рдзрд┐: 10666666 рдСрдбрд┐рдпреЛ_рд╕рдорд▓рд┐рдВрдЧ_рдлреНрд░реАрдХреНрд╡реЗрдВрд╕реА: 48000 рдСрдбрд┐рдпреЛ_рдЪреИрдирд▓: 6]
рдЯреНрд░реИрдХ рдЖрдИрдбреА 10: рдЙрдкрд╢реАрд░реНрд╖рдХ (S_TEXT / UTF8) [рднрд╛рд╖рд╛: rus track_name: рдЙрдк рдбрд┐рдлрд╝реЙрд▓реНрдЯ_рдЯреНрд░реИрдХ: 0 рдордЬрдмреВрд░_рдЯреНрд░реИрдХ: 0]
рдЯреНрд░реИрдХ рдЖрдИрдбреА 11: рд╕рдмрдЯрд╛рдЗрдЯрд▓реНрд╕ (S_TEXT / UTF8) [рднрд╛рд╖рд╛: rus track_name: рдЙрдк- (by \ _ \ _ рд╕рд╣реА 2 \ _ \ _ рдХрд╛ рдЕрдиреБрд╡рд╛рдж \ _ Goblin рдХрд╛) default_track: 0 рдордЬрдмреВрд░_рдЯреНрд░реИрдХ: 0]
рдЯреНрд░реИрдХ рдЖрдИрдбреА 12: рд╕рдмрдЯрд╛рдЗрдЯрд▓ (S_TEXT / UTF8) [рднрд╛рд╖рд╛: eng track_name: рдЙрдк рдбрд┐рдлрд╝реЙрд▓реНрдЯ_рдЯреНрд░реИрдХ: 0 рдордЬрдмреВрд░_рдЯреНрд░реИрдХ: 0]
рдЯреНрд░реИрдХ рдЖрдИрдбреА 13: рд╕рдмрдЯрд╛рдЗрдЯрд▓реНрд╕ (S_TEXT / UTF8) [рднрд╛рд╖рд╛: eng track_name: рдЙрдк-рдПрд╕рдбреАрдПрдЪ рдбрд┐рдлрд╝реЙрд▓реНрдЯ_рдЯреНрд░реИрдХ: 0 рдордЬрдмреВрд░_рдЯреНрд░реИрдХ: 0]

рд╣рдо рдЯрд╛рдЗрдк рдЙрдкрд╢реАрд░реНрд╖рдХ рдФрд░ рдХреЛрдбреЗрдХ S_TEXT / UTF8 рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ TrackID рдФрд░ рднрд╛рд╖рд╛ рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред S_TEXT / UTF8 рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВрдиреЗ рдЙрдкрд╢реАрд░реНрд╖рдХ рдХреЛ S_HDMV / PGS рдХреЗ рд╕рд╛рде рдПрдиреНрдХреЛрдбреЗрдб рджреЗрдЦрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рджреБрд░реНрд▓рдн рдкрдХреНрд╖реА рд╣реИ, рдЗрд╕реЗ srt рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрдкрд╢реАрд░реНрд╖рдХ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЛ BDSup2Sub рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреА рдкреЗрд╢рдХрд╢ рдХреА рдЬрд╛рддреА рд╣реИред

рдХрд┐рд╕реА рд╕реНрдЯреНрд░реАрдо рдХреЛ рд╕реАрдзреЗ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
 mkvextract tracks <filename> <trackId>:<subname> 

рдкрд╣рд▓реЗ рджреЛ рдкреИрд░рд╛рдореАрдЯрд░ (TrackID рдФрд░ рдХрдВрдЯреЗрдирд░ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо) рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд╣реИрдВ, рд▓реЗрдХрд┐рди рддреАрд╕рд░реЗ рдХреЗ рд╕рд╛рде - рдЙрдкрд╢реАрд░реНрд╖рдХ рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдирд╛рдо - рдпрд╣ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИред рдпрд╣рд╛рдВ рдЖрдкрдХреЛ Plex рдореЗрдВ рдмрд╛рд╣рд░реА рд╕рдмрдЯрд╛рдЗрдЯрд▓ рдХреЗ рдирд╛рдордХрд░рдг рдХреЗ рдирд┐рдпрдореЛрдВ рдХреЗ рд╕рд╛рде рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓рд┐рдП рд░реБрдХрдиреЗ рдФрд░ рдЦреБрдж рдХреЛ рдкрд░рд┐рдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЙрдкрд╢реАрд░реНрд╖рдХ рдирд╛рдо рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
 ..srt, 
. , . , - , , ( ). : , - . , , .

extractor.sh :
#!/bin/bash if [[ "$1" != *.mkv ]]; then exit 0; fi; FORMAT_FULL=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\).*language:([[:alpha:]]+)"; FORMAT_SHORT=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\)"; baseName=${1%.mkv}; requiredLangs=$(echo "$2" | tr "," "\n"); echo "$(date +"%D %T"): $baseName" >> /specshare/log.txt; counter=0; tracks=$(mkvmerge -I "$1"); while read -r track; do echo -e "$(date +"%D %T"): $track" >> /specshare/log.txt; if [[ $track =~ $FORMAT_FULL ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; lang=${BASH_REMATCH[4]}; codec=${BASH_REMATCH[3]}; else if [[ $track =~ $FORMAT_SHORT ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; codec=${BASH_REMATCH[3]}; lang="unk"; else id=-1; fi fi; langMatch=false; idMatch=false; typeMatch=false; codecMatch=false; shouldExtract=false; for reqLang in $requiredLangs; do [ "$reqLang" == "$lang" ] && langMatch=true; done [ "$tType" == "subtitles" ] && typeMatch=true; [ "$codec" == "S_TEXT/UTF8" ] && codecMatch=true; [ $id -ne -1 ] && idMatch=true; $langMatch && $idMatch && $typeMatch && $codecMatch && shouldExtract=true; if $shouldExtract ; then subName="$baseName.$lang.srt" if [ -f "$subName" -o "$lang" == "unk" ]; then subName="$baseName.$lang$counter.srt"; (( counter++ )); fi mkvextract tracks "$1" $id:"$subName"; fi done <<< "$tracks"

: , , //, . , capturing groups POSIX- , , , . , .

, . - Plex.



Plex Media Server Plex Media Scanner , /usr/lib/plexmediaserver/ , . , :
; - , - PMS;
, . 2 sudoers - sudo. , LD_LIBRARY_PATH ( 1) Deluge, , .
, , , ...

GET-
- PMS, UI , GET- URL . URL :
http://<serverIP>:32400/library/sections/<sectionId>/refresh
sectionId - PMS. , -

- 3.

, , deluge-movie-callback.sh -
wget -qO - http://192.168.13.1:32400/library/sections/3/refresh >> /dev/null ;
URL ?deep=1 ?force=1 .

, deluge-movie-callback.sh Execute. , .

.
. , , , - , . - , . , . Deluge , , . Label. , , , , deluged , . , c sudo su - .
..srt,
. , . , - , , ( ). : , - . , , .

extractor.sh :
#!/bin/bash if [[ "$1" != *.mkv ]]; then exit 0; fi; FORMAT_FULL=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\).*language:([[:alpha:]]+)"; FORMAT_SHORT=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\)"; baseName=${1%.mkv}; requiredLangs=$(echo "$2" | tr "," "\n"); echo "$(date +"%D %T"): $baseName" >> /specshare/log.txt; counter=0; tracks=$(mkvmerge -I "$1"); while read -r track; do echo -e "$(date +"%D %T"): $track" >> /specshare/log.txt; if [[ $track =~ $FORMAT_FULL ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; lang=${BASH_REMATCH[4]}; codec=${BASH_REMATCH[3]}; else if [[ $track =~ $FORMAT_SHORT ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; codec=${BASH_REMATCH[3]}; lang="unk"; else id=-1; fi fi; langMatch=false; idMatch=false; typeMatch=false; codecMatch=false; shouldExtract=false; for reqLang in $requiredLangs; do [ "$reqLang" == "$lang" ] && langMatch=true; done [ "$tType" == "subtitles" ] && typeMatch=true; [ "$codec" == "S_TEXT/UTF8" ] && codecMatch=true; [ $id -ne -1 ] && idMatch=true; $langMatch && $idMatch && $typeMatch && $codecMatch && shouldExtract=true; if $shouldExtract ; then subName="$baseName.$lang.srt" if [ -f "$subName" -o "$lang" == "unk" ]; then subName="$baseName.$lang$counter.srt"; (( counter++ )); fi mkvextract tracks "$1" $id:"$subName"; fi done <<< "$tracks"

: , , //, . , capturing groups POSIX- , , , . , .

, . - Plex.



Plex Media Server Plex Media Scanner , /usr/lib/plexmediaserver/ , . , :
; - , - PMS;
, . 2 sudoers - sudo. , LD_LIBRARY_PATH ( 1) Deluge, , .
, , , ...

GET-
- PMS, UI , GET- URL . URL :
http://<serverIP>:32400/library/sections/<sectionId>/refresh
sectionId - PMS. , -

- 3.

, , deluge-movie-callback.sh -
wget -qO - http://192.168.13.1:32400/library/sections/3/refresh >> /dev/null ;
URL ?deep=1 ?force=1 .

, deluge-movie-callback.sh Execute. , .

.
. , , , - , . - , . , . Deluge , , . Label. , , , , deluged , . , c sudo su - .

..srt,
. , . , - , , ( ). : , - . , , .

extractor.sh :
#!/bin/bash if [[ "$1" != *.mkv ]]; then exit 0; fi; FORMAT_FULL=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\).*language:([[:alpha:]]+)"; FORMAT_SHORT=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\)"; baseName=${1%.mkv}; requiredLangs=$(echo "$2" | tr "," "\n"); echo "$(date +"%D %T"): $baseName" >> /specshare/log.txt; counter=0; tracks=$(mkvmerge -I "$1"); while read -r track; do echo -e "$(date +"%D %T"): $track" >> /specshare/log.txt; if [[ $track =~ $FORMAT_FULL ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; lang=${BASH_REMATCH[4]}; codec=${BASH_REMATCH[3]}; else if [[ $track =~ $FORMAT_SHORT ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; codec=${BASH_REMATCH[3]}; lang="unk"; else id=-1; fi fi; langMatch=false; idMatch=false; typeMatch=false; codecMatch=false; shouldExtract=false; for reqLang in $requiredLangs; do [ "$reqLang" == "$lang" ] && langMatch=true; done [ "$tType" == "subtitles" ] && typeMatch=true; [ "$codec" == "S_TEXT/UTF8" ] && codecMatch=true; [ $id -ne -1 ] && idMatch=true; $langMatch && $idMatch && $typeMatch && $codecMatch && shouldExtract=true; if $shouldExtract ; then subName="$baseName.$lang.srt" if [ -f "$subName" -o "$lang" == "unk" ]; then subName="$baseName.$lang$counter.srt"; (( counter++ )); fi mkvextract tracks "$1" $id:"$subName"; fi done <<< "$tracks"

: , , //, . , capturing groups POSIX- , , , . , .

, . - Plex.



Plex Media Server Plex Media Scanner , /usr/lib/plexmediaserver/ , . , :
; - , - PMS;
, . 2 sudoers - sudo. , LD_LIBRARY_PATH ( 1) Deluge, , .
, , , ...

GET-
- PMS, UI , GET- URL . URL :
http://<serverIP>:32400/library/sections/<sectionId>/refresh
sectionId - PMS. , -

- 3.

, , deluge-movie-callback.sh -
wget -qO - http://192.168.13.1:32400/library/sections/3/refresh >> /dev/null ;
URL ?deep=1 ?force=1 .

, deluge-movie-callback.sh Execute. , .

.
. , , , - , . - , . , . Deluge , , . Label. , , , , deluged , . , c sudo su - .

..srt,
. , . , - , , ( ). : , - . , , .

extractor.sh :
#!/bin/bash if [[ "$1" != *.mkv ]]; then exit 0; fi; FORMAT_FULL=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\).*language:([[:alpha:]]+)"; FORMAT_SHORT=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\)"; baseName=${1%.mkv}; requiredLangs=$(echo "$2" | tr "," "\n"); echo "$(date +"%D %T"): $baseName" >> /specshare/log.txt; counter=0; tracks=$(mkvmerge -I "$1"); while read -r track; do echo -e "$(date +"%D %T"): $track" >> /specshare/log.txt; if [[ $track =~ $FORMAT_FULL ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; lang=${BASH_REMATCH[4]}; codec=${BASH_REMATCH[3]}; else if [[ $track =~ $FORMAT_SHORT ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; codec=${BASH_REMATCH[3]}; lang="unk"; else id=-1; fi fi; langMatch=false; idMatch=false; typeMatch=false; codecMatch=false; shouldExtract=false; for reqLang in $requiredLangs; do [ "$reqLang" == "$lang" ] && langMatch=true; done [ "$tType" == "subtitles" ] && typeMatch=true; [ "$codec" == "S_TEXT/UTF8" ] && codecMatch=true; [ $id -ne -1 ] && idMatch=true; $langMatch && $idMatch && $typeMatch && $codecMatch && shouldExtract=true; if $shouldExtract ; then subName="$baseName.$lang.srt" if [ -f "$subName" -o "$lang" == "unk" ]; then subName="$baseName.$lang$counter.srt"; (( counter++ )); fi mkvextract tracks "$1" $id:"$subName"; fi done <<< "$tracks"

: , , //, . , capturing groups POSIX- , , , . , .

, . - Plex.



Plex Media Server Plex Media Scanner , /usr/lib/plexmediaserver/ , . , :
; - , - PMS;
, . 2 sudoers - sudo. , LD_LIBRARY_PATH ( 1) Deluge, , .
, , , ...

GET-
- PMS, UI , GET- URL . URL :
http://<serverIP>:32400/library/sections/<sectionId>/refresh
sectionId - PMS. , -

- 3.

, , deluge-movie-callback.sh -
wget -qO - http://192.168.13.1:32400/library/sections/3/refresh >> /dev/null ;
URL ?deep=1 ?force=1 .

, deluge-movie-callback.sh Execute. , .

.
. , , , - , . - , . , . Deluge , , . Label. , , , , deluged , . , c sudo su - .
..srt,
. , . , - , , ( ). : , - . , , .

extractor.sh :
#!/bin/bash if [[ "$1" != *.mkv ]]; then exit 0; fi; FORMAT_FULL=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\).*language:([[:alpha:]]+)"; FORMAT_SHORT=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\)"; baseName=${1%.mkv}; requiredLangs=$(echo "$2" | tr "," "\n"); echo "$(date +"%D %T"): $baseName" >> /specshare/log.txt; counter=0; tracks=$(mkvmerge -I "$1"); while read -r track; do echo -e "$(date +"%D %T"): $track" >> /specshare/log.txt; if [[ $track =~ $FORMAT_FULL ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; lang=${BASH_REMATCH[4]}; codec=${BASH_REMATCH[3]}; else if [[ $track =~ $FORMAT_SHORT ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; codec=${BASH_REMATCH[3]}; lang="unk"; else id=-1; fi fi; langMatch=false; idMatch=false; typeMatch=false; codecMatch=false; shouldExtract=false; for reqLang in $requiredLangs; do [ "$reqLang" == "$lang" ] && langMatch=true; done [ "$tType" == "subtitles" ] && typeMatch=true; [ "$codec" == "S_TEXT/UTF8" ] && codecMatch=true; [ $id -ne -1 ] && idMatch=true; $langMatch && $idMatch && $typeMatch && $codecMatch && shouldExtract=true; if $shouldExtract ; then subName="$baseName.$lang.srt" if [ -f "$subName" -o "$lang" == "unk" ]; then subName="$baseName.$lang$counter.srt"; (( counter++ )); fi mkvextract tracks "$1" $id:"$subName"; fi done <<< "$tracks"

: , , //, . , capturing groups POSIX- , , , . , .

, . - Plex.



Plex Media Server Plex Media Scanner , /usr/lib/plexmediaserver/ , . , :
; - , - PMS;
, . 2 sudoers - sudo. , LD_LIBRARY_PATH ( 1) Deluge, , .
, , , ...

GET-
- PMS, UI , GET- URL . URL :
http://<serverIP>:32400/library/sections/<sectionId>/refresh
sectionId - PMS. , -

- 3.

, , deluge-movie-callback.sh -
wget -qO - http://192.168.13.1:32400/library/sections/3/refresh >> /dev/null ;
URL ?deep=1 ?force=1 .

, deluge-movie-callback.sh Execute. , .

.
. , , , - , . - , . , . Deluge , , . Label. , , , , deluged , . , c sudo su - .
..srt,
. , . , - , , ( ). : , - . , , .

extractor.sh :
#!/bin/bash if [[ "$1" != *.mkv ]]; then exit 0; fi; FORMAT_FULL=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\).*language:([[:alpha:]]+)"; FORMAT_SHORT=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\)"; baseName=${1%.mkv}; requiredLangs=$(echo "$2" | tr "," "\n"); echo "$(date +"%D %T"): $baseName" >> /specshare/log.txt; counter=0; tracks=$(mkvmerge -I "$1"); while read -r track; do echo -e "$(date +"%D %T"): $track" >> /specshare/log.txt; if [[ $track =~ $FORMAT_FULL ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; lang=${BASH_REMATCH[4]}; codec=${BASH_REMATCH[3]}; else if [[ $track =~ $FORMAT_SHORT ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; codec=${BASH_REMATCH[3]}; lang="unk"; else id=-1; fi fi; langMatch=false; idMatch=false; typeMatch=false; codecMatch=false; shouldExtract=false; for reqLang in $requiredLangs; do [ "$reqLang" == "$lang" ] && langMatch=true; done [ "$tType" == "subtitles" ] && typeMatch=true; [ "$codec" == "S_TEXT/UTF8" ] && codecMatch=true; [ $id -ne -1 ] && idMatch=true; $langMatch && $idMatch && $typeMatch && $codecMatch && shouldExtract=true; if $shouldExtract ; then subName="$baseName.$lang.srt" if [ -f "$subName" -o "$lang" == "unk" ]; then subName="$baseName.$lang$counter.srt"; (( counter++ )); fi mkvextract tracks "$1" $id:"$subName"; fi done <<< "$tracks"

: , , //, . , capturing groups POSIX- , , , . , .

, . - Plex.



Plex Media Server Plex Media Scanner , /usr/lib/plexmediaserver/ , . , :
; - , - PMS;
, . 2 sudoers - sudo. , LD_LIBRARY_PATH ( 1) Deluge, , .
, , , ...

GET-
- PMS, UI , GET- URL . URL :
http://<serverIP>:32400/library/sections/<sectionId>/refresh
sectionId - PMS. , -

- 3.

, , deluge-movie-callback.sh -
wget -qO - http://192.168.13.1:32400/library/sections/3/refresh >> /dev/null ;
URL ?deep=1 ?force=1 .

, deluge-movie-callback.sh Execute. , .

.
. , , , - , . - , . , . Deluge , , . Label. , , , , deluged , . , c sudo su - .
  1. ..srt,
    . , . , - , , ( ). : , - . , , .

    extractor.sh :
    #!/bin/bash if [[ "$1" != *.mkv ]]; then exit 0; fi; FORMAT_FULL=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\).*language:([[:alpha:]]+)"; FORMAT_SHORT=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\)"; baseName=${1%.mkv}; requiredLangs=$(echo "$2" | tr "," "\n"); echo "$(date +"%D %T"): $baseName" >> /specshare/log.txt; counter=0; tracks=$(mkvmerge -I "$1"); while read -r track; do echo -e "$(date +"%D %T"): $track" >> /specshare/log.txt; if [[ $track =~ $FORMAT_FULL ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; lang=${BASH_REMATCH[4]}; codec=${BASH_REMATCH[3]}; else if [[ $track =~ $FORMAT_SHORT ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; codec=${BASH_REMATCH[3]}; lang="unk"; else id=-1; fi fi; langMatch=false; idMatch=false; typeMatch=false; codecMatch=false; shouldExtract=false; for reqLang in $requiredLangs; do [ "$reqLang" == "$lang" ] && langMatch=true; done [ "$tType" == "subtitles" ] && typeMatch=true; [ "$codec" == "S_TEXT/UTF8" ] && codecMatch=true; [ $id -ne -1 ] && idMatch=true; $langMatch && $idMatch && $typeMatch && $codecMatch && shouldExtract=true; if $shouldExtract ; then subName="$baseName.$lang.srt" if [ -f "$subName" -o "$lang" == "unk" ]; then subName="$baseName.$lang$counter.srt"; (( counter++ )); fi mkvextract tracks "$1" $id:"$subName"; fi done <<< "$tracks"

    : , , //, . , capturing groups POSIX- , , , . , .

    , . - Plex.



    Plex Media Server Plex Media Scanner , /usr/lib/plexmediaserver/ , . , :
    ; - , - PMS;
    , . 2 sudoers - sudo. , LD_LIBRARY_PATH ( 1) Deluge, , .
    , , , ...

    GET-
    - PMS, UI , GET- URL . URL :
    http://<serverIP>:32400/library/sections/<sectionId>/refresh
    sectionId - PMS. , -

    - 3.

    , , deluge-movie-callback.sh -
    wget -qO - http://192.168.13.1:32400/library/sections/3/refresh >> /dev/null ;
    URL ?deep=1 ?force=1 .

    , deluge-movie-callback.sh Execute. , .

    .
    . , , , - , . - , . , . Deluge , , . Label. , , , , deluged , . , c sudo su - .
  2. ..srt,
    . , . , - , , ( ). : , - . , , .

    extractor.sh :
    #!/bin/bash if [[ "$1" != *.mkv ]]; then exit 0; fi; FORMAT_FULL=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\).*language:([[:alpha:]]+)"; FORMAT_SHORT=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\)"; baseName=${1%.mkv}; requiredLangs=$(echo "$2" | tr "," "\n"); echo "$(date +"%D %T"): $baseName" >> /specshare/log.txt; counter=0; tracks=$(mkvmerge -I "$1"); while read -r track; do echo -e "$(date +"%D %T"): $track" >> /specshare/log.txt; if [[ $track =~ $FORMAT_FULL ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; lang=${BASH_REMATCH[4]}; codec=${BASH_REMATCH[3]}; else if [[ $track =~ $FORMAT_SHORT ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; codec=${BASH_REMATCH[3]}; lang="unk"; else id=-1; fi fi; langMatch=false; idMatch=false; typeMatch=false; codecMatch=false; shouldExtract=false; for reqLang in $requiredLangs; do [ "$reqLang" == "$lang" ] && langMatch=true; done [ "$tType" == "subtitles" ] && typeMatch=true; [ "$codec" == "S_TEXT/UTF8" ] && codecMatch=true; [ $id -ne -1 ] && idMatch=true; $langMatch && $idMatch && $typeMatch && $codecMatch && shouldExtract=true; if $shouldExtract ; then subName="$baseName.$lang.srt" if [ -f "$subName" -o "$lang" == "unk" ]; then subName="$baseName.$lang$counter.srt"; (( counter++ )); fi mkvextract tracks "$1" $id:"$subName"; fi done <<< "$tracks"

    : , , //, . , capturing groups POSIX- , , , . , .

    , . - Plex.



    Plex Media Server Plex Media Scanner , /usr/lib/plexmediaserver/ , . , :
    ; - , - PMS;
    , . 2 sudoers - sudo. , LD_LIBRARY_PATH ( 1) Deluge, , .
    , , , ...

    GET-
    - PMS, UI , GET- URL . URL :
    http://<serverIP>:32400/library/sections/<sectionId>/refresh
    sectionId - PMS. , -

    - 3.

    , , deluge-movie-callback.sh -
    wget -qO - http://192.168.13.1:32400/library/sections/3/refresh >> /dev/null ;
    URL ?deep=1 ?force=1 .

    , deluge-movie-callback.sh Execute. , .

    .
    . , , , - , . - , . , . Deluge , , . Label. , , , , deluged , . , c sudo su - .
..srt,
. , . , - , , ( ). : , - . , , .

extractor.sh :
#!/bin/bash if [[ "$1" != *.mkv ]]; then exit 0; fi; FORMAT_FULL=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\).*language:([[:alpha:]]+)"; FORMAT_SHORT=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\)"; baseName=${1%.mkv}; requiredLangs=$(echo "$2" | tr "," "\n"); echo "$(date +"%D %T"): $baseName" >> /specshare/log.txt; counter=0; tracks=$(mkvmerge -I "$1"); while read -r track; do echo -e "$(date +"%D %T"): $track" >> /specshare/log.txt; if [[ $track =~ $FORMAT_FULL ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; lang=${BASH_REMATCH[4]}; codec=${BASH_REMATCH[3]}; else if [[ $track =~ $FORMAT_SHORT ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; codec=${BASH_REMATCH[3]}; lang="unk"; else id=-1; fi fi; langMatch=false; idMatch=false; typeMatch=false; codecMatch=false; shouldExtract=false; for reqLang in $requiredLangs; do [ "$reqLang" == "$lang" ] && langMatch=true; done [ "$tType" == "subtitles" ] && typeMatch=true; [ "$codec" == "S_TEXT/UTF8" ] && codecMatch=true; [ $id -ne -1 ] && idMatch=true; $langMatch && $idMatch && $typeMatch && $codecMatch && shouldExtract=true; if $shouldExtract ; then subName="$baseName.$lang.srt" if [ -f "$subName" -o "$lang" == "unk" ]; then subName="$baseName.$lang$counter.srt"; (( counter++ )); fi mkvextract tracks "$1" $id:"$subName"; fi done <<< "$tracks"

: , , //, . , capturing groups POSIX- , , , . , .

, . - Plex.



Plex Media Server Plex Media Scanner , /usr/lib/plexmediaserver/ , . , :
; - , - PMS;
, . 2 sudoers - sudo. , LD_LIBRARY_PATH ( 1) Deluge, , .
, , , ...

GET-
- PMS, UI , GET- URL . URL :
http://<serverIP>:32400/library/sections/<sectionId>/refresh
sectionId - PMS. , -

- 3.

, , deluge-movie-callback.sh -
wget -qO - http://192.168.13.1:32400/library/sections/3/refresh >> /dev/null ;
URL ?deep=1 ?force=1 .

, deluge-movie-callback.sh Execute. , .

.
. , , , - , . - , . , . Deluge , , . Label. , , , , deluged , . , c sudo su - .
..srt,
. , . , - , , ( ). : , - . , , .

extractor.sh :
#!/bin/bash if [[ "$1" != *.mkv ]]; then exit 0; fi; FORMAT_FULL=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\).*language:([[:alpha:]]+)"; FORMAT_SHORT=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\)"; baseName=${1%.mkv}; requiredLangs=$(echo "$2" | tr "," "\n"); echo "$(date +"%D %T"): $baseName" >> /specshare/log.txt; counter=0; tracks=$(mkvmerge -I "$1"); while read -r track; do echo -e "$(date +"%D %T"): $track" >> /specshare/log.txt; if [[ $track =~ $FORMAT_FULL ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; lang=${BASH_REMATCH[4]}; codec=${BASH_REMATCH[3]}; else if [[ $track =~ $FORMAT_SHORT ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; codec=${BASH_REMATCH[3]}; lang="unk"; else id=-1; fi fi; langMatch=false; idMatch=false; typeMatch=false; codecMatch=false; shouldExtract=false; for reqLang in $requiredLangs; do [ "$reqLang" == "$lang" ] && langMatch=true; done [ "$tType" == "subtitles" ] && typeMatch=true; [ "$codec" == "S_TEXT/UTF8" ] && codecMatch=true; [ $id -ne -1 ] && idMatch=true; $langMatch && $idMatch && $typeMatch && $codecMatch && shouldExtract=true; if $shouldExtract ; then subName="$baseName.$lang.srt" if [ -f "$subName" -o "$lang" == "unk" ]; then subName="$baseName.$lang$counter.srt"; (( counter++ )); fi mkvextract tracks "$1" $id:"$subName"; fi done <<< "$tracks"

: , , //, . , capturing groups POSIX- , , , . , .

, . - Plex.



Plex Media Server Plex Media Scanner , /usr/lib/plexmediaserver/ , . , :
; - , - PMS;
, . 2 sudoers - sudo. , LD_LIBRARY_PATH ( 1) Deluge, , .
, , , ...

GET-
- PMS, UI , GET- URL . URL :
http://<serverIP>:32400/library/sections/<sectionId>/refresh
sectionId - PMS. , -

- 3.

, , deluge-movie-callback.sh -
wget -qO - http://192.168.13.1:32400/library/sections/3/refresh >> /dev/null ;
URL ?deep=1 ?force=1 .

, deluge-movie-callback.sh Execute. , .

.
. , , , - , . - , . , . Deluge , , . Label. , , , , deluged , . , c sudo su - .
..srt,
. , . , - , , ( ). : , - . , , .

extractor.sh :
#!/bin/bash if [[ "$1" != *.mkv ]]; then exit 0; fi; FORMAT_FULL=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\).*language:([[:alpha:]]+)"; FORMAT_SHORT=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\)"; baseName=${1%.mkv}; requiredLangs=$(echo "$2" | tr "," "\n"); echo "$(date +"%D %T"): $baseName" >> /specshare/log.txt; counter=0; tracks=$(mkvmerge -I "$1"); while read -r track; do echo -e "$(date +"%D %T"): $track" >> /specshare/log.txt; if [[ $track =~ $FORMAT_FULL ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; lang=${BASH_REMATCH[4]}; codec=${BASH_REMATCH[3]}; else if [[ $track =~ $FORMAT_SHORT ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; codec=${BASH_REMATCH[3]}; lang="unk"; else id=-1; fi fi; langMatch=false; idMatch=false; typeMatch=false; codecMatch=false; shouldExtract=false; for reqLang in $requiredLangs; do [ "$reqLang" == "$lang" ] && langMatch=true; done [ "$tType" == "subtitles" ] && typeMatch=true; [ "$codec" == "S_TEXT/UTF8" ] && codecMatch=true; [ $id -ne -1 ] && idMatch=true; $langMatch && $idMatch && $typeMatch && $codecMatch && shouldExtract=true; if $shouldExtract ; then subName="$baseName.$lang.srt" if [ -f "$subName" -o "$lang" == "unk" ]; then subName="$baseName.$lang$counter.srt"; (( counter++ )); fi mkvextract tracks "$1" $id:"$subName"; fi done <<< "$tracks"

: , , //, . , capturing groups POSIX- , , , . , .

, . - Plex.



Plex Media Server Plex Media Scanner , /usr/lib/plexmediaserver/ , . , :
; - , - PMS;
, . 2 sudoers - sudo. , LD_LIBRARY_PATH ( 1) Deluge, , .
, , , ...

GET-
- PMS, UI , GET- URL . URL :
http://<serverIP>:32400/library/sections/<sectionId>/refresh
sectionId - PMS. , -

- 3.

, , deluge-movie-callback.sh -
wget -qO - http://192.168.13.1:32400/library/sections/3/refresh >> /dev/null ;
URL ?deep=1 ?force=1 .

, deluge-movie-callback.sh Execute. , .

.
. , , , - , . - , . , . Deluge , , . Label. , , , , deluged , . , c sudo su - .
 ..srt, 
. , . , - , , ( ). : , - . , , .

extractor.sh :
#!/bin/bash if [[ "$1" != *.mkv ]]; then exit 0; fi; FORMAT_FULL=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\).*language:([[:alpha:]]+)"; FORMAT_SHORT=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\)"; baseName=${1%.mkv}; requiredLangs=$(echo "$2" | tr "," "\n"); echo "$(date +"%D %T"): $baseName" >> /specshare/log.txt; counter=0; tracks=$(mkvmerge -I "$1"); while read -r track; do echo -e "$(date +"%D %T"): $track" >> /specshare/log.txt; if [[ $track =~ $FORMAT_FULL ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; lang=${BASH_REMATCH[4]}; codec=${BASH_REMATCH[3]}; else if [[ $track =~ $FORMAT_SHORT ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; codec=${BASH_REMATCH[3]}; lang="unk"; else id=-1; fi fi; langMatch=false; idMatch=false; typeMatch=false; codecMatch=false; shouldExtract=false; for reqLang in $requiredLangs; do [ "$reqLang" == "$lang" ] && langMatch=true; done [ "$tType" == "subtitles" ] && typeMatch=true; [ "$codec" == "S_TEXT/UTF8" ] && codecMatch=true; [ $id -ne -1 ] && idMatch=true; $langMatch && $idMatch && $typeMatch && $codecMatch && shouldExtract=true; if $shouldExtract ; then subName="$baseName.$lang.srt" if [ -f "$subName" -o "$lang" == "unk" ]; then subName="$baseName.$lang$counter.srt"; (( counter++ )); fi mkvextract tracks "$1" $id:"$subName"; fi done <<< "$tracks"

: , , //, . , capturing groups POSIX- , , , . , .

, . - Plex.



Plex Media Server Plex Media Scanner , /usr/lib/plexmediaserver/ , . , :
; - , - PMS;
, . 2 sudoers - sudo. , LD_LIBRARY_PATH ( 1) Deluge, , .
, , , ...

GET-
- PMS, UI , GET- URL . URL :
http://<serverIP>:32400/library/sections/<sectionId>/refresh
sectionId - PMS. , -

- 3.

, , deluge-movie-callback.sh -
wget -qO - http://192.168.13.1:32400/library/sections/3/refresh >> /dev/null ;
URL ?deep=1 ?force=1 .

, deluge-movie-callback.sh Execute. , .

.
. , , , - , . - , . , . Deluge , , . Label. , , , , deluged , . , c sudo su - .
..srt,
. , . , - , , ( ). : , - . , , .

extractor.sh :
#!/bin/bash if [[ "$1" != *.mkv ]]; then exit 0; fi; FORMAT_FULL=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\).*language:([[:alpha:]]+)"; FORMAT_SHORT=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\)"; baseName=${1%.mkv}; requiredLangs=$(echo "$2" | tr "," "\n"); echo "$(date +"%D %T"): $baseName" >> /specshare/log.txt; counter=0; tracks=$(mkvmerge -I "$1"); while read -r track; do echo -e "$(date +"%D %T"): $track" >> /specshare/log.txt; if [[ $track =~ $FORMAT_FULL ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; lang=${BASH_REMATCH[4]}; codec=${BASH_REMATCH[3]}; else if [[ $track =~ $FORMAT_SHORT ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; codec=${BASH_REMATCH[3]}; lang="unk"; else id=-1; fi fi; langMatch=false; idMatch=false; typeMatch=false; codecMatch=false; shouldExtract=false; for reqLang in $requiredLangs; do [ "$reqLang" == "$lang" ] && langMatch=true; done [ "$tType" == "subtitles" ] && typeMatch=true; [ "$codec" == "S_TEXT/UTF8" ] && codecMatch=true; [ $id -ne -1 ] && idMatch=true; $langMatch && $idMatch && $typeMatch && $codecMatch && shouldExtract=true; if $shouldExtract ; then subName="$baseName.$lang.srt" if [ -f "$subName" -o "$lang" == "unk" ]; then subName="$baseName.$lang$counter.srt"; (( counter++ )); fi mkvextract tracks "$1" $id:"$subName"; fi done <<< "$tracks"

: , , //, . , capturing groups POSIX- , , , . , .

, . - Plex.



Plex Media Server Plex Media Scanner , /usr/lib/plexmediaserver/ , . , :
; - , - PMS;
, . 2 sudoers - sudo. , LD_LIBRARY_PATH ( 1) Deluge, , .
, , , ...

GET-
- PMS, UI , GET- URL . URL :
http://<serverIP>:32400/library/sections/<sectionId>/refresh
sectionId - PMS. , -

- 3.

, , deluge-movie-callback.sh -
wget -qO - http://192.168.13.1:32400/library/sections/3/refresh >> /dev/null ;
URL ?deep=1 ?force=1 .

, deluge-movie-callback.sh Execute. , .

.
. , , , - , . - , . , . Deluge , , . Label. , , , , deluged , . , c sudo su - .
 ..srt, 
. , . , - , , ( ). : , - . , , .

extractor.sh :
#!/bin/bash if [[ "$1" != *.mkv ]]; then exit 0; fi; FORMAT_FULL=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\).*language:([[:alpha:]]+)"; FORMAT_SHORT=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\)"; baseName=${1%.mkv}; requiredLangs=$(echo "$2" | tr "," "\n"); echo "$(date +"%D %T"): $baseName" >> /specshare/log.txt; counter=0; tracks=$(mkvmerge -I "$1"); while read -r track; do echo -e "$(date +"%D %T"): $track" >> /specshare/log.txt; if [[ $track =~ $FORMAT_FULL ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; lang=${BASH_REMATCH[4]}; codec=${BASH_REMATCH[3]}; else if [[ $track =~ $FORMAT_SHORT ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; codec=${BASH_REMATCH[3]}; lang="unk"; else id=-1; fi fi; langMatch=false; idMatch=false; typeMatch=false; codecMatch=false; shouldExtract=false; for reqLang in $requiredLangs; do [ "$reqLang" == "$lang" ] && langMatch=true; done [ "$tType" == "subtitles" ] && typeMatch=true; [ "$codec" == "S_TEXT/UTF8" ] && codecMatch=true; [ $id -ne -1 ] && idMatch=true; $langMatch && $idMatch && $typeMatch && $codecMatch && shouldExtract=true; if $shouldExtract ; then subName="$baseName.$lang.srt" if [ -f "$subName" -o "$lang" == "unk" ]; then subName="$baseName.$lang$counter.srt"; (( counter++ )); fi mkvextract tracks "$1" $id:"$subName"; fi done <<< "$tracks"

: , , //, . , capturing groups POSIX- , , , . , .

, . - Plex.



Plex Media Server Plex Media Scanner , /usr/lib/plexmediaserver/ , . , :
; - , - PMS;
, . 2 sudoers - sudo. , LD_LIBRARY_PATH ( 1) Deluge, , .
, , , ...

GET-
- PMS, UI , GET- URL . URL :
http://<serverIP>:32400/library/sections/<sectionId>/refresh
sectionId - PMS. , -

- 3.

, , deluge-movie-callback.sh -
wget -qO - http://192.168.13.1:32400/library/sections/3/refresh >> /dev/null ;
URL ?deep=1 ?force=1 .

, deluge-movie-callback.sh Execute. , .

.
. , , , - , . - , . , . Deluge , , . Label. , , , , deluged , . , c sudo su - .
..srt,
. , . , - , , ( ). : , - . , , .

extractor.sh :
#!/bin/bash if [[ "$1" != *.mkv ]]; then exit 0; fi; FORMAT_FULL=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\).*language:([[:alpha:]]+)"; FORMAT_SHORT=".*ID[[:space:]]([[:digit:]]+):[[:space:]]([[:alpha:]]+)[[:space:]]\((.*)\)"; baseName=${1%.mkv}; requiredLangs=$(echo "$2" | tr "," "\n"); echo "$(date +"%D %T"): $baseName" >> /specshare/log.txt; counter=0; tracks=$(mkvmerge -I "$1"); while read -r track; do echo -e "$(date +"%D %T"): $track" >> /specshare/log.txt; if [[ $track =~ $FORMAT_FULL ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; lang=${BASH_REMATCH[4]}; codec=${BASH_REMATCH[3]}; else if [[ $track =~ $FORMAT_SHORT ]]; then id=${BASH_REMATCH[1]}; tType=${BASH_REMATCH[2]}; codec=${BASH_REMATCH[3]}; lang="unk"; else id=-1; fi fi; langMatch=false; idMatch=false; typeMatch=false; codecMatch=false; shouldExtract=false; for reqLang in $requiredLangs; do [ "$reqLang" == "$lang" ] && langMatch=true; done [ "$tType" == "subtitles" ] && typeMatch=true; [ "$codec" == "S_TEXT/UTF8" ] && codecMatch=true; [ $id -ne -1 ] && idMatch=true; $langMatch && $idMatch && $typeMatch && $codecMatch && shouldExtract=true; if $shouldExtract ; then subName="$baseName.$lang.srt" if [ -f "$subName" -o "$lang" == "unk" ]; then subName="$baseName.$lang$counter.srt"; (( counter++ )); fi mkvextract tracks "$1" $id:"$subName"; fi done <<< "$tracks"

: , , //, . , capturing groups POSIX- , , , . , .

, . - Plex.



Plex Media Server Plex Media Scanner , /usr/lib/plexmediaserver/ , . , :
; - , - PMS;
, . 2 sudoers - sudo. , LD_LIBRARY_PATH ( 1) Deluge, , .
, , , ...

GET-
- PMS, UI , GET- URL . URL :
http://<serverIP>:32400/library/sections/<sectionId>/refresh
sectionId - PMS. , -

- 3.

, , deluge-movie-callback.sh -
wget -qO - http://192.168.13.1:32400/library/sections/3/refresh >> /dev/null ;
URL ?deep=1 ?force=1 .

, deluge-movie-callback.sh Execute. , .

.
. , , , - , . - , . , . Deluge , , . Label. , , , , deluged , . , c sudo su - .

Source: https://habr.com/ru/post/In202870/


All Articles