[résolu] Durée d'encodage x264 doublée avec 2.7.3

Started by PauloCDG, April 24, 2019, 05:02:51 PM

Previous topic - Next topic

PauloCDG

Bonsoir,

J'ai installé la version nightly 190422 (Avidemux_2.7.3 VC++ 64bits 190422.exe) et je constate que l'encodage d'un film à partir d'un enregistrement TNT (.TS) prend environ deux fois plus de temps qu'avec la 2.7.0. J'ai pourtant bien vérifié que toutes mes préférences d'Avidemux et tous les paramètres de mon profile x264 sont bien identiques. J'encode notamment avec level 4.1 en CRF avec 23 comm QF, et j'ai méticuleusement vérifié les paramètres de tous les autres onglets x264.



Amicalement,
Paulo

eumagga0x2a

Est-ce que l'encodeur x264 se comporte dans la version nightly 190422 https://avidemux.org/nightly/win64/ exactement comme celui de la version VC++?

PauloCDG

Non pas du tout, avec la version win64 2.7.3 je retrouve la même vitesse d'encodage qu'avec la 2.7.0  :)
Je pourrais tester à nouveau la version VC++, mais je suis à peu près certain de ce que j'avais constaté, un fps d'encodage entre 12 et 15 alors qu'avec la 2.7.0 et la 2.7.3 win64 ça tourne autour de 30 fps.

Merci de l'aide eumagga0x2a, si vous voulez je peux essayer de désinstaller et de tester à nouveau avec la 2.7.3 VC++ mais ça sera demain ;)

Amicalement,
Paulo

eumagga0x2a

Quoteavec la version win64 2.7.3 je retrouve la même vitesse d'encodage qu'avec la 2.7.0

Bon à savoir, merci.

Quotesi vous voulez je peux essayer de désinstaller et de tester à nouveau avec la 2.7.3 VC++

Les versions VC++ et MinGW (win64) comme 2.7.0 (une version très ancienne...) ou win64 nightly peuvent coexister.

Cdlt

eumagga0x2a

J'ai comparé la version nightly 190422 VC++ avec la même version MinGW en utilisant la configuration x264 par défaut suivante:

adm = Avidemux()
adm.videoCodec("x264", "useAdvancedConfiguration=True", "general.params=AQ=20", "general.threads=99", "general.preset=", "general.tuning=", "general.profile=", "general.fast_decode=False", "general.zero_latency=False", "general.fast_first_pass=True"
, "general.blueray_compatibility=False", "general.fake_interlaced=False", "level=-1", "vui.sar_height=1", "vui.sar_width=1", "MaxRefFrames=3", "MinIdr=25", "MaxIdr=250", "i_scenecut_threshold=40", "intra_refresh=False"
, "MaxBFrame=3", "i_bframe_adaptive=1", "i_bframe_bias=0", "i_bframe_pyramid=2", "b_deblocking_filter=True", "i_deblocking_filter_alphac0=0", "i_deblocking_filter_beta=0", "cabac=True", "interlaced=False"
, "constrained_intra=False", "tff=True", "fake_interlaced=False", "analyze.b_8x8=True", "analyze.b_i4x4=True", "analyze.b_i8x8=True", "analyze.b_p8x8=True", "analyze.b_p16x16=False", "analyze.b_b16x16=False"
, "analyze.weighted_pred=2", "analyze.weighted_bipred=True", "analyze.direct_mv_pred=1", "analyze.chroma_offset=0", "analyze.me_method=1", "analyze.me_range=16", "analyze.mv_range=-1", "analyze.mv_range_thread=-1"
, "analyze.subpel_refine=7", "analyze.chroma_me=True", "analyze.mixed_references=True", "analyze.trellis=1", "analyze.psy_rd=1.000000", "analyze.psy_trellis=0.000000", "analyze.fast_pskip=True", "analyze.dct_decimate=True"
, "analyze.noise_reduction=0", "analyze.psy=True", "analyze.intra_luma=11", "analyze.inter_luma=21", "ratecontrol.rc_method=0", "ratecontrol.qp_constant=0", "ratecontrol.qp_min=10", "ratecontrol.qp_max=51"
, "ratecontrol.qp_step=4", "ratecontrol.bitrate=0", "ratecontrol.rate_tolerance=1.000000", "ratecontrol.vbv_max_bitrate=0", "ratecontrol.vbv_buffer_size=0", "ratecontrol.vbv_buffer_init=1", "ratecontrol.ip_factor=1.400000"
, "ratecontrol.pb_factor=1.300000", "ratecontrol.aq_mode=1", "ratecontrol.aq_strength=1.000000", "ratecontrol.mb_tree=True", "ratecontrol.lookahead=40")


et l'encodage a duré exactement le même temps avec la version MinGW (libx264 v152) réalisant une compression légèrement meuilleure que la version VC++ (libx264 v146).

Voulez-vous enregistrer votre configuration de l'encodeur en tant que script de projet, SVP?

PauloCDG

#5
En effet les deux versions cohabitent bien, j'ai donc refait des tests qui confirment ceux d'hier, avec la 2.7.3 VC++ la fenêtre d'encodage montre un fps autour de 13 contre 30 avec la version WinVG. J'ai entièrement resaisi tous mes paramètres d'encodage avec chaque version, puis enregistré les deux scripts, après comparaison ils sont rigoureusement identiques, en voici le contenu:

#PY  <- Needed to identify #
#--automatically built--

adm = Avidemux()
adm.loadVideo("D:/_AKIRA/data0001.ts")
adm.clearSegments()
adm.addSegment(0, 0, 6839404066)
adm.markerA = 541403811
adm.markerB = 5998524066
adm.setPostProc(3, 3, 0)
adm.videoCodec("x264", "useAdvancedConfiguration=True", "general.params=AQ=23", "general.threads=0", "general.preset=medium", "general.tuning=psnr", "general.profile=high", "general.fast_decode=False", "general.zero_latency=False"
, "general.fast_first_pass=True", "general.blueray_compatibility=False", "general.fake_interlaced=False", "level=41", "vui.sar_height=1", "vui.sar_width=1", "MaxRefFrames=4", "MinIdr=25", "MaxIdr=250"
, "i_scenecut_threshold=40", "intra_refresh=False", "MaxBFrame=8", "i_bframe_adaptive=2", "i_bframe_bias=0", "i_bframe_pyramid=2", "b_deblocking_filter=True", "i_deblocking_filter_alphac0=0", "i_deblocking_filter_beta=0"
, "cabac=True", "interlaced=False", "constrained_intra=False", "tff=True", "fake_interlaced=False", "analyze.b_8x8=True", "analyze.b_i4x4=True", "analyze.b_i8x8=True", "analyze.b_p8x8=False", "analyze.b_p16x16=True"
, "analyze.b_b16x16=True", "analyze.weighted_pred=1", "analyze.weighted_bipred=True", "analyze.direct_mv_pred=3", "analyze.chroma_offset=0", "analyze.me_method=2", "analyze.me_range=24", "analyze.mv_range=-1"
, "analyze.mv_range_thread=-1", "analyze.subpel_refine=7", "analyze.chroma_me=True", "analyze.mixed_references=True", "analyze.trellis=2", "analyze.psy_rd=1.000000", "analyze.psy_trellis=0.000000", "analyze.fast_pskip=True"
, "analyze.dct_decimate=True", "analyze.noise_reduction=0", "analyze.psy=True", "analyze.intra_luma=11", "analyze.inter_luma=21", "ratecontrol.rc_method=0", "ratecontrol.qp_constant=0", "ratecontrol.qp_min=0"
, "ratecontrol.qp_max=69", "ratecontrol.qp_step=4", "ratecontrol.bitrate=0", "ratecontrol.rate_tolerance=1.000000", "ratecontrol.vbv_max_bitrate=0", "ratecontrol.vbv_buffer_size=0", "ratecontrol.vbv_buffer_init=0"
, "ratecontrol.ip_factor=1.400000", "ratecontrol.pb_factor=1.300000", "ratecontrol.aq_mode=1", "ratecontrol.aq_strength=1.000000", "ratecontrol.mb_tree=True", "ratecontrol.lookahead=40")
adm.addVideoFilter("yadif", "mode=0", "order=1")
adm.addVideoFilter("swscale", "width=1280", "height=720", "algo=1", "sourceAR=0", "targetAR=0", "lockAR=False", "roundup=False")
adm.audioClearTracks()
adm.setSourceTrackLanguage(0,"fra")
adm.setSourceTrackLanguage(1,"qad")
adm.setSourceTrackLanguage(2,"qaa")
adm.audioAddTrack(0)
adm.audioCodec(0, "Aften");
adm.audioSetDrc(0, 0)
adm.audioSetShift(0, 0, 0)
adm.setContainer("MP4", "muxerType=0", "faststart=True", "forceAspectRatio=False", "aspectRatio=1", "rotation=0")

eumagga0x2a

Merci beaucoup, mais encore une fois, il n'y avait aucune différence en ce qui concerne la durée de l'encodage entre les versions VC++ et MinGW avec les paramètres x264 nouveaux. Cette fois, la version libx264 plus ancienne dans VC++ a produit un fichier légèrement plus petit, c'est tout.

Je pense que ce sont les filtres vidéo qui sont responsables de la différence. Voulez-vous aider à identifier le coupable? Yadif est-il celui? Ou swsResize? Tous les deux?

PauloCDG

#7
Bien vu eumagga0x2a ! Le coupable est Yadif, quand je l'enlève je retrouve la vitesse de la version MinGW, et même un peu plus rapide puisqu'il n'y a plus de désentrelacement à effectuer.

eumagga0x2a

Merci, en effet, le code assembleur dans Yadif, très important pour la vitesse d'operation, est désactivé avec VC++. Une solution est en préparation.

PauloCDG

Très bien, merci eumagga0x2a et à toute l'équipe qui fait vivre ce projet.

mean

La derniere nightly contient une nouvelle version de yadif
Est elle rapide comme avant ?

PauloCDG

Je viens de comparer l'encodage d'un segment de 8' de flux MPEG4 dans un fichier .TS avec les deux versions et mes paramètres habituels dont le désentrelacement Yadif.

• Avec Avidemux_2.7.3 r190422_win64, temps d'encodage ± 6'30, taille du fichier encodé 63 007 ko.
• Avec Avidemux_2.7.3 VC++ 64bits 190427 : Temps d'encodage ± 6'15, taille du fichier encodé 62 682 ko.

J'ai donc retrouvé la vitesse d'encodage de ma vieille version 2.7.0, à peu de chose près car il est dommage que la fenêtre d'encodage ne reste pas ouverte à la fin, il faut rester devant pour réussir à lire le temps total écoulé.

Je reste donc sur la 190427 VC++ et je vais rester attentif aux évolutions.
Bravo et merci.