https://www.clien.net/service/board/cm_nas/10935172?po=0&od=T31&sk=&sv=&category=&groupCd=CLIEN
여기에 댓글로 달았던 스크립트를 좀 더 다듬었습니다. 스케줄링으로 사용하신다기에 거기에 맞게 만들어 보았습니다.
변환하고자 하는 파일과 시간을 list.txt에 작성합니다.
필요한 것은 절대 경로가 포함된 파일 이름, 시작시간, 영상시간 입니다. 구분자는 | 입니다.
절대경로가 포함된 파일이름|시간시간|영상시간
내용 형식은 다음과 같습니다. 인코딩할 갯수만큼 주욱 밑으로 쓰시면 됩니다.
/경로/여기는 녹화 폴더/파일이름은 첫번째.mkv|00:05:30|00:00:21
/경로/여기는 녹화 폴더/파일이름 두번째.ts|00:01:30|00:00:40
encode.sh 파일은 이렇게 하면 됩니다.
#!/bin/sh
IFS=$'\n'
for i in $(cat /절대경로/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=$(/bin/dirname "${filenameO}")
filename=$(/bin/basename "${filenameO}")
extension="${filename##*.}"
filename="${filename%.*}"
trim="${path}"/"${filename}"_trim."${extension}"
mp4="${path}"/"${filename}".mp4
/bin/ffmpeg -i "${filenameO}" -map 0:0 -map 0:1 -c:v copy -c:a copy -ss "${starttime}" -t "${duration}" "${trim}"
/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
list.txt 파일만 수정한후에 encode.sh 파일을 스케줄링에 걸어 놓으면 원하는 시간에 자동으로 인코딩합니다.
현재 설정은 인코딩된 결과물도 원본파일과 같은 경로에 있게 되어 있습니다.
여기에 댓글로 달았던 스크립트를 좀 더 다듬었습니다. 스케줄링으로 사용하신다기에 거기에 맞게 만들어 보았습니다.
변환하고자 하는 파일과 시간을 list.txt에 작성합니다.
필요한 것은 절대 경로가 포함된 파일 이름, 시작시간, 영상시간 입니다. 구분자는 | 입니다.
절대경로가 포함된 파일이름|시간시간|영상시간
내용 형식은 다음과 같습니다. 인코딩할 갯수만큼 주욱 밑으로 쓰시면 됩니다.
/경로/여기는 녹화 폴더/파일이름은 첫번째.mkv|00:05:30|00:00:21
/경로/여기는 녹화 폴더/파일이름 두번째.ts|00:01:30|00:00:40
encode.sh 파일은 이렇게 하면 됩니다.
#!/bin/sh
IFS=$'\n'
for i in $(cat /절대경로/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=$(/bin/dirname "${filenameO}")
filename=$(/bin/basename "${filenameO}")
extension="${filename##*.}"
filename="${filename%.*}"
trim="${path}"/"${filename}"_trim."${extension}"
mp4="${path}"/"${filename}".mp4
/bin/ffmpeg -i "${filenameO}" -map 0:0 -map 0:1 -c:v copy -c:a copy -ss "${starttime}" -t "${duration}" "${trim}"
/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
list.txt 파일만 수정한후에 encode.sh 파일을 스케줄링에 걸어 놓으면 원하는 시간에 자동으로 인코딩합니다.
현재 설정은 인코딩된 결과물도 원본파일과 같은 경로에 있게 되어 있습니다.
응용해 봐야겠네요..
결과적으로 메인 프로세스는 아주 훌륭합니다..원하는 바를 다 하게 해 주네요..ㅎㅎ 감사합니다..
다만 cat list.txt가 절대 경로를 써 줘야 열리더라구요...뭐 저의 경우는 그랬습니다..
첨에 파일 하나만 테스트 했는데 계속 cat: list.txt: No such file or directory 이렇게 떨어져서...
결국은 절대 경로로 수정해서 했더니 아주 잘되네요..ㅎㅎ 단건 아니 다건도 for 잘 돕니다..
끝나면 잘 빠져 나오구요..ㅎㅎ
다시 한번 감사 드립니다~^^
예를 들어 AC3 -> AAC로 하려고
for에서 xxx.mp4를 집어다가 xxx-aac.mp4로 만들게 했더니
만들어진 xxx-aac.mp4를 가지고 xxx-aac-aac.mp4를 만들기를 반복하는 경우가 생기더라구요.. ㅋㅋ
요런 점만 걸러지도록 하시면 될 것 같습니다.
아 위에는 폴더를 따로 두셨으니 이런 문제가 안생기시겟네요.
저도 이번에 로직 좀 보완해야겠습니다.
감사합니다.