이 글도 테스트 과정을 적었다.
0. 환경은 MPEG4 테스트와 동일
1. 설정도 동일하다. 그러나 실행시켜 보면 아래와 같은 메시지가 나타난다.
[h263 @ 0x91a3020] warning, clipping 1 dct coefficients to -127..127
2. 코드 검색
$ grep -R "dct coefficients to" ../../*
../../libavcodec/mpegvideo_enc.c: av_log(s->avctx, AV_LOG_INFO, "warning, clipping %d dct coefficients to %d..%d\n", overflow, minlevel, maxlevel);
3. 코드를 보자
$ vi ../../libavcodec/mpegvideo_enc.c
1461 if(overflow && s->avctx->mb_decision == FF_MB_DECISION_SIMPLE)
1462 av_log(s->avctx, AV_LOG_INFO, "warning, clipping %d dct coefficients to %d..%d\n", overflow, minlevel, maxlevel);
- ctags를 활용하여 "FF_MB_DECISION_SIMPLE" 추적..
2030 /**
2031 * macroblock decision mode
2032 * - encoding: Set by user.
2033 * - decoding: unused
2034 */
2035 int mb_decision;
2036 #define FF_MB_DECISION_SIMPLE 0 ///< uses mb_cmp
2037 #define FF_MB_DECISION_BITS 1 ///< chooses the one which needs the fewest bits
2038 #define FF_MB_DECISION_RD 2 ///< rate distortion
- mb_cmp 라는 주석을 보고 또 추적..
1836 * macroblock comparison function (not supported yet)
1837 * - encoding: Set by user.
1838 * - decoding: unused
1839 */
1840 int mb_cmp;
- not supported yet 이란다...
avctx->mb_decision = FF_MB_DECISION_SIMPLE;
avctx->mb_cmp = -127 ~ ... 127 설정;
테스트 결과 not supported yet 이 검증됨...ㅋㅋ
- FFmpeg 홈페이지에도 아래와 같은 문구가 있음.
- `0'
- FF_MB_DECISION_SIMPLE: Use mb_cmp (cannot change it yet in ffmpeg).
- `1'
- FF_MB_DECISION_BITS: Choose the one which needs the fewest bits.
- `2'
- FF_MB_DECISION_RD: rate distortion
4. MB_DECISION 이 뭔가 인터넷 검색...
매크로블럭을 결정하는 방법들 이라는데.. 영상처리와 관련된 약간은 난이도가 있는 부분인듯하다..
FF_MB_DECISION_BITS ==> 잘 모르겠음..
FF_MB_DECISION_RD ==> 이 녀석이 화질이 가장 좋다고 하나, 처리하는데 시간이 오래 걸린덴다.. (모든 MB를 검색하여 가장 좋은 MB 모드를 설정한다고 한다.) 인터넷에 검색하니 약자로 RDO(Rate-distortion Optimization) 라고 불린다.
아래처럼 설정하면 경고메시지가 사라지고 정상동작한다.
매크로블럭을 결정하는 방법들 이라는데.. 영상처리와 관련된 약간은 난이도가 있는 부분인듯하다..
FF_MB_DECISION_BITS ==> 잘 모르겠음..
FF_MB_DECISION_RD ==> 이 녀석이 화질이 가장 좋다고 하나, 처리하는데 시간이 오래 걸린덴다.. (모든 MB를 검색하여 가장 좋은 MB 모드를 설정한다고 한다.) 인터넷에 검색하니 약자로 RDO(Rate-distortion Optimization) 라고 불린다.
아래처럼 설정하면 경고메시지가 사라지고 정상동작한다.
avctx->mb_decision = FF_MB_DECISION_BITS; // or FF_MB_DECISION_RD;
이상!!!
그리고 비트레이트가 딱 떨어지게 영상이 인코딩되지는 않는다.
이상!!!
그리고 비트레이트가 딱 떨어지게 영상이 인코딩되지는 않는다.
* 참고로.. 영상확인은 VLC 플레이어를 사용하여 정상적으로 인코딩 되었는지 확인했다..
댓글 없음:
댓글 쓰기