아래 github에 Qt6 + ffmpeg 4.4.5 + MSYS2 내에서 빌드 가능한 버전을 올려두었음..
https://github.com/ihmin/QtAV-MinGW64
이제.. 아래는 무시...
QtAV는 공식적으로 Qt 5.x + ffmpeg 4.x 버전을 지원함.
물론 ffmpeg 5.x 버전으로 비공식 패치가 된 코드가 있긴 하지만.. 돌려본 결과 약간은 불안함.
Qt 6.x 버전으로 QtAV를 빌드하고자 한다면 QtAV의 소스 코드 수정은 불가피함..
수정 분량은 그리 많지 않을 것으로 예상..
즉.. Qt 6.x + ffmpeg 4.x 버전을 사용해 보기로 하고 작업을 함.먼저 ffmpeg 4.5.6 소스를 받고 아래의 configure 옵션을 빌드함..
$ ./configure --prefix=/c/temp/ffmpeg-4.4.5_win64 --enable-shared --build-suffix="-4.4.5"
install prefix /c/temp/ffmpeg-4.4.5_win64
source path .
C compiler gcc
C library mingw64
ARCH x86 (generic)
build suffix -4.4.5
big-endian no
runtime cpu detection yes
standalone assembly yes
x86 assembler yasm
MMX enabled yes
MMXEXT enabled yes
3DNow! enabled yes
3DNow! extended enabled yes
SSE enabled yes
SSSE3 enabled yes
AESNI enabled yes
AVX enabled yes
AVX2 enabled yes
AVX-512 enabled yes
XOP enabled yes
FMA3 enabled yes
FMA4 enabled yes
i686 features enabled yes
CMOV is fast yes
EBX available yes
EBP available yes
debug symbols yes
strip symbols yes
optimize for size no
optimizations yes
static no
shared yes
postprocessing support no
network support yes
threading support w32threads
safe bitstream reader yes
texi2html enabled no
perl enabled yes
pod2man enabled yes
makeinfo enabled yes
makeinfo supports HTML yes
External libraries:
bzlib mediafoundation zlib
iconv schannel
lzma sdl2
External libraries providing hardware acceleration:
cuda_llvm dxva2
d3d11va vaapi
Libraries:
avcodec avformat swscale
avdevice avutil
avfilter swresample
Programs:
ffmpeg ffplay ffprobe
Enabled decoders:
aac ffvhuff pfm
aac_fixed ffwavesynth pgm
aac_latm fic pgmyuv
aasc fits pgssub
ac3 flac pgx
ac3_fixed flashsv photocd
acelp_kelvin flashsv2 pictor
adpcm_4xm flic pixlet
adpcm_adx flv pjs
adpcm_afc fmvc png
adpcm_agm fourxm ppm
adpcm_aica fraps prores
adpcm_argo frwu prosumer
adpcm_ct g2m psd
adpcm_dtk g723_1 ptx
adpcm_ea g729 qcelp
adpcm_ea_maxis_xa gdv qdm2
adpcm_ea_r1 gif qdmc
adpcm_ea_r2 gremlin_dpcm qdraw
adpcm_ea_r3 gsm qpeg
adpcm_ea_xas gsm_ms qtrle
adpcm_g722 h261 r10k
adpcm_g726 h263 r210
adpcm_g726le h263i ra_144
adpcm_ima_alp h263p ra_288
adpcm_ima_amv h264 ralf
adpcm_ima_apc hap rasc
adpcm_ima_apm hca rawvideo
adpcm_ima_cunning hcom realtext
adpcm_ima_dat4 hevc rl2
adpcm_ima_dk3 hnm4_video roq
adpcm_ima_dk4 hq_hqa roq_dpcm
adpcm_ima_ea_eacs hqx rpza
adpcm_ima_ea_sead huffyuv rscc
adpcm_ima_iss hymt rv10
adpcm_ima_moflex iac rv20
adpcm_ima_mtf idcin rv30
adpcm_ima_oki idf rv40
adpcm_ima_qt iff_ilbm s302m
adpcm_ima_rad ilbc sami
adpcm_ima_smjpeg imc sanm
adpcm_ima_ssi imm4 sbc
adpcm_ima_wav imm5 scpr
adpcm_ima_ws indeo2 screenpresso
adpcm_ms indeo3 sdx2_dpcm
adpcm_mtaf indeo4 sga
adpcm_psx indeo5 sgi
adpcm_sbpro_2 interplay_acm sgirle
adpcm_sbpro_3 interplay_dpcm sheervideo
adpcm_sbpro_4 interplay_video shorten
adpcm_swf ipu simbiosis_imx
adpcm_thp jacosub sipr
adpcm_thp_le jpeg2000 siren
adpcm_vima jpegls smackaud
adpcm_xa jv smacker
adpcm_yamaha kgv1 smc
adpcm_zork kmvc smvjpeg
agm lagarith snow
aic loco sol_dpcm
alac lscr sonic
alias_pix m101 sp5x
als mace3 speedhq
amrnb mace6 srgc
amrwb magicyuv srt
amv mdec ssa
anm metasound stl
ansi microdvd subrip
ape mimic subviewer
apng mjpeg subviewer1
aptx mjpegb sunrast
aptx_hd mlp svq1
arbc mmvideo svq3
argo mobiclip tak
ass motionpixels targa
asv1 movtext targa_y216
asv2 mp1 tdsc
atrac1 mp1float text
atrac3 mp2 theora
atrac3al mp2float thp
atrac3p mp3 tiertexseqvideo
atrac3pal mp3adu tiff
atrac9 mp3adufloat tmv
aura mp3float truehd
aura2 mp3on4 truemotion1
av1 mp3on4float truemotion2
avrn mpc7 truemotion2rt
avrp mpc8 truespeech
avs mpeg1video tscc
avui mpeg2video tscc2
ayuv mpeg4 tta
bethsoftvid mpegvideo twinvq
bfi mpl2 txd
bink msa1 ulti
binkaudio_dct mscc utvideo
binkaudio_rdft msmpeg4v1 v210
bintext msmpeg4v2 v210x
bitpacked msmpeg4v3 v308
bmp msp2 v408
bmv_audio msrle v410
bmv_video mss1 vb
brender_pix mss2 vble
c93 msvideo1 vc1
cavs mszh vc1image
ccaption mts2 vcr1
cdgraphics mv30 vmdaudio
cdtoons mvc1 vmdvideo
cdxl mvc2 vmnc
cfhd mvdv vorbis
cinepak mvha vp3
clearvideo mwsc vp4
cljr mxpeg vp5
cllc nellymoser vp6
comfortnoise notchlc vp6a
cook nuv vp6f
cpia on2avc vp7
cri opus vp8
cscd paf_audio vp9
cyuv paf_video vplayer
dca pam vqa
dds pbm wavpack
derf_dpcm pcm_alaw wcmv
dfa pcm_bluray webp
dirac pcm_dvd webvtt
dnxhd pcm_f16le wmalossless
dolby_e pcm_f24le wmapro
dpx pcm_f32be wmav1
dsd_lsbf pcm_f32le wmav2
dsd_lsbf_planar pcm_f64be wmavoice
dsd_msbf pcm_f64le wmv1
dsd_msbf_planar pcm_lxf wmv2
dsicinaudio pcm_mulaw wmv3
dsicinvideo pcm_s16be wmv3image
dss_sp pcm_s16be_planar wnv1
dst pcm_s16le wrapped_avframe
dvaudio pcm_s16le_planar ws_snd1
dvbsub pcm_s24be xan_dpcm
dvdsub pcm_s24daud xan_wc3
dvvideo pcm_s24le xan_wc4
dxa pcm_s24le_planar xbin
dxtory pcm_s32be xbm
dxv pcm_s32le xface
eac3 pcm_s32le_planar xl
eacmv pcm_s64be xma1
eamad pcm_s64le xma2
eatgq pcm_s8 xpm
eatgv pcm_s8_planar xsub
eatqi pcm_sga xwd
eightbps pcm_u16be y41p
eightsvx_exp pcm_u16le ylc
eightsvx_fib pcm_u24be yop
escape124 pcm_u24le yuv4
escape130 pcm_u32be zero12v
evrc pcm_u32le zerocodec
exr pcm_u8 zlib
fastaudio pcm_vidc zmbv
ffv1 pcx
Enabled encoders:
a64multi h264_vaapi pgmyuv
a64multi5 hevc_mf png
aac hevc_vaapi ppm
aac_mf huffyuv prores
ac3 jpeg2000 prores_aw
ac3_fixed jpegls prores_ks
ac3_mf ljpeg qtrle
adpcm_adx magicyuv r10k
adpcm_argo mjpeg r210
adpcm_g722 mjpeg_vaapi ra_144
adpcm_g726 mlp rawvideo
adpcm_g726le movtext roq
adpcm_ima_alp mp2 roq_dpcm
adpcm_ima_amv mp2fixed rpza
adpcm_ima_apm mp3_mf rv10
adpcm_ima_qt mpeg1video rv20
adpcm_ima_ssi mpeg2_vaapi s302m
adpcm_ima_wav mpeg2video sbc
adpcm_ms mpeg4 sgi
adpcm_swf msmpeg4v2 snow
adpcm_yamaha msmpeg4v3 sonic
alac msvideo1 sonic_ls
alias_pix nellymoser speedhq
amv opus srt
apng pam ssa
aptx pbm subrip
aptx_hd pcm_alaw sunrast
ass pcm_dvd svq1
asv1 pcm_f32be targa
asv2 pcm_f32le text
avrp pcm_f64be tiff
avui pcm_f64le truehd
ayuv pcm_mulaw tta
bmp pcm_s16be ttml
cfhd pcm_s16be_planar utvideo
cinepak pcm_s16le v210
cljr pcm_s16le_planar v308
comfortnoise pcm_s24be v408
dca pcm_s24daud v410
dnxhd pcm_s24le vc2
dpx pcm_s24le_planar vorbis
dvbsub pcm_s32be vp8_vaapi
dvdsub pcm_s32le vp9_vaapi
dvvideo pcm_s32le_planar wavpack
eac3 pcm_s64be webvtt
exr pcm_s64le wmav1
ffv1 pcm_s8 wmav2
ffvhuff pcm_s8_planar wmv1
fits pcm_u16be wmv2
flac pcm_u16le wrapped_avframe
flashsv pcm_u24be xbm
flashsv2 pcm_u24le xface
flv pcm_u32be xsub
g723_1 pcm_u32le xwd
gif pcm_u8 y41p
h261 pcm_vidc yuv4
h263 pcx zlib
h263p pfm zmbv
h264_mf pgm
Enabled hwaccels:
av1_d3d11va hevc_dxva2 vc1_vaapi
av1_d3d11va2 hevc_vaapi vp8_vaapi
av1_dxva2 mjpeg_vaapi vp9_d3d11va
av1_vaapi mpeg2_d3d11va vp9_d3d11va2
h263_vaapi mpeg2_d3d11va2 vp9_dxva2
h264_d3d11va mpeg2_dxva2 vp9_vaapi
h264_d3d11va2 mpeg2_vaapi wmv3_d3d11va
h264_dxva2 mpeg4_vaapi wmv3_d3d11va2
h264_vaapi vc1_d3d11va wmv3_dxva2
hevc_d3d11va vc1_d3d11va2 wmv3_vaapi
hevc_d3d11va2 vc1_dxva2
Enabled parsers:
aac dvd_nav opus
aac_latm dvdsub png
ac3 flac pnm
adx g723_1 rv30
av1 g729 rv40
avs2 gif sbc
avs3 gsm sipr
bmp h261 tak
cavsvideo h263 vc1
cook h264 vorbis
cri hevc vp3
dca ipu vp8
dirac jpeg2000 vp9
dnxhd mjpeg webp
dolby_e mlp xbm
dpx mpeg4video xma
dvaudio mpegaudio
dvbsub mpegvideo
Enabled demuxers:
aa ico pcm_mulaw
aac idcin pcm_s16be
aax idf pcm_s16le
ac3 iff pcm_s24be
ace ifv pcm_s24le
acm ilbc pcm_s32be
act image2 pcm_s32le
adf image2_alias_pix pcm_s8
adp image2_brender_pix pcm_u16be
ads image2pipe pcm_u16le
adx image_bmp_pipe pcm_u24be
aea image_cri_pipe pcm_u24le
afc image_dds_pipe pcm_u32be
aiff image_dpx_pipe pcm_u32le
aix image_exr_pipe pcm_u8
alp image_gif_pipe pcm_vidc
amr image_j2k_pipe pjs
amrnb image_jpeg_pipe pmp
amrwb image_jpegls_pipe pp_bnk
anm image_pam_pipe pva
apc image_pbm_pipe pvf
ape image_pcx_pipe qcp
apm image_pgm_pipe r3d
apng image_pgmyuv_pipe rawvideo
aptx image_pgx_pipe realtext
aptx_hd image_photocd_pipe redspark
aqtitle image_pictor_pipe rl2
argo_asf image_png_pipe rm
argo_brp image_ppm_pipe roq
asf image_psd_pipe rpl
asf_o image_qdraw_pipe rsd
ass image_sgi_pipe rso
ast image_sunrast_pipe rtp
au image_svg_pipe rtsp
av1 image_tiff_pipe s337m
avi image_webp_pipe sami
avr image_xbm_pipe sap
avs image_xpm_pipe sbc
avs2 image_xwd_pipe sbg
avs3 ingenient scc
bethsoftvid ipmovie sdp
bfi ipu sdr2
bfstm ircam sds
bink iss sdx
binka iv8 segafilm
bintext ivf ser
bit ivr sga
bmv jacosub shorten
boa jv siff
brstm kux simbiosis_imx
c93 kvag sln
caf live_flv smacker
cavsvideo lmlm4 smjpeg
cdg loas smush
cdxl lrc sol
cine luodat sox
codec2 lvf spdif
codec2raw lxf srt
concat m4v stl
data matroska str
daud mca subviewer
dcstr mcc subviewer1
derf mgsts sup
dfa microdvd svag
dhav mjpeg svs
dirac mjpeg_2000 swf
dnxhd mlp tak
dsf mlv tedcaptions
dsicin mm thp
dss mmf threedostr
dts mods tiertexseq
dtshd moflex tmv
dv mov truehd
dvbsub mp3 tta
dvbtxt mpc tty
dxa mpc8 txd
ea mpegps ty
ea_cdata mpegts v210
eac3 mpegtsraw v210x
epaf mpegvideo vag
ffmetadata mpjpeg vc1
filmstrip mpl2 vc1t
fits mpsub vividas
flac msf vivo
flic msnwc_tcp vmd
flv msp vobsub
fourxm mtaf voc
frm mtv vpk
fsb musx vplayer
fwse mv vqf
g722 mvi w64
g723_1 mxf wav
g726 mxg wc3
g726le nc webm_dash_manifest
g729 nistsphere webvtt
gdv nsp wsaud
genh nsv wsd
gif nut wsvqa
gsm nuv wtv
gxf obu wv
h261 ogg wve
h263 oma xa
h264 paf xbin
hca pcm_alaw xmv
hcom pcm_f32be xvag
hevc pcm_f32le xwma
hls pcm_f64be yop
hnm pcm_f64le yuv4mpegpipe
Enabled muxers:
a64 hds pcm_s32be
ac3 hevc pcm_s32le
adts hls pcm_s8
adx ico pcm_u16be
aiff ilbc pcm_u16le
alp image2 pcm_u24be
amr image2pipe pcm_u24le
amv ipod pcm_u32be
apm ircam pcm_u32le
apng ismv pcm_u8
aptx ivf pcm_vidc
aptx_hd jacosub psp
argo_asf kvag rawvideo
asf latm rm
asf_stream lrc roq
ass m4v rso
ast matroska rtp
au matroska_audio rtp_mpegts
avi md5 rtsp
avm2 microdvd sap
avs2 mjpeg sbc
bit mkvtimestamp_v2 scc
caf mlp segafilm
cavsvideo mmf segment
codec2 mov singlejpeg
codec2raw mp2 smjpeg
crc mp3 smoothstreaming
dash mp4 sox
data mpeg1system spdif
daud mpeg1vcd spx
dirac mpeg1video srt
dnxhd mpeg2dvd stream_segment
dts mpeg2svcd streamhash
dv mpeg2video sup
eac3 mpeg2vob swf
f4v mpegts tee
ffmetadata mpjpeg tg2
fifo mxf tgp
fifo_test mxf_d10 truehd
filmstrip mxf_opatom tta
fits null ttml
flac nut uncodedframecrc
flv oga vc1
framecrc ogg vc1t
framehash ogv voc
framemd5 oma w64
g722 opus wav
g723_1 pcm_alaw webm
g726 pcm_f32be webm_chunk
g726le pcm_f32le webm_dash_manifest
gif pcm_f64be webp
gsm pcm_f64le webvtt
gxf pcm_mulaw wtv
h261 pcm_s16be wv
h263 pcm_s16le yuv4mpegpipe
h264 pcm_s24be
hash pcm_s24le
Enabled protocols:
async http rtmpt
cache httpproxy rtmpts
concat https rtp
crypto icecast srtp
data md5 subfile
ffrtmphttp mmsh tcp
file mmst tee
ftp pipe tls
gopher prompeg udp
gophers rtmp udplite
hls rtmps
Enabled filters:
abench curves overlay
abitscope datascope pad
acompressor dblur pal100bars
acontrast dcshift pal75bars
acopy dctdnoiz palettegen
acrossfade deband paletteuse
acrossover deblock pan
acrusher decimate perms
acue deconvolve photosensitivity
addroi dedot pixdesctest
adeclick deesser pixscope
adeclip deflate premultiply
adelay deflicker prewitt
adenorm deinterlace_vaapi procamp_vaapi
aderivative dejudder pseudocolor
adrawgraph denoise_vaapi psnr
aecho derain qp
aemphasis deshake random
aeval despill readeia608
aevalsrc detelecine readvitc
aexciter dilation realtime
afade displace remap
afftdn dnn_processing removegrain
afftfilt doubleweave removelogo
afifo drawbox replaygain
afir drawgraph reverse
afirsrc drawgrid rgbashift
aformat drmeter rgbtestsrc
afreqshift dynaudnorm roberts
agate earwax rotate
agraphmonitor ebur128 scale
ahistogram edgedetect scale2ref
aiir elbg scale_vaapi
aintegral entropy scdet
ainterleave epx scroll
alimiter equalizer select
allpass erosion selectivecolor
allrgb estdif sendcmd
allyuv exposure separatefields
aloop extractplanes setdar
alphaextract extrastereo setfield
alphamerge fade setparams
amerge fftdnoiz setpts
ametadata fftfilt setrange
amix field setsar
amovie fieldhint settb
amplify fieldmatch sharpness_vaapi
amultiply fieldorder shear
anequalizer fifo showcqt
anlmdn fillborders showfreqs
anlms firequalizer showinfo
anoisesrc flanger showpalette
anull floodfill showspatial
anullsink format showspectrum
anullsrc fps showspectrumpic
apad framepack showvolume
aperms framerate showwaves
aphasemeter framestep showwavespic
aphaser freezedetect shuffleframes
aphaseshift freezeframes shufflepixels
apulsator gblur shuffleplanes
arealtime geq sidechaincompress
aresample gradfun sidechaingate
areverse gradients sidedata
arnndn graphmonitor sierpinski
aselect greyedge signalstats
asendcmd haas silencedetect
asetnsamples haldclut silenceremove
asetpts haldclutsrc sinc
asetrate hdcd sine
asettb headphone smptebars
ashowinfo hflip smptehdbars
asidedata highpass sobel
asoftclip highshelf spectrumsynth
asplit hilbert speechnorm
astats histogram split
astreamselect hqx sr
asubboost hstack ssim
asubcut hue stereotools
asupercut hwdownload stereowiden
asuperpass hwmap streamselect
asuperstop hwupload superequalizer
atadenoise hysteresis surround
atempo identity swaprect
atrim idet swapuv
avectorscope il tblend
avgblur inflate telecine
axcorrelate interleave testsrc
bandpass join testsrc2
bandreject kirsch thistogram
bass lagfun threshold
bbox lenscorrection thumbnail
bench life tile
bilateral limiter tlut2
biquad loop tmedian
bitplanenoise loudnorm tmidequalizer
blackdetect lowpass tmix
blend lowshelf tonemap
bm3d lumakey tonemap_vaapi
bwdif lut tpad
cas lut1d transpose
cellauto lut2 transpose_vaapi
channelmap lut3d treble
channelsplit lutrgb tremolo
chorus lutyuv trim
chromahold mandelbrot unpremultiply
chromakey maskedclamp unsharp
chromanr maskedmax untile
chromashift maskedmerge v360
ciescope maskedmin vectorscope
codecview maskedthreshold vflip
color maskfun vfrdet
colorbalance mcompand vibrance
colorchannelmixer median vibrato
colorcontrast mergeplanes vif
colorcorrect mestimate vignette
colorhold metadata vmafmotion
colorize midequalizer volume
colorkey minterpolate volumedetect
colorlevels mix vstack
colorspace monochrome w3fdif
colortemperature movie waveform
compand msad weave
compensationdelay negate xbr
concat nlmeans xfade
convolution noformat xmedian
convolve noise xstack
copy normalize yadif
crop null yaepblur
crossfeed nullsink yuvtestsrc
crystalizer nullsrc zoompan
cue oscilloscope
Enabled bsfs:
aac_adtstoasc hapqa_extract pcm_rechunk
av1_frame_merge hevc_metadata prores_metadata
av1_frame_split hevc_mp4toannexb remove_extradata
av1_metadata imx_dump_header setts
chomp mjpeg2jpeg text2movsub
dca_core mjpega_dump_header trace_headers
dump_extradata mov2textsub truehd_core
eac3_core mp3_header_decompress vp9_metadata
extract_extradata mpeg2_metadata vp9_raw_reorder
filter_units mpeg4_unpack_bframes vp9_superframe
h264_metadata noise vp9_superframe_split
h264_mp4toannexb null
h264_redundant_pps opus_metadata
Enabled indevs:
dshow lavfi
gdigrab vfwcap
Enabled outdevs:
sdl2
License: LGPL version 2.1 or later
아래는 빌드 결과..
다음 직접 Qt 6.x 버전으로 코팅된 QtAV 코드를 아래에서 올려둠.
(MinGW 64에서 수정 및 테스트된 코드 이므로.. VC++ 에서는 동작 보장을 못함.)
현재 QML과 OpenGL 랜더러 백앤드 포팅은 빼두었음.
(QML은 관심 대상 밖이고 OpenGL 렌더러 백앤드 대신 Direct 2D 렌더러 백앤드를 사용하도록 포팅됨.
시간 날때 OpenGL 백앤드도 수정 필요.. ㅠ)
다음 빌드된 ffmpeg 4.4.5 버전의 패스를 아래 환경변수에 추가
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/c/temp/ffmpeg-4.4.5_win64/lib/pkgconfig
다음 QtAV의 CMake configure 시에 다른 건 기본으로 두고 아래 두 개를 변경
아래는 Generate 결과
이제 make를 수행..
빌드가 완료되면.. 빌드된 폴더 내에 아래의 파일들이 생성됨..
bin 폴더
lib폴더
헤더 파일은..
src의 QtAV 폴더와 widgets의 QtAVWidgets 폴더를 복사해서 사용하면 됨.
아래는 개발 중인 프로그램 내 테스트 화면..
'블로그 (Blog) > 개발로그 (Devlogs)' 카테고리의 다른 글
FFmpeg 5.1.6 for msys2 (0) | 2024.12.24 |
---|---|
QOpenGLWidget 샘플 코드 (0) | 2024.12.18 |
pacman 패키지 downgrade 스크립트 (0) | 2024.12.10 |
Qt6 with WebView2 (0) | 2024.11.26 |
OpenGL에서 다른 오브젝트에 가려 보이는지의 여부 체크하기... (0) | 2024.11.05 |