티스토리 뷰
AVFrame의 컬러포맷이 YUV420이면 Context의 strict_std_compliance를 FF_COMPLIANCE_EXPERIMENTAL 로 지정해주어야한다. 아니면 워닝 떴던가 에러 떴던듯.
const AVCodec *jpegCodec = avcodec_find_encoder(AV_CODEC_ID_MJPEG);
if (!jpegCodec) {
return -1;
}
AVCodecContext *jpegContext = avcodec_alloc_context3(jpegCodec);
if (!jpegContext) {
return -1;
}
jpegContext->pix_fmt = (AVPixelFormat)pFrame->format;
jpegContext->height = pFrame->height;
jpegContext->width = pFrame->width;
jpegContext->time_base.num = 1;
jpegContext->time_base.den = 1;
jpegContext->strict_std_compliance = FF_COMPLIANCE_EXPERIMENTAL;
jpegContext->flags |= AV_CODEC_FLAG_QSCALE;
jpegContext->qmin = qscale;
그리고 QP값 바꾸는거는 flags에 AV_CODEC_FLAG_QSCALE 값을 ON시켜주고 qmin 값을 1~31 값으로 지정해주면된다.
왜 global_quality가 아닌 qmin 값을 바꿔야하는지는 좀 의아하다. ffmpeg을 디버깅해서 qmin 값이 어디서 쓰이는지 확인해봐야할듯...
아래 프로젝트 만들며 쓴글임.
https://github.com/developer0hye/Practical-FFmpeg-Examples
2022-07-09
FFmpeg 코드를 직접 디버깅 해보며 왜 AVCodecContext의 global_quality 가 아닌 qmin 값을 바꿔줬어야했는지 알게됐고 AVCodecContext의 qmin 값을 바꿔주는 것 보다는 AVFrame의 quality 값을 바꿔주는 게 맞다는 것을 알게됐다.
estimate_qp라는 함수내에서 최종적으로 압축에 쓰이는 qp값이 정해진다.
그리고 이 qp값은 s->lambda 값에 의해 update_qscale 함수내에서 최종적으로 정의된다.
그런데 s->lambda 값이 s->current_picture.f->quality 값에 의해 결정되는 걸 볼 수 있다. Context가 아닌 frame에 저장된 quality값에 의해 최종적으로 qp값이 정해진다는 의미이다.
이걸로 StackOverflow에 답변도 남겼다.
https://stackoverflow.com/a/72611782/10386667
'기타' 카테고리의 다른 글
Windows 에서 Linux의 touch를 사용해보자 (0) | 2022.07.03 |
---|---|
20220630 그냥 기록하는 글 (0) | 2022.06.30 |
FFmpeg 관련 자료 (0) | 2022.06.03 |
Windows FFmpeg prebuilt dll lib 파일 다운로드 링크 (0) | 2022.06.01 |
[LeetCode] seanprashad list 부시기 (0) | 2022.04.21 |
- Total
- Today
- Yesterday
- 파이참
- 가장 긴 증가하는 부분 수열
- 인공지능을 위한 선형대수
- 백트래킹
- 순열
- 위상 정렬 알고리즘
- MOT
- Lowest Common Ancestor
- 백준 11053
- 백준 1766
- 조합
- PyCharm
- 이분탐색
- 문제집
- 백준 11437
- 자료구조
- C++ Deploy
- cosine
- ㅂ
- 백준
- FairMOT
- 단축키
- LCA
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |