LINUX.ORG.RU

Нужна помощь - скрипт SH для создания playlist

 ,


0

2

Доброго времени суток. На просторах был найден скрипт, для создания playlist.m3u на сервере.

================
#!/bin/bash

rawurlencode() {
  local string="${1}"
  local strlen=${#string}
  local encoded=""
  local pos c o

  for (( pos=0 ; pos<strlen ; pos++ )); do
     c=${string:$pos:1}
     case "$c" in
        [-_.~a-zA-Z0-9] ) o="${c}" ;;
        * )
     printf -v o '%%%02x' "'$c"
     esac
     encoded+="${o}"
  done
  echo "${encoded}"
}

rm -rf playlist.m3u
for f in *.mkv; do echo "#EXTINF:-1, $f
  ftp://192.168.88.250/hdd/"$(rawurlencode $f) >> playlist.m3u;
done
sed -i '1s/^/#EXTM3U\n/' playlist.m3u

# End of File
================ 
Помогите с вопросом:

  1. Нужно, что бы скрип рекурсивно сканировал папки\подпапки....
  2. По возможности (echo #EXTINF:-1, $f) - добавить название папки + название файла.

В SH вовсе не силен (((( Заранее благодарен



Последнее исправление: kiggo (всего исправлений: 3)

Ответ на: комментарий от Silerus

ответ

Прошу прощения. Может не совсем правильно изложил суть вопроса.

В целом задача следующая: На домашнем сервере /media/hdd есть большое количество видео файлов. Их количество изменяется. Для удобства просмотра со всех устройств в доме - нужен playlist.m3u данного раздела. Вот и пытаюсь решить данный вопрос.

kiggo
() автор топика
Ответ на: ответ от kiggo

Давайте попробуем так разобъем задачу

  1. Надо обновлять содержимое файла playlist.m3u
  2. Автоматизровать процесс обновления
  3. Надо синхронизировать его с остальными устройствами

1. Обновление содержимого
это можно сделать простым скриптом

#!/bin/bash
find path1 -type f \( -iname "*.mp*" -o -iname "*.avi" -o -iname "*.mkv" \)> path2/playlist.m3u
sed -i 's/^path1/url/' path2/playlist.m3u
path1 - путь до верхнего уровня коталога поиска path2 - путь до место хранения файла url - url вашего хранилища
2. Обеспечиваем автоматизм надо использовать cron
3. google drive или еще что нибудь

Silerus ★★★★
()

Ну как-то так

#!/bin/bash

function rawurlencode() {
  local string="${1}"
  local strlen=${#string}
  local encoded=""
  local pos c o

  for (( pos=0 ; pos<strlen ; pos++ )); do
     c=${string:$pos:1}
     case "$c" in
        [-_.~a-zA-Z0-9/] ) o="${c}" ;; #ИСПРАВЛЕНО чтобы не трогало слеши
        * )
     printf -v o '%%%02x' "'$c"
     esac
     encoded+="${o}"
  done
  echo "${encoded}"
}
export -f rawurlencode

{
  echo '#EXTM3U'
  find /YOUR/MOVIES/DIR/ -iname '*.mkv' -exec bash -c "echo '#EXTINF:-1, {}
ftp://192.168.88.250/hdd/'\$(rawurlencode '{}')" \;
} > playlist.m3u

legolegs ★★★★★
()
Ответ на: комментарий от legolegs

Вот так, пожалуй, даже почище и попонятней.

#!/bin/bash

function rawurlencode() {
  local string="${1}"
  local strlen=${#string}
  local encoded=""
  local pos c o

  for (( pos=0 ; pos<strlen ; pos++ )); do
     c=${string:$pos:1}
     case "$c" in
        [-_.~a-zA-Z0-9/] ) o="${c}" ;; #ИСПРАВЛЕНО чтобы не трогало слеши
        * )
     printf -v o '%%%02x' "'$c"
     esac
     encoded+="${o}"
  done
  echo "${encoded}"
}
export -f rawurlencode

function file2m3u() {
echo "\
#EXTINF:-1, $1
ftp://192.168.88.250/hdd/"$(rawurlencode "$1")
}
export -f file2m3u

{
  echo '#EXTM3U'
  find /YOUR/MOVIES/DIR/ -iname '*.mkv' -exec bash -c 'file2m3u "$0"' {} \;
} > playlist.m3u

legolegs ★★★★★
()
Последнее исправление: legolegs (всего исправлений: 3)
Ответ на: комментарий от legolegs

ответ

Для начала спасибо Вам большое за потраченное время и усилия. Только, есть маленькая ошибка

environment: строка 1: rawurlencode: команда не найдена

playilist.m3u выглядит так:

#EXTINF:-1, /media/pi/hdd/kino/kino.mkv
ftp://192.168.88.250/hdd/
отсутствует имя самого файла.

kiggo
() автор топика
Ответ на: комментарий от Jopich1

ответ

в доме 4 телевизора Samsung Tizen OC т.к. производитель игнорирует FTP, приходится выдумывать. Часто. приходиться начинать смотреть кино на кухне - потом в комнате, ну и т.д. + куча детского контента. Сеть 1Гбит + MikroTik + NAS(debian) как то привык уже.

kiggo
() автор топика
Ответ на: ответ от kiggo

Вы, вероятно, успели взять скрипт из второго поста до того, как я его поправил, добавив export -f rawurlencode.

legolegs ★★★★★
()

На просторах был найден скрипт, для создания playlist.m3u на сервере.

Чё ещё за велосипед? fapg же есть!

Deleted
()
Ответ на: комментарий от legolegs

СПАСИБО

Огромное спасибо Вам. Все работает !!!

kiggo
() автор топика
Ответ на: комментарий от Deleted

fapg

Есть, не спорю. Но mkv, m2ts - не хочет собирать.

kiggo
() автор топика
Ответ на: комментарий от Jopich1

DNLA поддерживатся

Да, DNLA поддерживается. Но перемотать в DLNA пол фильма MKV UHD - занимает тех же 20 мин. Samba/FTP - делает это гораздо быстрее.

kiggo
() автор топика
Ответ на: комментарий от svinarenko

Задумался

Надо пробовать. Честно, не думал над этим. Почитаю и потестирую. Спасибо.

kiggo
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.