Bonjour,

Dans l'exemple simplifié ci dessous:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
with av.open("audio_file.ogg", "r") as container:
    stream = container.streams.audio[0]
    frame = next(container.decode(stream))
    array = frame.to_ndarray() # max et min ?
- Quelle sont les valeurs min et max possible ?
- Quels types sont possibles ?

La doc de cette fonction ne dit rien. Les seuls exemples trouvés sont des exemples de tests non quantitatifs. Je n'ai pas réussi à mettre la main sur le code source github.
D'après la doc, la fonction to_ndarray accepte des kwargs. Mais lesquels ?

J'ai lancé le code suivant affin de faire une estimation:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
import os
import pathlib
import pprint
import av
 
dtypes = {}
for root, _, files in os.walk("/"):
    for file in files:
        suffix = pathlib.Path(file).suffix.lower()
        if suffix not in {".mp3", ".ogg", ".wav", ".wave", ".flac", ".aac", ".mp4", ".mkv", ".avi"}:
            continue
        try:
            with av.open(os.path.join(root, file), "r") as container:
                for stream in container.streams.audio:
                    for frame in container.decode(stream):
                        array = frame.to_ndarray()
                        dtype = (array.dtype, suffix)
                        if dtype not in dtypes:
                            dtypes[dtype] = (0, 0)
                        mini, maxi = array.min(), array.max()
                        if mini < dtypes[dtype][0] or maxi > dtypes[dtype][1]:
                            dtypes[dtype] = (min(dtypes[dtype][0], mini), max(dtypes[dtype][1], maxi))
        except av.error.InvalidDataError:
            continue
pprint.pprint(dtypes)
Voici le résultat:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
{(dtype('int16'), '.wav'): (-32768, 32513),
 (dtype('float32'), '.mp3'): (-1.333013, 1.415781),
 (dtype('float32'), '.ogg'): (-0.7092452, 0.9921398),
 (dtype('int16'), '.mkv'): (-32768, 32767),
 (dtype('float32'), '.avi'): (-1.8093933, 1.8056028),
 (dtype('float32'), '.mkv'): (-1.6858864, 1.8667902),
 (dtype('float32'), '.mp4'): (-1.1447644, 1.1121304)}
Si vous en savez plus, ça aidera sûrement du monde (et moi aussi )