File size: 2,190 Bytes
a103028
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
from distutils.log import fatal
import json

from ..common.Common import *
from ..common.Execute import *
from ..media.Timecodes import *

class AudioInfo:

    # file_path
    # file_size
    # audio_codec: aac, alac, wav
    # sample_rate: aac, alac, wav
    # bitrate_kbps: bitrate in kbps
    # channels: number of channels
    # duration: Duration of audio, in seconds
    # frame_count: Total frames in audio
    # bit_depth: path of file

    def __init__(self, file_path):
        
        self.file_path = file_path
        self.file_size = GetFileSize(file_path)

        command = "ffprobe -v error -select_streams a:0 " + " -show_entries stream=codec_name,sample_rate,channels,start_time,duration,,bit_rate,nb_frames -v quiet -of csv=\"p=0\" " + file_path
        stdout, _, errorCode = ExecuteCommand(command)

        stdout = stdout.split("\n")[0]
        stdout = stdout.strip()

        info = stdout.split(",")

        index = 0

        self.audio_codec = info[index]
        index = index + 1

        self.sample_rate = int(info[index])
        index = index + 1

        self.channels = int(info[index])
        index = index + 1

        if info[index] != "N/A":
            self.start_timestamp = float(info[index])
        index = index + 1

        if info[index] != "N/A":
            self.duration = float(info[index])
        index = index + 1

        if info[index] != "N/A":
            self.bitrate_kbps = float(info[index]) / 1000
        index = index + 1

        if info[index] != "N/A":
            self.frame_count = float(info[index])
        index = index + 1

    def String(self):
            return json.dumps(self, default=lambda o: o.__dict__, 
                sort_keys=True, indent=4)

    def Print(self, stream):
        stream.write(self.String())

    def IsDolbyVision(self):
        return self.color_space == "bt2020nc"

    # Duration Getters
    def DurationAsMin(self):
        return self.duration / 60

    def DurationAsSec(self):
        return self.duration

    def DurationAsMillisec(self):
        return (self.duration * 1000)

    def DurationAsTimecode(self):
        return MillisecToTimeCode(self.DurationAsMillisec())