1. Tistory
iPhone 에서 찍은 동영상을 Tistory 에 올리다 보면,
스마트폰을 분명 가로로 눕혀서 찍었는데도 불구하고 세로로 올라가는 경우가 있습니다.
포탈에서 검색해 보면,
여러 상용이나, 무료 소프트웨어에서 "회전" 시켜주는 방법이 소개됩니다.
다만,
상용은 돈을 내야 하고, 무료 소프트웨어더라도 이 "회전" 이 들어가면 유료버전을 사용하라고 뜹니다. (아놔)
"내가 이거 돈들지 않고 고쳐본다" 라는 오기가 생기더군요.
2. FFmpeg
예전 미디어 스트리밍 업무에 관여하고 있을 시,
FFmpeg 라는 command line 어플을 알게 되었습니다.
여러 상용 transcoding / encoding 소프트웨어가 시장에 나와 있지만,
입맛에 맞게 in-house 개발을 하려면 FFmpeg 밖에 답이 없어 보였습니다.
그래, FFmpeg 라면 분명 뭐가 있을꺼야 라는 생각으로 작업을 시작해 봅니다.
일단 아래 link 에서 최신판 FFmpeg 를 다운로드 받습니다.
- https://www.ffmpeg.org/download.html
참고로 FFmpeg 는 update 가 잘 되는 편이라,
예전 버전을 가지고 있으면 기능을 원활하게 구현하지 못하거나 더 좋은 방식을 못쓰는 경우가 있습니다.
꼭 최신판을 받으세요.
Windows 라면, directory 를 하나 만들어서 압축을 풀어 놓습니다.
실행 파일은 bin 폴더 밑에 ffmpeg.exe 파일 입니다.
자 시작해 볼까요?
ffmpeg -i input_filename.mov -c copy -metadata:s:v:0 rotate=0 output_filename.mov
실제로 실행시킨 화면 입니다.
"ffmpeg.exe" 가 실행되면서 동영상 파일의 여러 property 를 보여주는데,
"rotate : 90" 로 되어 있는 것을 확인할 수 있습니다.
metadata 만 바꾸어 주는 것이므로, 실행은 바로 끝나고 화일 용량도 거의 같습니다.
4. data 자체를 실제로 회전시키고 re-encoding 하기
부제목 그대로, data 자체를 회전시키면서 재 encoding 하는 방법입니다.
실행 command line 은 다음과 같습니다.
ffmpeg -i input_filename.mov -vf "transpose=2" output_filename.mov
여기서 중요한 key 는 "transpose=X" 입니다.
0 = 90CounterCLockwise and Vertical Flip (default) 1 = 90Clockwise 2 = 90CounterClockwise 3 = 90Clockwise and Vertical Flip
원본 소스가 시계방향 90 도로 틀어져 있으므로,
옵션 2를 선택하여 시계 반대방향 90 도로 지정하였습니다.
아래는 실제 실행시킨 화면 입니다.
metadata 단순 수정과는 다르게, 여러 정보가 쏟아져 나옵니다.
이는 실제로 re-encoding 을 통하여 모든 동영상 data 를 다시 구성했기 때문이지요.
80MB 짜리 mov 파일을 랩탑에서 돌리는데, 약 3분정도 소요된것 같습니다.
encoder 도 원본은 H.264 인데,
FFmpeg 를 거치면서 Lavc57 로 변경되었습니다. 아무래도 CODEC license 문제를 피해가기 위함인 듯 하네요.
완료 파일도 20MB 로 줄어들었습니다.
줄어들어서 좋긴 하지만,
인코딩 횟수를 더하면서 동영상 화질의 열화를 가져다 줄 듯 합니다.
5. 결과
* ORIGINAL
Tistory 에 바로 올리면 이렇게, 오른쪽 90도 틀어진 상태로 올라가게 됩니다.
* METADATA 삭제
metadata 만 삭제한 버전입니다.
문제 없이 원래대로 돌아 왔죠?
* RE-ENCODING
"transpose=2" 를 사용하여 re-encoding 시킨 파일 입니다.
잘 되돌려 놓기는 했습니다만, 살~짝 위의 metadata 와 비교시 화질 열화가 있습니다.
다만, 80MB --> 20MB 로 줄이면서 거의 차이가 없는 정도이므로,
시간이 허락한다면 이렇게 해도 문제는 없겠죠? 선택은 사용자가 판단하면 될 듯 해요.
6. 그럼 180 도 회전은?
180도 회전이 필요한 동영상은 "vflip + hflip" 으로 하면 될것 같습니다.
- https://ffmpeg.org/ffmpeg-filters.html
다만, 이렇게 하면 화면이 뭉개져 버립니다. 이게 FFmpeg 를 사용하는게 어려운 점인것 같아요.
(Linux 버전에서는 테스트해보지 못했습니다.)
180도 회전을 하고싶은 경우는 아래와 같은 순서로 해야 합니다.
1. rotate=0 를 먹여서 metadata 를 reset 한다. (rotate=180 이 먹지 않는다.)
2. vflip + hflip 을 이용하여 180 도 회전 효과를 낸다.
명령어는 다음과 같이 하면 됩니다.
ffmpeg.exe -i R:\White_LED.MOV -c copy -metadata:s:v:0 rotate=0 R:\out.MOV ffmpeg.exe -i R:\Out.MOV -vf "vflip,hflip" R:\vhflip.MOV
아래는 처음 원본 source 이고, 그 다음은 "rotate=0 --> vflip + hflip" 한 결과 입니다.
우선 "rotate=0" 입니다. 상하가 그대로죠?
아래는 최종적으로 "vflip + hflip" 한 결과 입니다.
잘 되죠? :-)
화질 저하는 거의 느끼지 못할만큼 있지만, 용량은 re-encoding 을 통하여 1/4 이상 줄었습니다.
7. Reference
아래 link 는 FFmpeg 을 이용한 회전 사용법에 대해 알아본 stack overflow 입니다.
- https://stackoverflow.com/questions/20664460/remove-rotate-metadata-from-mp4
- https://stackoverflow.com/questions/3937387/rotating-videos-with-ffmpeg/9570992#9570992
FIN
후훗, 이제 걱정 없구만.
다 덤벼~!
'Software' 카테고리의 다른 글
Software | 회로설계 프로그램 EAGLE (2) | 2018.09.04 |
---|---|
Linux | Ubuntu-Mate 를 원격 데스크탑으로 사용해 보자 (0) | 2018.05.13 |
Software | u-blox 의 GPS 어플을 사용해 보자 (0) | 2017.09.05 |
Software | Visual Studio Code 를 사용해 보자 (0) | 2017.09.01 |
Software | IntelliJ IDEA 를 사용해 보자 (0) | 2017.08.30 |