2008년 05월 11일
HDTV 인코딩 영상 전처리
HDTV를 녹화해야 할 일이 가끔 있다. 다큐멘터리 녹화할 일도 있겠고, 시사 프로그램, 드라마 등등.
어쨌든 녹화했으니 이걸 적당한 크기와 포맷으로 인코딩을 해야 하는데, 인코딩 전의 전처리가 그 인코딩 된 후의 결과를 좌우하겠지. 아무리 성능 좋은 코덱이라도 그 인코딩 전의 상태가 인코딩 효율을 결정하게 된달까.
여기에서 소개하는 방법은 용량을 포기한 최상의 화질을 위한 방법은 아니다. 용량대 화질 비율을 최대한 높이는 것은 맞지만, 사람들끼리 돌려보기 위한, 적당한 크기와 용량의 동영상을 만들기 위한 것이니 그리 아시고 보시면 되겠다. 뭐, 활용은 하기 나름이겠고.
주요한 것으로..
1. 화면 비율 및 크기 맞추기
2. 디인터레이싱
3. 픽셀 노이즈 제거
4. YV12로 최종 변경처리
이 정도를 들 수 있겠다. 각각은 제법 중요한 과정이 아닐 수 없는데, 하나하나 간단히 살펴보겠다.
살펴보기에 앞서, 본인은 AVISynth로 주로 전처리 작업을 하는데, 이것에 대해서는 스스로 알아보기 바란다. 각종 필터들도 많고, 무료에 공개 소프트웨어니 구글에서 조금만 검색하면 어렵지 않게 구할 수 있겠다.
1. 화면 비율 맞추기
국내 HDTV 방송의 특징은, 와이드가 아닌 4:3의 SD 방송도 16:9로 길~쭉하게 늘려 나온다는 것, 그리고 HDTV 방송에도, 특히 시사 프로그램의 경우, 아날로그 소스가 빈번하게 등장하여 화면 좌우가 검은색으로 나오는 경우도 많다는 것.
a) 드라마 등의 경우에는 완벽하게 16:9의 와이드 HD방송으로 송출되므로 신경쓸 것 없이 사용.
b) SD방송의 경우, 16:9의 화면을 4:3으로 적절히 리사이징 하여 사용
c) 뉴스나 시사 프로그램의 경우 HD방송임에도 불구하고 좌우가 검게 처리되는 4:3 아날로그 영상이 높은 비율로 등장하고, 해당 좌우 부분이 방송되는 순간에도 그 부분을 잘라내더라도 문제가 없는 형태로 방송되는 경우가 많음. 따라서 4:3 Pan&Scan 방식으로 처리해도 문제가 없을 경우 4:3 P&S로 처리하고, 원본 그대로 사용하고 싶은 경우 16:9 와이드 형태 그대로 사용.
특히 c의 부분에 있어 고민을 조금 하게 되는데, 보기 편하게 만드는 것이 목적이라면 4:3 P&S도 고려해볼만 하다. 의미 없는 부분의 공백을 제거하여 와이드가 아닌 17혹은 19인치 모니터에서도 큰 화면으로 잘 나올 뿐더러, 어쨌든 용량도 절약되니 말이다.
그리고 화면의 상하좌우 공백을 잘라내는 것도 잊지 말 것. 검은 색으로 테두리가 나오면 인코딩 한 후의 화면도 보기 좋지 않을 뿐더러, 역시 용량도 계속 낭비되니 말이다.
최종적인 적정한 화면의 크기는.. 디인터레이싱과 함께 나오니 다음으로.
2. 디인터레이싱
HDTV 소스의 디인터레이싱이야말로 뜨거운 감자가 아닐 수 없다. 많은 사람들이 60fps Bob를 최상으로 친다. 원래의 데이터도 모두 포함할 뿐더러, 인터레이스 상태 그대로 인코딩 하는 것보다는 인코딩 효율이 높기 때문이다. 하지만 이러한 방법은 60fps인 만큼 인코딩 후의 용량도 심히 많이 사용될 뿐더러, 60fps를 재생하기 위한 하드웨어를 갖추어야 한다는 점에서도 여러모로 좋은 방법은 아니다. PMP등의 재생기기에서 재생하는 경우를 상정해도, 60fps Bob은 그다지 매력적인 방법은 아니다.
HDTV의 소스는 원래 소스 자체가 인터레이스드 60프레임이니 프로그레시브 소스 자체가 존재하질 않으니 원래의 프로그레시브를 맞추어내는 것이 불가능하다.
개인적으로 (적당한 용량에 적당한 화질의 동영상을 제작하는데 있어서) 추천하는 방법은.. 리사이징을 이용한 블렌딩이다. 1900대x1000대의 동영상을 그대로 인코딩하는 것도 무리이니 이것의 크기를 줄이면서, 디인터레이싱 처리도 하자는 것이다. 결과적으로, 단순히 화면 크기를 반으로 리사이징 하는 것 만으로 홀수라인과 짝수라인이 섞이면서, 900대x500대의 디인터레이싱 된 결과물이 만들어지는 것이다.
해상도를 반으로 줄이면서, 홀수라인과 짝수라인을 섞어버리면 해상도도 적당해지고, 디인터레이싱도 해결되는 것이다. 움직임이 많은 화면에서도 비교적 자연스러운 움직임을 보여줄테니 의심스러운 분들은 직접 테스트해보시길.
한가지 문제라면, 하단에 흐르는 자막이 정지 영상에서 두개로 보인다는 점인데.. 그것 빼고는 매우 만족스러운 방법이다.


3. 픽셀 노이즈 제거
어떤 분들은 '이뭥미?' 하시겠다. '원본 그대로!'를 외쳐대는 많은 분들의 경우 더욱 그러하겠다.
모든 녹화장비들은 노이즈가 존재한다. 특히나 어두운 곳에서 디카로 사진이나 특히 동영상 촬영을 해보았다면 잘 알 것이다. '자글자글'하다고 하는 바로 그 노이즈가, 조금 어두워보이는 화면에서는 여지 없이 등장한다. 그냥 볼 떄에는 잘 보이지 않지만, 정지화면에서 한스텝씩 넘어가보면 이러한 픽셀단위의 자글거림을 볼 수 있을 것이다. 원본의 외각선과 움직임은 잘 유지하면서, 이러한 노이즈만 제거해내야 하는 것이다.
이러한 노이즈는 인코딩시에 이러한 노이즈까지 인코딩을 하게 되므로 용량효율이 저하되는데다가, 이러한 노이즈는 움직임이 빠르고 촘촘해서 전체적인 용량대 화질비에 매우 좋지 않은 영향을 끼치게 된다.
어쨌든 녹화했으니 이걸 적당한 크기와 포맷으로 인코딩을 해야 하는데, 인코딩 전의 전처리가 그 인코딩 된 후의 결과를 좌우하겠지. 아무리 성능 좋은 코덱이라도 그 인코딩 전의 상태가 인코딩 효율을 결정하게 된달까.
여기에서 소개하는 방법은 용량을 포기한 최상의 화질을 위한 방법은 아니다. 용량대 화질 비율을 최대한 높이는 것은 맞지만, 사람들끼리 돌려보기 위한, 적당한 크기와 용량의 동영상을 만들기 위한 것이니 그리 아시고 보시면 되겠다. 뭐, 활용은 하기 나름이겠고.
주요한 것으로..
1. 화면 비율 및 크기 맞추기
2. 디인터레이싱
3. 픽셀 노이즈 제거
4. YV12로 최종 변경처리
이 정도를 들 수 있겠다. 각각은 제법 중요한 과정이 아닐 수 없는데, 하나하나 간단히 살펴보겠다.
살펴보기에 앞서, 본인은 AVISynth로 주로 전처리 작업을 하는데, 이것에 대해서는 스스로 알아보기 바란다. 각종 필터들도 많고, 무료에 공개 소프트웨어니 구글에서 조금만 검색하면 어렵지 않게 구할 수 있겠다.
1. 화면 비율 맞추기
국내 HDTV 방송의 특징은, 와이드가 아닌 4:3의 SD 방송도 16:9로 길~쭉하게 늘려 나온다는 것, 그리고 HDTV 방송에도, 특히 시사 프로그램의 경우, 아날로그 소스가 빈번하게 등장하여 화면 좌우가 검은색으로 나오는 경우도 많다는 것.
a) 드라마 등의 경우에는 완벽하게 16:9의 와이드 HD방송으로 송출되므로 신경쓸 것 없이 사용.
b) SD방송의 경우, 16:9의 화면을 4:3으로 적절히 리사이징 하여 사용
c) 뉴스나 시사 프로그램의 경우 HD방송임에도 불구하고 좌우가 검게 처리되는 4:3 아날로그 영상이 높은 비율로 등장하고, 해당 좌우 부분이 방송되는 순간에도 그 부분을 잘라내더라도 문제가 없는 형태로 방송되는 경우가 많음. 따라서 4:3 Pan&Scan 방식으로 처리해도 문제가 없을 경우 4:3 P&S로 처리하고, 원본 그대로 사용하고 싶은 경우 16:9 와이드 형태 그대로 사용.
특히 c의 부분에 있어 고민을 조금 하게 되는데, 보기 편하게 만드는 것이 목적이라면 4:3 P&S도 고려해볼만 하다. 의미 없는 부분의 공백을 제거하여 와이드가 아닌 17혹은 19인치 모니터에서도 큰 화면으로 잘 나올 뿐더러, 어쨌든 용량도 절약되니 말이다.
그리고 화면의 상하좌우 공백을 잘라내는 것도 잊지 말 것. 검은 색으로 테두리가 나오면 인코딩 한 후의 화면도 보기 좋지 않을 뿐더러, 역시 용량도 계속 낭비되니 말이다.
최종적인 적정한 화면의 크기는.. 디인터레이싱과 함께 나오니 다음으로.
2. 디인터레이싱
HDTV 소스의 디인터레이싱이야말로 뜨거운 감자가 아닐 수 없다. 많은 사람들이 60fps Bob를 최상으로 친다. 원래의 데이터도 모두 포함할 뿐더러, 인터레이스 상태 그대로 인코딩 하는 것보다는 인코딩 효율이 높기 때문이다. 하지만 이러한 방법은 60fps인 만큼 인코딩 후의 용량도 심히 많이 사용될 뿐더러, 60fps를 재생하기 위한 하드웨어를 갖추어야 한다는 점에서도 여러모로 좋은 방법은 아니다. PMP등의 재생기기에서 재생하는 경우를 상정해도, 60fps Bob은 그다지 매력적인 방법은 아니다.
HDTV의 소스는 원래 소스 자체가 인터레이스드 60프레임이니 프로그레시브 소스 자체가 존재하질 않으니 원래의 프로그레시브를 맞추어내는 것이 불가능하다.
개인적으로 (적당한 용량에 적당한 화질의 동영상을 제작하는데 있어서) 추천하는 방법은.. 리사이징을 이용한 블렌딩이다. 1900대x1000대의 동영상을 그대로 인코딩하는 것도 무리이니 이것의 크기를 줄이면서, 디인터레이싱 처리도 하자는 것이다. 결과적으로, 단순히 화면 크기를 반으로 리사이징 하는 것 만으로 홀수라인과 짝수라인이 섞이면서, 900대x500대의 디인터레이싱 된 결과물이 만들어지는 것이다.
해상도를 반으로 줄이면서, 홀수라인과 짝수라인을 섞어버리면 해상도도 적당해지고, 디인터레이싱도 해결되는 것이다. 움직임이 많은 화면에서도 비교적 자연스러운 움직임을 보여줄테니 의심스러운 분들은 직접 테스트해보시길.
한가지 문제라면, 하단에 흐르는 자막이 정지 영상에서 두개로 보인다는 점인데.. 그것 빼고는 매우 만족스러운 방법이다.

인터레이스드 NTSC 원본 (200% 확대된 모습)

50% 바이큐빅 리사이즈된 상태. 디인터레이싱 처리는 이렇게 간단히.
(역시 위처럼 200% 확대된 모습)
(역시 위처럼 200% 확대된 모습)
3. 픽셀 노이즈 제거
어떤 분들은 '이뭥미?' 하시겠다. '원본 그대로!'를 외쳐대는 많은 분들의 경우 더욱 그러하겠다.
모든 녹화장비들은 노이즈가 존재한다. 특히나 어두운 곳에서 디카로 사진이나 특히 동영상 촬영을 해보았다면 잘 알 것이다. '자글자글'하다고 하는 바로 그 노이즈가, 조금 어두워보이는 화면에서는 여지 없이 등장한다. 그냥 볼 떄에는 잘 보이지 않지만, 정지화면에서 한스텝씩 넘어가보면 이러한 픽셀단위의 자글거림을 볼 수 있을 것이다. 원본의 외각선과 움직임은 잘 유지하면서, 이러한 노이즈만 제거해내야 하는 것이다.
이러한 노이즈는 인코딩시에 이러한 노이즈까지 인코딩을 하게 되므로 용량효율이 저하되는데다가, 이러한 노이즈는 움직임이 빠르고 촘촘해서 전체적인 용량대 화질비에 매우 좋지 않은 영향을 끼치게 된다.

자글자글... 이런 노이즈가 문제.
눈 부릅 뜨고 자세히 보면 잘 보인다.
잘 안보여도 용량은 잡아 먹으니 큰 문제.
눈 부릅 뜨고 자세히 보면 잘 보인다.
잘 안보여도 용량은 잡아 먹으니 큰 문제.
이런 것은 AVISynth의 NoMoSmooth 필터를 이용해서 제거해왔는데, 원본의 날카로움은 잘 유지해주면서 노이즈만 잘 제거해주어 이 밖의 대안을 찾을 이유가 없었다. 다만, 속도가 조금 느린 것은 흠. 이 필터는 YV12 컬러스페이스를 지원하지 않으므로 YUY2로 변경해주어야 한다.
4. YV12로 최종 변경
원래 HD방송 소스는 YV12와 같은 형식이라고 보아야 한다. YV12는 YUY2와 비교하면, 눈에 덜 민감한 크로마(chroma, chrominance)채널의 해상도가 반이므로 용량이 더 작다고 보아야 하겠다. 해상도가 반이므로 화질이 더 안좋지 않을까 생각이 들지만, 원래 HD소스부터 해상도가 반인데다가, 크로마 정보가 줄어들었다 해도 체감되는 해상도의 저하는 루마(luma)정보에 더욱 크게 영향을 받으므로, 용량과 화질을 모두 잡고자 한다면 YV12로 최종 결과물을 내는 편이 좋겠다. 따라서 고민하지 말고 YV12로 변경하면서 끝을 내면 되겠다.
5. 최종 AVISynth 작업
본인은 AVS 파일 내용은 다음처럼 하여 작업하고 있다.
-------------------------------------------------------------
AVISource("HDTV녹화_d2v-vfapi.avi") : D2V와 VFAPI로 만들어 놓은 AVI를 로드
Crop(16,8,1888,1064) : 검은 공백 부분 잘라내기 (4:3, Wide)
#Crop(248,8,1424,1065) : 4:3 Pan & Scan 방식으로 작업
ReduceBy2() : 해상도를 반으로 줄이며 디인터레이싱
#BicubicResize(708,532) : Wide 형태로 잘못 송출된 영상의 화면 비율을 4:3으로 바꿀 때 사용
LoadPlugin("C:\Program Files\AviSynth 2.5\plugins\NoMoSmooth.dll")
ConvertToYUY2() : NoMoSmooth() 필터가 YUY2 컬러스페이스를 요구하기 때문에 변경
NoMoSmooth() : 기본값으로 노이즈 제거
ConvertToYV12() : 최종적으로 YV12로 변환
-----------------------------------------------
여타 코덱등의 선택은 유저들의 몫이 되겠다. 그럼 즐거운 인코딩 생활 되시길~! :)
원래 HD방송 소스는 YV12와 같은 형식이라고 보아야 한다. YV12는 YUY2와 비교하면, 눈에 덜 민감한 크로마(chroma, chrominance)채널의 해상도가 반이므로 용량이 더 작다고 보아야 하겠다. 해상도가 반이므로 화질이 더 안좋지 않을까 생각이 들지만, 원래 HD소스부터 해상도가 반인데다가, 크로마 정보가 줄어들었다 해도 체감되는 해상도의 저하는 루마(luma)정보에 더욱 크게 영향을 받으므로, 용량과 화질을 모두 잡고자 한다면 YV12로 최종 결과물을 내는 편이 좋겠다. 따라서 고민하지 말고 YV12로 변경하면서 끝을 내면 되겠다.
5. 최종 AVISynth 작업
본인은 AVS 파일 내용은 다음처럼 하여 작업하고 있다.
-------------------------------------------------------------
AVISource("HDTV녹화_d2v-vfapi.avi") : D2V와 VFAPI로 만들어 놓은 AVI를 로드
Crop(16,8,1888,1064) : 검은 공백 부분 잘라내기 (4:3, Wide)
#Crop(248,8,1424,1065) : 4:3 Pan & Scan 방식으로 작업
ReduceBy2() : 해상도를 반으로 줄이며 디인터레이싱
#BicubicResize(708,532) : Wide 형태로 잘못 송출된 영상의 화면 비율을 4:3으로 바꿀 때 사용
LoadPlugin("C:\Program Files\AviSynth 2.5\plugins\NoMoSmooth.dll")
ConvertToYUY2() : NoMoSmooth() 필터가 YUY2 컬러스페이스를 요구하기 때문에 변경
NoMoSmooth() : 기본값으로 노이즈 제거
ConvertToYV12() : 최종적으로 YV12로 변환
-----------------------------------------------
여타 코덱등의 선택은 유저들의 몫이 되겠다. 그럼 즐거운 인코딩 생활 되시길~! :)
# by | 2008/05/11 18:48 | 트랙백 | 덧글(5)




☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
디인터레이싱을 안하려고 리사이징을 하는것은 그야말로 최악의 선택입니다. 솔직히 발인코더들이 제일 많이 하는 실수죠...
그 예를 보시려면 http://www.100fps.com/distortion1.jpg 여기 참고.
디인터레이스를 반드시 해야합니다. 정 속도가 문제라면 한 필드만 선택하는 디인터레이싱이라도 해야 저 현상이 안일어납니다. 하지만 한 필드를 모두 희생하면 세로 해상도가 절반으로 떨어지죠. 1/2 크기로 줄이는 경우가 아니라면 한필드 희생도 좋은 방법이 아닙니다.
그리고 ffmpeg이나 mencoder가 제공하는 기본 디인터레이서들은 어느걸로 해도 세로 해상도가 떨어져서 특히 사선처리시 계단이 눈에 띄게 됩니다. 현재로선 이것까지 고려하면 yadif 를 추천합니다.
이게 최악의 선택일리는 없겠고요. 한필드를 통째로 버리고 30fps로 가게 되면 화면이 부드럽지 못하게 되는 문제가 생깁니다. 속도 문제 때문에 이렇게 하는 것도 아니고요.
원본이 프로그레시브인 필름이나 애니메이션 소스라면 IVTC등의 방법으로 원래의 프로그레시브 소스를 복원하는 멋진 디인터레이스가 가능하겠지만, 원본 자체가 인터레이스 상태인 NTSC소스라면 분명 위의 방법(블렌딩)은 좋은 방법입니다.