본문 바로가기

취미, 관심/NAS, Server

[Synology] 스트리밍 동영상 예약 녹화하기, tvstreamrecord

업무상 홈쇼핑 라이브 영상을 녹화해야할때가 있습니다. 

기존엔 PC에서 한명이 붙잡고 앉아서 녹화를 떴는데, 더 효율적인 방법이 있지 않을까 해서 찾아봤습니다.

TVHeadend가 적당했으나.... 사실 송출까지는 필요도 없기도 하고, 그보다도 어제 신나게 세팅을 다 마치고, 녹화 테스트도 해봤는데 정상작동 하더니...

퇴근하면서 심야에 예약녹화를 걸어보니 오류가 나있더군요.

(링크(m3u8)는 모두 살아있었는데 말이죠.)

그래서 다른 방법을 시도해보기로 했습니다.

클리앙에 에갈 님께서 올려주신 방법입니다.

 

 

tvstreamrecord로 예약녹화 잘 되네요. : 클리앙

안녕하세요? 그간 라즈베리파이에서 tvheadend로 예약녹화하고 있었는데 맥이나 pc에서도 간편하게 예약녹화가 되는 걸 찾아보다가 tvstreamrecord를 사용해보니 맥이나 pc에서 잘 동작합니다. 물론 시

www.clien.net

 

먼저, 제가 필요한 조건은 아래와 같습니다.

1. 시놀로지 NAS에 올려서 사용이 가능할 것

2. 예약이 되어야 할 것(스트리밍 필요없음)

 

시놀로지 패키지로 제공이 되고, 애초에 예약녹화 패키지이니 제가 원하는 모든 조건을 갖췄습니다.

DSM 7.0 역시 지원합니다.

사용 환경은 DS920+ / DS1821+ 입니다만, 다른 기기에서도 될거라 생각합니다.

 

SPK 설치는 여기에서 다운로드 받으시면 됩니다. 하단 Assets 부분에서 받으면 되요.

 

Release DSM7 release for cphub.net (1.6.2) · Pavion/tvstreamrecord

Release notes This is a release for a coming DSM7 version and cphub.net repository. Please read following notes carefully or you'll ask questions afterwards 🙂 General information and major changes ...

github.com

 

도커로 설치를 원하시는 분은 이렇게 해보시면 됩니다.

 

GitHub - Pavion/tvstreamrecord: Timed TV stream recording for Python

Timed TV stream recording for Python. Contribute to Pavion/tvstreamrecord development by creating an account on GitHub.

github.com

* 도커로 설치 시 별도의 폴더(record용) 를 마운트하여 하려 했으나, 썩 원하는 결과가 나오지 않아서 그냥 포기하고(..) 패키지로 설치했습니다.

TZ, Timezone이 틀어져 있는 문제인데. 저는 해결 못했어요..능력자님이 해주겠지..

패키지 설치 시 꼭 volume1 에 설치를 해야만 합니다!
설치 스크립트가 volume1 기준입니다. 다른 볼륨에 설치하면 정상 동작이 되지 않을 수 있습니다.

패키지 센터를 열고 우측의 수동 설치를 클릭하여 아까 다운로드 받은 spk파일을 불러온 후 진행하면 됩니다.

 

기본 설정

http://NAS IP:8030으로 들어가봅니다.

초기 실행화면입니다.

 

녹화 폴더를 바꾸시려는 분은 가장 먼저 폴더 변경을 해 주셔야 합니다.

Config - General 탭으로 이동합니다.

 

Browse 버튼을 누르면 폴더 리스트가 쭉 뜹니다. 도커로 설치했을때의 화면이라 조금 다르지만, 어쨌든 뭐..;;([ 폴더는 뭘까요 -_-; )

루트폴더부터 보여주는만큼, 권한이 없어 파일 저장이 되지 않을 수 있습니다. volume1 을 클릭해 원하는 폴더에 저장되도록 해줍니다.

목록은 많이 뜨지만, 사용을 하기위해 아래와 같은 조건이 필요합니다.

1. 저장할 폴더의 읽기/쓰기 권한이 필요합니다.
2. 해당 폴더 상위 폴더의 읽기 권한 이상이 있어야 합니다.

 

Date/time locale 부분은 기본값이 유럽이므로, ko로 설정해줍니다.

 

좌측 상단의 Submit changes 버튼을 눌러 저장을 하고, 채널을 추가합니다.

저는 상단에 말씀드린대로, 업무상 필요한 홈쇼핑 방송의 녹화를 위함이라, 다른 부분은 따로 검색해보셔야 합니다.

EPG도 필요가 없기때문에 해당 부분은 건너뜁니다;;

 

위 내용을 채우면 채널 추가가 끝납니다.

 

전체적으로 어렵게 구성되어있진 않아서 녹화기능만 필요하다면 이걸 사용해도 될 것 같습니다.

 

녹화에 문제가 생겼습니다.

Something went wrong with ~~ 내용이 뜨면서 파일 녹화를 하지 못하는 현상이 생겼습니다.

두대의 NAS 모두에서 동일한 증상이 나왔고, ffmpeg 를 통해 수동 명령을 해도 먹히지 않았습니다.

 

그와중에 사무실에서 사용하는 나스는 시간이 틀어지기까지.....................

 

도커로도 해보고 별짓을 하며 삽질을 하다가, 막판에 해결했습니다.

(사실 설명서 페이지를 잘 봤으면 금방 해결했을 것 같습니다.....)

 

1. ffmpeg를 다운로드 합니다.

시놀로지는 아래의 링크를 통해 다운로드 하시면 되며, 

 

John Van Sickle - FFmpeg Static Builds

Welcome! Here you'll find the latest versions of FFmpeg for Linux kernels 3.2.0 and up. For installation instructions please read the FAQ. Note: it's highly recommended to use git master builds, because bug fixes and other improvements are added daily. All

johnvansickle.com

최신 릴은 왼쪽!

 

사용하시는 제품에 맞게 받아주세요. +계열은 맨위 링크입니다.

저는 좌측 가장 위의 링크를 선택했습니다(..)

 

적당한 위치(저는 /volume1/tvstreamrecord/ 하위에 ffmpeg 폴더를 생성했습니다.)에 압축을 풀어줍니다.

 

다 풀고난 후에는 tvstreamrecord 에서 절대경로설정을 해줘야합니다.

 

IP:8030 으로 tvstreamrecord페이지를 열고, Config - FFMPEG support 탭으로 갑니다.

Full path for ffmpeg 부분의 값을 변경해줍니다.

저는  /volume1/tvstreamrecord/ffmpeg/ 에 있으니, 마지막 파일명까지 넣어줍니다.

/volume1/tvstreamrecord/ffmpeg/ffmpeg

 

이렇게 바꿉니다.

 

이부분 해결하느라 확인을 못했는데, 만약 파일 생성이 되지 않는다면

 

 

이 부분을 확인해보셔야 할 것 같습니다. Path 부분요. 

1. 경로

2. 권한

등을 확인해보셔야 할 것 같습니다. -_-;

 

보너스! 파일 녹화 후 자동으로 인코딩 하고 원하는 폴더로 이동시키기!

업무용으로 사용하고 있으므로 .ts 파일로 그대로 공유하기보단, mp4로 변환을 하여 용량도 줄이고, 나스도 굴리고(?), 최종 파일 경로를 단순화 시킴으로서 저 폴더를 격리시키고자, 구글링을 하며 이런저런 스크립트를 조합하여 만들어 봤습니다.

 

일단 내용은 아래와 같습니다.

#!/bin/bash
#첫번째 인수에서 파일명 가져오기(확장자 포함)
file="${1##*/}"
#로그 경로
log_folder="/volume1/tvstreamrecord/log/"
#인코딩한 파일을 저장할 경로
TRANSCODEPATH="/volume1/tvstreamrecord/complete/"
#인코딩 한 파일을 이동할 경로
mvdrectory="/volume1/tvstreamrecord/source/"

#인코딩 시작
/volume1/tvstreamrecord/ffmpeg/ffmpeg -i "$1" -vcodec libx264 -acodec copy -threads 2 -b:a 128k -level 4.1 "$TRANSCODEPATH${file%.*}.mp4" </dev/null >>"$log_folder${file%.*}.log" 2>&1 
#원본파일 이동
mv "$1" "$mvdrectory$file"
#종료
exit 0

windows 에서 그냥 수정/저장하고 하면 오류가 뜹니다.ㅡ.ㅡ

한창 삽질을 하고(역시 오류메시지로 검색하는것이 가장 빠릅니다.)

notepad++에서 파일을 열고 우하단의 줄 바꿈 구문 부분을 수정해야만 합니다.

Unix(LF) 를 사용하셔야만 합니다.

 

제가 만들어 둔 대로라면, 아래 폴더가 필요합니다.

/volume1/tvstreamrecord/ 아래에

complete

log

org_source

각각의 폴더가 필요합니다. 

위 스크립트의 로그 경로, 인코딩한 파일을 저장할 경로, 인코딩 한 파일을 이동할 경로 등을 임의의 경로(절대경로)로 수정하신 후 그에 대응하는 폴더를 미리 생성해두셔도 됩니다.

파일 이동이 필요 없다면 해당 구문을 삭제해주시면 됩니다.

rm 명령으로 대체하여 해당 파일을 삭제하실수도 있습니다.

-threads 2 부분은 본인 시스템에 맞게 적당히 수정하시면 됩니다. 제경우 그때그때 돌아가는거라서.. 전체 자원 사용하게 하시려면 0으로 하시면 됩니다.

 

저는 이 파일을 /volume1/tvstreamrecord/ 에 저장해 두었습니다.

 

tvstreamrecord 설정 페이지 Advanced 탭의 중하단 부분을 아래와 같이 설정합니다.

Enable postprocessing - 활성화
Postprocessing command (use %file% for full filename) - /volume1/tvstreamrecord/encoding.sh "%file%"
/[위 스크립트가 있는 경로/[.sh파일 이름].sh "%file%"

따옴표 빠지면 중간에 공백이 있는경우 처리를 못합니다.

※ 주의사항

파일명에 공백이 있으면 안됩니다!

따옴표 넣고 조금 수정해서 해결봤습니다.

시스템 리소스를 많이 먹을 수 있습니다.