18
18
_internal_video_id_ = 0
19
19
20
20
21
- def _create_video_writer (path : str , overwrite : bool , fps : float = 60.0 ):
21
+ def _create_video_writer (
22
+ path : str , overwrite : bool , prefix : str , suffix : str , lossy : bool , fps : float = 60.0
23
+ ):
22
24
global _internal_video_id_
25
+ sp_kwargs = (
26
+ {"c:v" : "libx264" }
27
+ if lossy
28
+ else {"c:v" : "libx265" , "qp" : "0" , "x265-params" : "lossless=1" }
29
+ )
23
30
vid = ffmpegio .open (
24
- f"{ path } /{ _internal_video_id_ } .mp4" if os .path .isdir (path ) else path ,
31
+ (
32
+ os .path .join (path , f"{ prefix } { _internal_video_id_ } { suffix } .mp4" )
33
+ if os .path .isdir (path )
34
+ else path
35
+ ),
25
36
"wv" ,
26
37
fps ,
27
38
overwrite = overwrite ,
@@ -36,7 +47,8 @@ def _create_video_writer(path: str, overwrite: bool, fps: float = 60.0):
36
47
# # 'c:v': 'h264_cuvid',
37
48
# },
38
49
# NOTE: forced lossless coding params and x265
39
- sp_kwargs = {"c:v" : "libx265" , "qp" : "0" , "x265-params" : "lossless=1" },
50
+ # sp_kwargs={"c:v": "libx265", "qp": "0", "x265-params": "lossless=1"},
51
+ sp_kwargs = sp_kwargs ,
40
52
# TODO: make such profiles selectable, e.g. lossless gray8, lossy rgb8, etc.
41
53
)
42
54
_internal_video_id_ += 1
@@ -57,6 +69,9 @@ def __init__(
57
69
path : str ,
58
70
extension : str = "mp4" ,
59
71
overwrite : bool = False ,
72
+ prefix : str = "" ,
73
+ suffix : str = "" ,
74
+ lossy : bool = False ,
60
75
):
61
76
self .path = (
62
77
ensure_path (log , "output folder" , path ) if os .path .isdir (path ) else path
@@ -65,6 +80,9 @@ def __init__(
65
80
log , "output format" , extension , MultiviewVideo2d .__FORMATS__
66
81
)
67
82
self .overwrite = overwrite
83
+ self .prefix = prefix
84
+ self .suffix = suffix
85
+ self .lossy = lossy
68
86
69
87
def on_predict_epoch_end (self , * args ):
70
88
self .close ()
@@ -93,6 +111,9 @@ def __call__(
93
111
_create_video_writer ,
94
112
path = self .path ,
95
113
overwrite = self .overwrite ,
114
+ prefix = self .prefix ,
115
+ suffix = self .suffix ,
116
+ lossy = self .lossy ,
96
117
fps = float (np .ceil (fps .squeeze ())),
97
118
)
98
119
self .video_writers = defaultdict (self .video_writer_lambda )
0 commit comments