-
-
Notifications
You must be signed in to change notification settings - Fork 141
/
Copy pathprobe.py
94 lines (62 loc) · 2.25 KB
/
probe.py
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
82
83
84
85
86
87
88
89
90
91
92
93
94
"""
examples.probe
~~~~~~~~~~~~
Probe the video
:copyright: (c) 2019 by Amin Yazdanpanah.
:website: https://www.aminyazdanpanah.com
:email: contact@aminyazdanpanah.com
:license: MIT, see LICENSE for more details.
"""
import argparse
import datetime
import logging
import os
from ffmpeg_streaming import FFProbe
logging.basicConfig(filename='probe.log', level=logging.NOTSET, format='[%(asctime)s] %(levelname)s: %(message)s')
def main():
parser = argparse.ArgumentParser()
parser.add_argument('-i', '--input', required=True, help='The path to the video file (required).')
args = parser.parse_args()
return FFProbe(args.input)
if __name__ == "__main__":
ffprobe = main()
current_dir = os.path.dirname(os.path.abspath(__file__))
ffprobe.save_as_json(os.path.join(current_dir, 'probe.json'))
all_media = ffprobe.all()
video_format = ffprobe.format()
streams = ffprobe.streams().all()
videos = ffprobe.streams().videos()
audios = ffprobe.streams().audios()
first_stream = ffprobe.streams().first_stream()
first_video = ffprobe.streams().video()
first_audio = ffprobe.streams().audio()
print("all:")
print(all_media)
print("format:")
print(video_format)
print("streams:")
print(streams)
print("videos:")
for video in videos:
print(video)
print("audios:")
for audio in audios:
print(audio)
print("first stream:")
print(first_stream)
print("first video:")
print(first_video)
print("first audio:")
print(first_audio)
print("duration: {}".format(str(datetime.timedelta(seconds=float(video_format.get('duration', 0))))))
# duration: 00:00:10.496
print("size: {}k".format(round(int(video_format.get('size', 0)) / 1024)))
# size: 290k
print("overall bitrate: {}k".format(round(int(video_format.get('bit_rate', 0)) / 1024)))
# overall bitrate: 221k
print("dimensions: {}x{}".format(first_video.get('width', "Unknown"), first_video.get('height', "Unknown")))
# dimensions: 480x270
print("video bitrate: {}k".format(round(int(first_video.get('bit_rate', 0)) / 1024)))
# video bitrate: 149k
print("audio bitrate: {}k".format(round(int(first_audio.get('bit_rate', 0)) / 1024)))
# audio bitrate: 64k