1. 원본
2. HEVC_NVENC, 640 x -1, 상하단 140 제거시.
- 두꺼운 녹색 투명 띠가..
3. H264_NVENC, 이하 상동.
- 2번보다는 얇은 녹색 투명 띠가..
4. 샤나 5.0 버젼은 이상 무.
설정 파일 첨부 했습니다.
[1] 원본
[2]
[3]
[4]
1. 원본
2. HEVC_NVENC, 640 x -1, 상하단 140 제거시.
- 두꺼운 녹색 투명 띠가..
3. H264_NVENC, 이하 상동.
- 2번보다는 얇은 녹색 투명 띠가..
4. 샤나 5.0 버젼은 이상 무.
설정 파일 첨부 했습니다.
[1] 원본
[2]
[3]
[4]
첨부 '5' |
---|
조사해 보니 해상도 변경에 -1 값을 준 게 원인이었습니다.
위, 아래 140씩 잘라 1920x(1080-280)=1920x800이 된 영상을 가로 640에 맞추어 비율에 맞게 세로를 -1로 잡고 해상도 변경을 하면 세로 길이가 266.67, 즉 반올림하면 267이 되죠.
아시겠지만 짝수가 아닌 해상도는 H.264나 HEVC 코덱에서 인코딩 오류가 나는 게 정상입니다. 실제로 x264로 인코딩해보면 아래와 같이 오류가 나면서 인코딩이 실패합니다.
[libx264 @ 000001e95dd40540] height not divisible by 2 (640x267)
하지만 샤나인코더 내장 FFmpeg의 NVENC도 그렇고, 다른 최근의 FFmpeg의 NVENC도 그렇고, NVENC 코덱에서는 이게 일단 인코딩이 됩니다. 해상도도 640x267로 나옵니다. (원본 높이는 268이라고 병기합니다만.)
하지만 이렇게 되면 YUV420P인 원본 픽셀 포맷 특성상 짝이 맞지 않는 부분은 색차 정보가 누락되기 때문에 밑의 일정 부분이 녹색으로만 보이는 현상이 나타나게 된 것입니다.
H.264보다 HEVC 쪽 폭이 큰 것은 인코딩 단위(macroblock or CU)가 HEVC 쪽이 H.264보다 크기 때문인 것으로 짐작됩니다.
실제로 해상도 변경에 -1 대신 266을 주면 샤나인코더에서도, FFmpeg에서도 이런 현상이 나타나지 않습니다.
샤나 구버전에 해당 현상이 나타나지 않는 것은 구버전의 -1 값에 대한 처리가 FFmpeg 오리지널 방식과 달랐던 때문이 아닌가 싶습니다. (본인이 작성하셨던 버그 보고 기억하시죠?)
아무튼, 잘라내기와 해상도 변경을 병행하실 때는 -1 대신 정확한 짝수값을 대신 넣어주시는 게 더 나은 방법일 것 같습니다.
이후로 몇번 버젼 업데이트 되었는데 아직 수정이 되지 않았네요...
제 생각엔 리사이즈 부분에 값으로 '-1'이 들어갔을 때 짝수 여부를 체크해서 가장 가까운 짝수로 치환하는 루틴을 코드에 추가하면 될 것 같긴 한데... 모르겠군요.
@Rina 님께 따로 기능 요청하시는 게 좋을 듯합니다.
녹색띠라면 해당 부분의 색차(chroma) 정보가 날아간다는 소린데...
이건 crop 필터 쪽은 아닌 거 같고, 해상도 변경을 위한 scale 필터나 hevc_nvenc, h264_nvenc 쪽 문제 같습니다.
그런데 두 인코더가 각기 크기가 다르다는 걸 보니 아무래도 NVENC 인코더들 문제가 아닌가 싶네요.
두 가지 원인을 생각해볼 수 있습니다. 하나는 본인의 엔비디아 그래픽 카드 드라이버(중 NVENC 쪽)의 문제일 경우와 샤나인코더 내장 FFmpeg가 갖고 있는 hevc_nvenc, h264_nvenc 코덱들의 문제일 경우. 그런데 샤나인코더 구버전에는 문제가 없다는 걸로 봐서 드라이버 문제는 아닌 것 같군요.
근데 혹시 모르니 NVENC 인코딩 설정들에서 추가 옵션들, 즉
얘네들을 삭제하고 다시 시도해 보시겠습니까? 뭔가 설정이 안 맞아서 발생했을지도 모른다는 혹시나 하는 의심입니다. 뭐, 그렇다고 해도 코덱들의 문제가 아닌 것은 아니지만 말이죠.
어쨌든, 적당한 자료를 갖고 저도 테스트를 해보겠습니다.