영상 파일은 용량이 크다. 그러나 용량을 줄일 수 있다. 우선 압축률이 높은 코덱으로 변환해서 저장하면 용량을 아낄 수 있고, 다음으로 화질을 저하시켜서 할 수도 있다. 사람 눈에는 거기서 거기인 정도로 화질을 저하시키면 된다. 오래 보관하는 게 더 중요하면 그렇게 하자.
필요한 것은 ffmpeg다.
리눅스 사용자는 apt install ffmpeg
같은 명령어로, 맥 사용자는 brew install ffmpeg
같은 명령어로 설치하면 된다. 윈도우 사용자는, ffmpeg 사이트에서 링크해 둔 윈도우용 바이너리를 받으면 된다.
다만, 아래 스크립트는 bash용이라서 윈도우 cmd에서는 돌아가지 않는다. WSL, cygwin을 사용하거나 윈도우용 git를 설치하면 따라오는 git bash를 사용하면 아래 스크립트를 활용할 수 있다.
아래 bash 함수를 .bshrc
, .zshrc
같은 데 등록해서 사용한다. 혹은 이 파일을 다운로드해서 실행 권한을 부여해 사용해도 된다: mov2mp4.sh
, mov2mp4-optimize.sh
이 스크립트는 변환이 성공하면 원본 파일은 삭제해 버린다. 주의하기 바란다.
삭제하지 않고 휴지통에 넣고 싶으면 &&
뒤에 있는 rm
을 휴지통에 넣는 명령어로 변경한다. 아무것도 하고 싶지 않으면 그냥 &&
부터 지운다. &&
는 앞의 명령어가 성공하면 실행할 추가 명령어를 적는 문법이니까 그냥 지워도 된다.
# 파일 포맷만 변경해 용량 줄이기
function mov2mp4 {
OIFS="$IFS"
IFS=$'n'
for f in $(find . -name *.MOV)
do ffmpeg -i "$f" "${f/.MOV/.mp4}" && rm "$f"
done
for f in $(find . -name *.mov)
do ffmpeg -i "$f" "${f/.mov/.mp4}" && rm "$f"
done
for f in $(find . -name *.mkv)
do ffmpeg -i "$f" "${f/.mkv/.mp4}" && rm "$f"
done
IFS="$OIFS"
}
# 파일 포맷도 줄이고 품질도 조정해 용량 줄이기
function mov2mp4-optimized {
OIFS="$IFS"
IFS=$'n'
for f in $(find . -name *.MOV)
do ffmpeg -i "$f" -vcodec libx265 -crf 28 "${f/.MOV/.mp4}" && rm "$f"
done
for f in $(find . -name *.mov)
do ffmpeg -i "$f" -vcodec libx265 -crf 28 "${f/.mov/.mp4}" && rm "$f"
done
for f in $(find . -name *.mkv)
do ffmpeg -i "$f" -vcodec libx265 -crf 28 "${f/.mkv/.mp4}" && rm "$f"
done
IFS="$OIFS"
}
원리는 간단하다. bash의 for 문법을 이용해서 MOV 파일이나 mkv 파일을 훑고 ffmpeg로 변환한다.
이 때 파일을 찾는 건 find 명령어로 한다.
그런데 find 명령어는 for에 파일을 넘겨줄 때 띄어쓰기 단위로 파일명을 넘겨준다. 이걸 방지하기 위해서 bash 환경변수 $IFS
에 역시 환경변수 $'n'
을 잠시 넣어 준다.
ffmpeg 명령어는 간단한데, -i
는 인풋 파일, 그리고 뒤에 아무 플래그 없이 쓰는 게 아웃풋 파일명이다. mp4로 확장자만 바꿔 줘도 용량을 줄일 수 있다.
mov2mp4-optimize
명령은 ffmpeg 명령에 옵션을 두 개 붙였는데, 비디오 코덱으로 libx265를 사용하라는 것과 crf를 28로 맞추라는 것이다. mp4는 보통 libx264를 사용할 텐데 libx265가 더 최신 코덱이고 압축률도 높다고 한다(HEVC가 쓰는 포맷이라고). crf는 숫자가 높을수록 저품질이 된다. 근데 libx265(즉, H.265)는 윈도우 컴에서 영상 편집할 때 성능을 많이 잡아먹을 테니, 맥 유저가 아니라면 나중에 편집해야 할 영상은 libx264로 압축하자.
설명은 간단하게 이정도 하겠다. 나도 더 자세히 쓰려면 찾아 봐야 하는데, 이정도로 감만 잡으면 되지 않을까 싶다.
댓글 남기기