Analyse de compression vidéo

Dans le cadre de mes vidéos Youtube il m’est arrivé un truc intéressant (je dis intéressant pour ne pas être vulgaire). Après avoir bien peaufiné les réglages d’acquisition sur OBS Studio je me suis retrouvé avec une vidéo de 240Mo de belle qualité (partie de droite). Ensuite j’ai fais quelques coupes et bricoles dans Blender et lancé la génération de la vidéo finale avec les meilleurs paramètres de qualité du format de compression. Et là je me retrouve avec une vidéo de moins bonne qualité, plus floue et avec des couleurs plus ternes. Et en prime elle fait plus de 1Go soit 4 fois la taille de la vidéo originale alors qu’elle ne dure que 1 minute 40 de plus. Bien entendu les 2 vidéos sont encodées avec le même codec (H264) et le même conteneur (MP4).

Passablement contrarié et après avoir essayé plusieurs réglages j’ai décidé d’analyser ces deux vidéos afin de voir où étaient les différences. Pour cela j’ai utilisé 2 moyens complémentaires.

Mediainfo

Sûrement le plus connu des logiciels d’analyse de codec vidéo / audio.

Pour l’installer

sudo apt install mediainfo

ensuite tout simplement pour analyser les vidéos on entre dans un terminal.

mediainfo <nom_du_fichier.mp4>

vidéo 1 (celle de moindre qualité)

General
Complete name : output20001-36102.mp4
Format : MPEG-4
Format profile : Base Media
Codec ID : isom (isom/iso2/avc1/mp41)
File size : 1.11 GiB
Duration : 20 min 3 s
Overall bit rate : 7 925 kb/s
Writing application : Lavf58.20.100

vidéo 2

General
Complete name : 2019-05-31 15-57-58.mp4
Format : MPEG-4
Format profile : Base Media
Codec ID : isom (isom/iso2/avc1/mp41)
File size : 244 MiB
Duration : 18 min 24 s
Overall bit rate mode : Variable
Overall bit rate : 1 850 kb/s
Writing application : Lavf58.20.100

Là on constate directement que la vidéo 2 a un « bit rate mode » variable plus souvent connu sous l’acronyme VBR (variable bit rate)

vidéo 1

Video
ID : 1
Format : AVC
Format/Info : Advanced Video Codec
Format profile : High@L4
Format settings : 4 Ref Frames
Format settings, CABAC : No
Format settings, ReFrames : 4 frames
Format settings, GOP : M=4, N=18
Codec ID : avc1
Codec ID/Info : Advanced Video Coding
Duration : 20 min 3 s
Bit rate : 7 757 kb/s
Width : 1 920 pixels
Height : 1 080 pixels
Display aspect ratio : 16:9
Frame rate mode : Constant
Frame rate : 30.000 FPS
Color space : YUV
Chroma subsampling : 4:2:0
Bit depth : 8 bits
Scan type : Progressive
Bits/(Pixel*Frame) : 0.125
Stream size : 1.09 GiB (98%)
Writing library : x264 core 155 r2917 0a84d98
Encoding settings : cabac=0 / ref=2 / deblock=1:0:0 / analyse=0x3:0x100 / me=umh / subme=6 / psy=1 / psy_rd=1.00:0.00 / mixed_ref=1 / me_range=16 / chroma_me=1 / trellis=0 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=-2 / threads=1 / lookahead_threads=1 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=3 / b_pyramid=2 / b_adapt=0 / b_bias=0 / direct=3 / weightb=1 / open_gop=1 / weightp=2 / keyint=18 / keyint_min=10 / scenecut=0 / intra_refresh=0 / rc_lookahead=18 / rc=crf / mbtree=1 / crf=17.0 / qcomp=0.60 / qpmin=10 / qpmax=51 / qpstep=4 / ip_ratio=1.41 / aq=1:1.00
Codec configuration box : avcC

vidéo 2

Video
ID : 1
Format : AVC
Format/Info : Advanced Video Codec
Format profile : High@L4
Format settings : CABAC / 4 Ref Frames
Format settings, CABAC : Yes
Format settings, ReFrames : 4 frames
Codec ID : avc1
Codec ID/Info : Advanced Video Coding
Duration : 18 min 24 s
Bit rate : 1 685 kb/s
Width : 1 920 pixels
Height : 1 080 pixels
Display aspect ratio : 16:9
Frame rate mode : Constant
Frame rate : 30.000 FPS
Color space : YUV
Chroma subsampling : 4:2:0
Bit depth : 8 bits
Scan type : Progressive
Bits/(Pixel*Frame) : 0.027
Stream size : 222 MiB (91%)
Writing library : x264 core 155 r2917 0a84d98
Encoding settings : cabac=1 / ref=2 / deblock=1:-1:-1 / analyse=0x3:0x113 / me=hex / subme=6 / psy=1 / psy_rd=1,00:0,15 / mixed_ref=1 / me_range=16 / chroma_me=1 / trellis=1 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=-3 / threads=24 / lookahead_threads=4 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=3 / b_pyramid=2 / b_adapt=1 / b_bias=0 / direct=1 / weightb=1 / open_gop=0 / weightp=1 / keyint=250 / keyint_min=25 / scenecut=40 / intra_refresh=0 / rc_lookahead=30 / rc=crf / mbtree=1 / crf=23,0 / qcomp=0,60 / qpmin=0 / qpmax=69 / qpstep=4 / vbv_maxrate=2500 / vbv_bufsize=2500 / crf_max=0,0 / nal_hrd=none / filler=0 / ip_ratio=1,40 / aq=1:1,00
Color range : Full
Codec configuration box : avcC

Là on voit aussi une information plutôt pertinente la vidéo 2 est codée avec le paramètre CABAC , il y a aussi des différences dans les « Encoding settings » mais une info qui m’a semblé importante est le « Color range : Full » dans la vidéo 2 ceci pourrait sûrement expliquer que les couleurs soient plus vives et plus contrastées.

Voila quelques informations importantes mais je voulais aussi avoir le format des pixels, car c’est un paramètre que l’on peut maîtriser dans beaucoup de logiciels. J’ai obtenu cette information avec

ffprobe

ffprobe est un outil de ffmpeg on l’utilise avec l’option -show_streams pour avoir plus de détails sur les flux

ffprobe -show_streams vidéo1.mp4

Vidéo 1

[STREAM]
index=0
codec_name=h264
codec_long_name=H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
profile=High
codec_type=video
codec_time_base=1/60
codec_tag_string=avc1
codec_tag=0x31637661
width=1920
height=1080
coded_width=1920
coded_height=1088
has_b_frames=2
sample_aspect_ratio=1:1
display_aspect_ratio=16:9
pix_fmt=yuv420p
level=40
color_range=unknown
color_space=unknown
color_transfer=unknown
color_primaries=unknown
chroma_location=left
field_order=unknown
timecode=N/A
refs=1
is_avc=true
nal_length_size=4
id=N/A
r_frame_rate=30/1
avg_frame_[STREAM]
index=0
codec_name=h264
codec_long_name=H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
profile=High
codec_type=video
codec_time_base=1/60
codec_tag_string=avc1
codec_tag=0x31637661
width=1920
height=1080
coded_width=1920
coded_height=1088
has_b_frames=2
sample_aspect_ratio=1:1
display_aspect_ratio=16:9
pix_fmt=yuv420p
level=40
color_range=unknown
color_space=unknown
color_transfer=unknown
color_primaries=unknown
chroma_location=left
field_order=unknown
timecode=N/A
refs=1
is_avc=true
nal_length_size=4
id=N/A
r_frame_rate=30/1
avg_frame_rate=30/1
time_base=1/90000
start_pts=0
start_time=0.000000
duration_ts=108306000
duration=1203.400000
bit_rate=7757481
max_bit_rate=N/A
bits_per_raw_sample=8
nb_frames=36102
nb_read_frames=N/A
nb_read_packets=N/A
DISPOSITION:default=1
DISPOSITION:dub=0
DISPOSITION:original=0
DISPOSITION:comment=0
DISPOSITION:lyrics=0
DISPOSITION:karaoke=0
DISPOSITION:forced=0
DISPOSITION:hearing_impaired=0
DISPOSITION:visual_impaired=0
DISPOSITION:clean_effects=0
DISPOSITION:attached_pic=0
DISPOSITION:timed_thumbnails=0
TAG:language=und
TAG:handler_name=VideoHandlerrate=30/1
time_base=1/90000
start_pts=0
start_time=0.000000
duration_ts=108306000
duration=1203.400000
bit_rate=7757481
max_bit_rate=N/A
bits_per_raw_sample=8
nb_frames=36102
nb_read_frames=N/A
nb_read_packets=N/A
DISPOSITION:default=1
DISPOSITION:dub=0
DISPOSITION:original=0
DISPOSITION:comment=0
DISPOSITION:lyrics=0
DISPOSITION:karaoke=0
DISPOSITION:forced=0
DISPOSITION:hearing_impaired=0
DISPOSITION:visual_impaired=0
DISPOSITION:clean_effects=0
DISPOSITION:attached_pic=0
DISPOSITION:timed_thumbnails=0
TAG:language=und
TAG:handler_name=VideoHandler
[/STREAM]

Vidéo 2

[STREAM]
index=0
codec_name=h264
codec_long_name=H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
profile=High
codec_type=video
codec_time_base=1/60
codec_tag_string=avc1
codec_tag=0x31637661
width=1920
height=1080
coded_width=1920
coded_height=1088
has_b_frames=2
sample_aspect_ratio=N/A
display_aspect_ratio=N/A
pix_fmt=yuvj420p
level=40
color_range=pc
color_space=unknown
color_transfer=unknown
color_primaries=unknown
chroma_location=left
field_order=unknown
timecode=N/A
refs=1
is_avc=true
nal_length_size=4
id=N/A
r_frame_rate=30/1
avg_frame_rate=30/1
time_base=1/15360
start_pts=0
start_time=0.000000
duration_ts=16964096
duration=1104.433333
bit_rate=1685307
max_bit_rate=N/A
bits_per_raw_sample=8
nb_frames=33133
nb_read_frames=N/A
nb_read_packets=N/A
DISPOSITION:default=1
DISPOSITION:dub=0
DISPOSITION:original=0
DISPOSITION:comment=0
DISPOSITION:lyrics=0
DISPOSITION:karaoke=0
DISPOSITION:forced=0
DISPOSITION:hearing_impaired=0
DISPOSITION:visual_impaired=0
DISPOSITION:clean_effects=0
DISPOSITION:attached_pic=0
DISPOSITION:timed_thumbnails=0
TAG:language=und
TAG:handler_name=VideoHandler
[/STREAM]

Avec cet utilitaire on récupère d’autres informations et on voit que le format de pixels est différent : yuv420p pour la vidéo 1 et yuvj420p pour la 2

Conclusion

Super j’ai les différences entre les paramètres de compression des 2 vidéos, la question qui se pose maintenant c’est comment je peux régler Blender pour qu’il utilise ces paramètres pour traiter mes vidéos afin d’obtenir un bon rendu ?

 

 

 

Olivier Munier

Depuis ma plus tendre enfance j'ai toujours été attiré par les domaines techniques et les appareils électroniques. Très vite je me suis intéressé à l'informatique et j'ai eu mon premier PC en 1992. Au début des années 2000, j'ai découvert Linux et le monde des logiciels libres et open source. Assez vite j'ai décidé de me spécialiser sur ce vaste monde afin de devenir un expert. Titulaire d'un master en Informatique, mes compétences couvrent un très large éventail, notamment l'administration système et réseau Linux, la virtualisation et la programmation C, Shell et surtout Python. Sur ce site je partage mes connaissances, réalisations et avis sur tout un tas de domaines mais particulièrement l'informatique, l'électronique et la geekitude.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *