참고) 윈도우에서 자르기 인코딩 FFMPEG http://3jini.tistory.com/168
녹화시 후처리 스크립트를 주어서 녹화후 바로 인코딩 할 수도 있지만,
모아둔 녹화영상 인코딩을 하기 위해서 찾아보았다.
https://www.clien.net/service/board/cm_nas/10936355
글을 참고, 스크립트를 사용하였다.
-스크립트의 장점이 여러파일을 일괄로 할 수 있다.
-불필요한 구간을 잘라서 필요구간만 인코딩할수 있다. (예를 들어, 시작시간, ~20분간
encod.sh 이름으로 작성
/volume1/pvr/encoding/list.txt
경로에 list.txt를 둔다.
list.txt 안에 내용은 다음 주석에 표시된 형태를 따라서 적어둔다.
/volume1/pvr/encoding 아래에는 영상이 있다.
절대경로가 포함된 파일이름|시간시간|영상시간
주의!!!
list.txt 에서 시간주는 부분에 공백이 있으면 안된다.
/volume1/pvr/encoding/01.mts|00:04:10|00:25:10여기가 끝이어야하는데
/volume1/pvr/encoding/01.mts|00:04:10|00:25:10 이렇게 끝으로 스페이스바 한칸이 있거나 하면 안된다는것. 10이 커서의 끝이어야한다.
/volume1/pvr/encoding/01.mts|00:04:10|00:25:10
/volume1/pvr/encoding/02.mts|00:05:30|00:26:00
01.mts는 4분10초부터 시작하여 25분10초간 (끝시간이 아니다,구간시작시간부터 영상의길이)
02.mts는 5분30초부터 시작하여 26분간
encod.sh 는 다음명령으로 실행되도록 해준다.
chmod +x encod.sh
원본 설명중에서 시놀 215+버전의 DSM기준이라서, 나의 Xpenology Nas DSM 5.2.5967버전에서의 경로와 맞지 않는 3부분을 수정하였다.
/bin/dirname --> /usr/bin/dirname
/bin/basename --> /usr/bin/basename
/bin/ffmpeg --> /usr/syno/bin/ffmpeg
사실 아무데서나 각 명령이 실행되도록 path가 되어 있어서
절대경로를 빼고
dirname
basename
ffmpeg
으로 주어도 무방하겠다.
ssh 터미널에서 한번 위 각 명령을 실행해보고, 실행이 된다면 모든 경로에서 된다고 보면 되겠다.
#!/bin/sh
IFS=$'\n'
# 녹화할 파일 형식 txt
# 스크립트와 같은 위치에 두자
# 절대경로가 포함된 파일이름|시간시간|영상시간
# /경로/여기는 녹화 폴더/파일이름은 첫번째.mkv|00:05:30|00:00:21
# /경로/여기는 녹화 폴더/파일이름 두번째.ts|00:01:30|00:00:40
# cat /절대경로/list.txt
for i in $(cat /volume1/pvr/encoding/list.txt)
do
filenameO=$( echo "$i" | cut -d "|" -f 1 )
starttime=$( echo "$i" | cut -d "|" -f 2 )
duration=$( echo "$i" | cut -d "|" -f 3 )
path=$(/usr/bin/dirname "${filenameO}")
filename=$(/usr/bin/basename "${filenameO}")
extension="${filename##*.}"
filename="${filename%.*}"
trim="${path}"/"${filename}"_trim."${extension}"
mp4="${path}"/"${filename}".mp4
/usr/syno/bin/ffmpeg -i "${filenameO}" -map 0:0 -map 0:1 -c:v copy -c:a copy -ss "${starttime}" -t "${duration}" "${trim}"
/usr/syno/bin/ffmpeg -i "${trim}" -codec:v libx264 -profile:v baseline -preset slow -b:v 2000k -maxrate 4000k -vf scale=-1:720 -threads 0 -codec:a aac -b:a 128k -f mp4 -strict experimental "${mp4}"
done
encod.sh 다운받기
여기서 잠깐,!
파일들의 절대경로를 얻을라니 좀 힘들었다. 구글 검색
리눅스에서는 기본적으로 ls 명령으로 파일리스트를 볼수 있다. (윈도우의 dir)
ls /volume1/pvr/encoding/Mira2 > list.txt 로 하면
절대경로가 포함되어있지 않고 단순히
01.mts
02.mts
만 나온다.
만약 영상들이 많다면?? 조금이라도 노가다 성을 줄이기 위해서
변환할 영상이 /volume1/pvr/encoding/ 에 있다고 한다면,
ls -d1 $pwd/volume1/pvr/encoding/* > list.txt
실제사용.
에피소드 3개 ts 파일이
/volume1/pvr/encoding 폴더에 있고
list.txt 에는
/volume1/pvr/encoding/영상제목.E05.ts|00:15:15|00:21:39
/volume1/pvr/encoding/영상제목.E11.ts|00:11:51|00:21:39
/volume1/pvr/encoding/영상제목.E12.ts|00:11:51|00:21:39
과 같이 되어있다.
터미널에서
sh /volume1/pvr/encoding/encod.sh
와 같이 명령을 내려보면 스크립트가 동작되면서
ffmpeg으로 먼저 시간구간을 잘라낸 trim 파일이 생성되고,
트림이 끝나면 바로 mp4로 변환하는 작업이 이루어진다.
mp4로 인코딩되는 과정.