Please see the disclaimer.

Do masks reduce oxygen intake?

Yes. First, see this article from a doctor.

Second, I myself have created a model that shows that the mix of carbon dioxide and oxygen behind a mask always goes to exactly half each minus any oxygen that leaks through between breaths.

Here is the code:

define void print_oxy(a[], iteration) {
	print "Iteration: ", iteration, "\n    O2: ", a[0]
	print "\n    CO2: ", a[1], "\n"
}

define void exchange(*a[], percent, leak) {

	auto b[], c[], l

	c[0] = a[0]
	c[1] = a[1]
	b[0] = (1 - percent) * c[0]
	b[1] = (1 - percent) * c[1]
	b[0] += percent * c[1]
	b[1] += percent * c[0]

	l = b[1] * leak
	a[0] = b[0] + l
	a[1] = b[1] - l
}

print "Enter exchange rate:\n"
percent = read()

print "Enter carbon dioxide leak rate:\n"
leak = read()

scale = 10

a[0] = 1.0
a[1] = 0

old_a[0] = a[1]
old_a[1] = a[0]

for (i = 0; a[0] != a[1] && old_a[0] != a[0] && old_a[1] != a[1]; ++i) {
	old_a[0] = a[0]
	old_a[1] = a[1]
	exchange(a[], percent, leak)
	print_oxy(a[], i)
}

halt

This is code for my bc. For Android users, they can run the code below in the Frink Programming Language app:

percent = eval[input["Enter exchange percentage: ", 0.10]]
leak = eval[input["Enter leak percentage: ", 0.0]]

print_oxy[o2, co2, iteration] :=
{
    println["Iteration: $iteration"]
    println["    O2:  $o2"]
    println["    CO2: $co2"]
}

exchange[o2, co2, percent, leak] :=
{
    ao2 = o2
    aco2 = co2
    bo2 = (1 - percent) * ao2
    bco2 = (1 - percent) * aco2
    co2 = bo2 + percent * aco2
    cco2 = bco2 + percent * ao2
    l = cco2 * leak
    return [co2 + l, cco2 - l]
}

setPrecision[10]

o2 = 1.0
co2 = 0

tempo2 = 0.5
tempco2 = 0.5

i = 0

while o2 != co2 && tempo2 != o2 && tempco2 != co2
{
    tempo2 = o2
    tempco2 = co2
    ls = exchange[o2, co2, percent, leak]
    o2 = ls@0
    co2 = ls@1
    print_oxy[o2, co2, i]
    i = i + 1
}

There will be slight differences between the Frink and bc results.

The “exchange rate” is the amount of air that cannot go through the mask, as a percentage (as a decimal) of the amount of air the person is breathing. The “carbon dioxide leak rate” is the percentage (as a decimal) of carbon dioxide that leaks out from behind the mask between breaths.

It turns out that, with the leak rate set to 0, no matter what you set the exchange rate to, the amount of carbon dioxide and oxygen behind the mask will always go to half and half.

Here is an example with the exchange rate set to 0.1 (10%):

Enter exchange rate:
read> .1
Enter carbon dioxide leak rate:
read> 0
Iteration: 0
    O2: .90
    CO2: .10
Iteration: 1
    O2: .820
    CO2: .180
Iteration: 2
    O2: .7560
    CO2: .2440
Iteration: 3
    O2: .70480
    CO2: .29520
Iteration: 4
    O2: .663840
    CO2: .336160
Iteration: 5
    O2: .6310720
    CO2: .3689280
Iteration: 6
    O2: .60485760
    CO2: .39514240
Iteration: 7
    O2: .583886080
    CO2: .416113920
Iteration: 8
    O2: .5671088640
    CO2: .4328911360
Iteration: 9
    O2: .5536870912
    CO2: .4463129088
Iteration: 10
    O2: .5429496728
    CO2: .4570503270
Iteration: 11
    O2: .5343597382
    CO2: .4656402615
Iteration: 12
    O2: .5274877904
    CO2: .4725122091
Iteration: 13
    O2: .5219902322
    CO2: .4780097671
Iteration: 14
    O2: .5175921856
    CO2: .4824078135
Iteration: 15
    O2: .5140737483
    CO2: .4859262506
Iteration: 16
    O2: .5112589984
    CO2: .4887410003
Iteration: 17
    O2: .5090071985
    CO2: .4909928000
Iteration: 18
    O2: .5072057586
    CO2: .4927942398
Iteration: 19
    O2: .5057646066
    CO2: .4942353916
Iteration: 20
    O2: .5046116850
    CO2: .4953883130
Iteration: 21
    O2: .5036893478
    CO2: .4963106502
Iteration: 22
    O2: .5029514780
    CO2: .4970485198
Iteration: 23
    O2: .5023611821
    CO2: .4976388156
Iteration: 24
    O2: .5018889453
    CO2: .4981110522
Iteration: 25
    O2: .5015111559
    CO2: .4984888414
Iteration: 26
    O2: .5012089244
    CO2: .4987910727
Iteration: 27
    O2: .5009671391
    CO2: .4990328578
Iteration: 28
    O2: .5007737108
    CO2: .4992262859
Iteration: 29
    O2: .5006189682
    CO2: .4993810283
Iteration: 30
    O2: .5004951741
    CO2: .4995048222
Iteration: 31
    O2: .5003961388
    CO2: .4996038573
Iteration: 32
    O2: .5003169106
    CO2: .4996830853
Iteration: 33
    O2: .5002535280
    CO2: .4997464677
Iteration: 34
    O2: .5002028219
    CO2: .4997971737
Iteration: 35
    O2: .5001622570
    CO2: .4998377384
Iteration: 36
    O2: .5001298051
    CO2: .4998701902
Iteration: 37
    O2: .5001038435
    CO2: .4998961516
Iteration: 38
    O2: .5000830742
    CO2: .4999169207
Iteration: 39
    O2: .5000664587
    CO2: .4999335360
Iteration: 40
    O2: .5000531664
    CO2: .4999468282
Iteration: 41
    O2: .5000425325
    CO2: .4999574619
Iteration: 42
    O2: .5000340253
    CO2: .4999659689
Iteration: 43
    O2: .5000272195
    CO2: .4999727745
Iteration: 44
    O2: .5000217749
    CO2: .4999782189
Iteration: 45
    O2: .5000174192
    CO2: .4999825744
Iteration: 46
    O2: .5000139346
    CO2: .4999860588
Iteration: 47
    O2: .5000111469
    CO2: .4999888463
Iteration: 48
    O2: .5000089168
    CO2: .4999910762
Iteration: 49
    O2: .5000071327
    CO2: .4999928601
Iteration: 50
    O2: .5000057054
    CO2: .4999942872
Iteration: 51
    O2: .5000045635
    CO2: .4999954289
Iteration: 52
    O2: .5000036499
    CO2: .4999963423
Iteration: 53
    O2: .5000029191
    CO2: .4999970729
Iteration: 54
    O2: .5000023343
    CO2: .4999976575
Iteration: 55
    O2: .5000018665
    CO2: .4999981251
Iteration: 56
    O2: .5000014923
    CO2: .4999984991
Iteration: 57
    O2: .5000011929
    CO2: .4999987983
Iteration: 58
    O2: .5000009534
    CO2: .4999990376
Iteration: 59
    O2: .5000007617
    CO2: .4999992291
Iteration: 60
    O2: .5000006084
    CO2: .4999993822
Iteration: 61
    O2: .5000004857
    CO2: .4999995047
Iteration: 62
    O2: .5000003875
    CO2: .4999996027
Iteration: 63
    O2: .5000003089
    CO2: .4999996811
Iteration: 64
    O2: .5000002461
    CO2: .4999997437
Iteration: 65
    O2: .5000001957
    CO2: .4999997939
Iteration: 66
    O2: .5000001554
    CO2: .4999998340
Iteration: 67
    O2: .5000001232
    CO2: .4999998661
Iteration: 68
    O2: .5000000974
    CO2: .4999998917
Iteration: 69
    O2: .5000000767
    CO2: .4999999122
Iteration: 70
    O2: .5000000602
    CO2: .4999999285
Iteration: 71
    O2: .5000000469
    CO2: .4999999416
Iteration: 72
    O2: .5000000363
    CO2: .4999999520
Iteration: 73
    O2: .5000000278
    CO2: .4999999604
Iteration: 74
    O2: .5000000210
    CO2: .4999999670
Iteration: 75
    O2: .5000000156
    CO2: .4999999724
Iteration: 76
    O2: .5000000112
    CO2: .4999999766
Iteration: 77
    O2: .5000000076
    CO2: .4999999800
Iteration: 78
    O2: .5000000048
    CO2: .4999999827
Iteration: 79
    O2: .5000000025
    CO2: .4999999848
Iteration: 80
    O2: .5000000006
    CO2: .4999999865
Iteration: 81
    O2: .4999999991
    CO2: .4999999878
Iteration: 82
    O2: .4999999978
    CO2: .4999999889
Iteration: 83
    O2: .4999999968
    CO2: .4999999897
Iteration: 84
    O2: .4999999960
    CO2: .4999999903
Iteration: 85
    O2: .4999999954
    CO2: .4999999908
Iteration: 86
    O2: .4999999948
    CO2: .4999999912
Iteration: 87
    O2: .4999999944
    CO2: .4999999914
Iteration: 88
    O2: .4999999940
    CO2: .4999999916
Iteration: 89
    O2: .4999999937
    CO2: .4999999918
Iteration: 90
    O2: .4999999934
    CO2: .4999999919
Iteration: 91
    O2: .4999999931
    CO2: .4999999920
Iteration: 92
    O2: .4999999929
    CO2: .4999999921
Iteration: 93
    O2: .4999999928
    CO2: .4999999920
Iteration: 94
    O2: .4999999927
    CO2: .4999999920

As you can see, it settles close to 50/50 very quickly.

With a leak, they will go to half and half, minus some amount of carbon dioxide (and plus that amount to oxygen).

Here’s an example with 0.1 exchange rate and 0.01 leak rate:

Enter exchange rate:
read> .1
Enter carbon dioxide leak rate:
read> .01
Iteration: 0
    O2: .9010
    CO2: .0990
Iteration: 1
    O2: .8225920
    CO2: .1774080
Iteration: 2
    O2: .7604928640
    CO2: .2395071360
Iteration: 3
    O2: .7113103482
    CO2: .2886896518
Iteration: 4
    O2: .6723577956
    CO2: .3276422042
Iteration: 5
    O2: .6415073740
    CO2: .3584926256
Iteration: 6
    O2: .6170738401
    CO2: .3829261594
Iteration: 7
    O2: .5977224811
    CO2: .4022775182
Iteration: 8
    O2: .5823962048
    CO2: .4176037943
Iteration: 9
    O2: .5702577940
    CO2: .4297422049
Iteration: 10
    O2: .5606441726
    CO2: .4393558262
Iteration: 11
    O2: .5530301845
    CO2: .4469698141
Iteration: 12
    O2: .5469999059
    CO2: .4530000925
Iteration: 13
    O2: .5422239252
    CO2: .4577760730
Iteration: 14
    O2: .5384413484
    CO2: .4615586497
Iteration: 15
    O2: .5354455475
    CO2: .4645544504
Iteration: 16
    O2: .5330728733
    CO2: .4669271244
Iteration: 17
    O2: .5311937152
    CO2: .4688062823
Iteration: 18
    O2: .5297054220
    CO2: .4702945753
Iteration: 19
    O2: .5285266938
    CO2: .4714733034
Iteration: 20
    O2: .5275931411
    CO2: .4724068559
Iteration: 21
    O2: .5268537672
    CO2: .4731462296
Iteration: 22
    O2: .5262681831
    CO2: .4737318135
Iteration: 23
    O2: .5258044005
    CO2: .4741955959
Iteration: 24
    O2: .5254370846
    CO2: .4745629116
Iteration: 25
    O2: .5251461704
    CO2: .4748538256
Iteration: 26
    O2: .5249157664
    CO2: .4750842294
Iteration: 27
    O2: .5247332864
    CO2: .4752667092
Iteration: 28
    O2: .5245887622
    CO2: .4754112332
Iteration: 29
    O2: .5244742990
    CO2: .4755256962
Iteration: 30
    O2: .5243836442
    CO2: .4756163509
Iteration: 31
    O2: .5243118455
    CO2: .4756881494
Iteration: 32
    O2: .5242549809
    CO2: .4757450138
Iteration: 33
    O2: .5242099442
    CO2: .4757900503
Iteration: 34
    O2: .5241742750
    CO2: .4758257193
Iteration: 35
    O2: .5241460251
    CO2: .4758539691
Iteration: 36
    O2: .5241236511
    CO2: .4758763429
Iteration: 37
    O2: .5241059308
    CO2: .4758940630
Iteration: 38
    O2: .5240918964
    CO2: .4759080973
Iteration: 39
    O2: .5240807811
    CO2: .4759192124
Iteration: 40
    O2: .5240719777
    CO2: .4759280156
Iteration: 41
    O2: .5240650055
    CO2: .4759349876
Iteration: 42
    O2: .5240594834
    CO2: .4759405095
Iteration: 43
    O2: .5240551099
    CO2: .4759448828
Iteration: 44
    O2: .5240516461
    CO2: .4759483464
Iteration: 45
    O2: .5240489027
    CO2: .4759510896
Iteration: 46
    O2: .5240467300
    CO2: .4759532621
Iteration: 47
    O2: .5240450092
    CO2: .4759549828
Iteration: 48
    O2: .5240436462
    CO2: .4759563456
Iteration: 49
    O2: .5240425667
    CO2: .4759574249
Iteration: 50
    O2: .5240417117
    CO2: .4759582797
Iteration: 51
    O2: .5240410346
    CO2: .4759589566
Iteration: 52
    O2: .5240404983
    CO2: .4759594927
Iteration: 53
    O2: .5240400735
    CO2: .4759599173
Iteration: 54
    O2: .5240397371
    CO2: .4759602535
Iteration: 55
    O2: .5240394706
    CO2: .4759605198
Iteration: 56
    O2: .5240392595
    CO2: .4759607307
Iteration: 57
    O2: .5240390923
    CO2: .4759608977
Iteration: 58
    O2: .5240389598
    CO2: .4759610300
Iteration: 59
    O2: .5240388550
    CO2: .4759611347
Iteration: 60
    O2: .5240387719
    CO2: .4759612177
Iteration: 61
    O2: .5240387061
    CO2: .4759612833
Iteration: 62
    O2: .5240386539
    CO2: .4759613353
Iteration: 63
    O2: .5240386126
    CO2: .4759613764
Iteration: 64
    O2: .5240385798
    CO2: .4759614090
Iteration: 65
    O2: .5240385539
    CO2: .4759614348
Iteration: 66
    O2: .5240385333
    CO2: .4759614552
Iteration: 67
    O2: .5240385170
    CO2: .4759614713
Iteration: 68
    O2: .5240385041
    CO2: .4759614841
Iteration: 69
    O2: .5240384938
    CO2: .4759614942
Iteration: 70
    O2: .5240384857
    CO2: .4759615021
Iteration: 71
    O2: .5240384793
    CO2: .4759615083
Iteration: 72
    O2: .5240384741
    CO2: .4759615133
Iteration: 73
    O2: .5240384699
    CO2: .4759615173
Iteration: 74
    O2: .5240384667
    CO2: .4759615203
Iteration: 75
    O2: .5240384641
    CO2: .4759615227
Iteration: 76
    O2: .5240384619
    CO2: .4759615247
Iteration: 77
    O2: .5240384602
    CO2: .4759615262
Iteration: 78
    O2: .5240384588
    CO2: .4759615274
Iteration: 79
    O2: .5240384578
    CO2: .4759615282
Iteration: 80
    O2: .5240384570
    CO2: .4759615288
Iteration: 81
    O2: .5240384563
    CO2: .4759615294
Iteration: 82
    O2: .5240384557
    CO2: .4759615298
Iteration: 83
    O2: .5240384552
    CO2: .4759615301
Iteration: 84
    O2: .5240384548
    CO2: .4759615303
Iteration: 85
    O2: .5240384545
    CO2: .4759615304
Iteration: 86
    O2: .5240384542
    CO2: .4759615305
Iteration: 87
    O2: .5240384539
    CO2: .4759615306
Iteration: 88
    O2: .5240384537
    CO2: .4759615306

Is this a problem? It depends on a number of factors, but the most important one, in my opinion, is the volume between the mask and the face. If that volume is small (tight-fitting mask), it is not much of a problem since the amount of additional carbon dioxide will likewise be small, whereas a large volume (loose-fitting mask) could be a big problem, though also may not be a problem.

Lesson: don’t just blindly wear masks; make sure you are wearing a tight-fitting mask and only wear it when you have to. And try to make politicians remove their mask mandates since there actually may be harm from constant mask use.

Edit, 23 Aug 2020: Added the Frink code.