output timestamps to a file

This commit is contained in:
2021-11-09 10:15:59 +02:00
parent ee341d96cf
commit 38378a5378
4 changed files with 77 additions and 30 deletions

28
Makefile Normal file
View File

@@ -0,0 +1,28 @@
.PHONY: help
help: ## *:・゚✧*:・゚✧ This help *:・゚✧*:・゚✧
@printf "\033[36;1m %14s \033[0;32;1m %s\033[0m\n" Target Description
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | \
awk ' \
BEGIN {FS = ":.*?## "}; \
{ if ( $$1 != "-") { \
printf "\033[31;1;40m[ \033[36;1;40m%14s \033[31;1;40m]\033[0;32;1m %s\033[0m\n", $$1, $$2 \
} else { \
printf " \033[0;33;1m=^= %-25s =^=\033[0m\n", $$2 \
} \
} \
'
-: ## Building
###################################
clean: ## Clean build folders
rm -r build tsmark.egg-info
pip: ## Install with pip
pip install .
pipx: ## Install with pipx
pipx install -f .

View File

@@ -1,3 +1,33 @@
from tsmark.video_annotator import main
from tsmark.video_annotator import Marker
import argparse
VERSION = "0.2"
VERSION = "0.3"
def get_options():
parser = argparse.ArgumentParser(description="Video timestamping tool")
parser.add_argument(
"--ts",
action="store",
dest="timestamps",
default=None,
required=False,
help="Comma separated list of predefined timestamps, in frame numbers, or HH:MM:SS.FF. You can use the -o output file as input via --ts $( cut -d, -f1 ts.csv | xargs printf '%%s,' )",
)
parser.add_argument(
"-o",
action="store",
dest="output",
default=None,
required=False,
help="Save timestamps to a CSV file",
)
parser.add_argument("--version", action="version", version=VERSION)
parser.add_argument(action="store", dest="video")
return parser.parse_args()
def main():
opts = get_options()
Marker(opts)

View File

@@ -1,3 +0,0 @@
from tsmark.video_annotator import main
main()

View File

@@ -2,12 +2,11 @@ import sys
import os
import cv2
import time
import argparse
class Marker:
def __init__(self):
self.get_options()
def __init__(self, opts):
self.opts = opts
if not os.path.exists(self.opts.video):
raise FileNotFoundError("Video file missing!")
@@ -157,7 +156,6 @@ class Marker:
self.shadow_text(frame, row, (left, bottom), 0.6, 1, (255, 255, 255))
bottom += 18
def draw_label(self, frame):
if not self.nr in self.stamps:
@@ -201,21 +199,6 @@ class Marker:
q or esc quit
"""
def get_options(self):
parser = argparse.ArgumentParser(description="Video timestamping tool")
parser.add_argument(
"--ts",
action="store",
dest="timestamps",
default=None,
required=False,
help="Comma separated list of predefined timestamps, in frame numbers, or HH:MM:SS.FF",
)
parser.add_argument(action="store", dest="video")
self.opts = parser.parse_args()
def mouse_click(self, event, x, y, flags, param):
in_bar = all(
@@ -260,7 +243,11 @@ class Marker:
def parse_timestamps(self):
if self.opts.timestamps:
self.stamps = sorted(
[self.parse_time(ts.strip()) for ts in self.opts.timestamps.split(",")]
[
self.parse_time(ts.strip())
for ts in self.opts.timestamps.split(",")
if ts.strip() != ""
]
)
self.stamps = [x for x in self.stamps if 0 <= x < self.frames]
self.nr = self.stamps[0]
@@ -285,6 +272,14 @@ class Marker:
)
)
def save_timestamps(self):
if self.opts.output == None:
return
with open(self.opts.output, "wt") as fp:
for i, ts in enumerate(self.stamps):
fp.write("{},{},{}\n".format(self.format_time(ts), i + 1, ts + 1))
def shadow_text(self, frame, text, pos, size, thicc, color):
cv2.putText(
@@ -344,7 +339,7 @@ class Marker:
if self.show_help:
self.draw_help(frame_visu)
if cv2.getWindowProperty('tsmark', cv2.WND_PROP_VISIBLE) < 1:
if cv2.getWindowProperty("tsmark", cv2.WND_PROP_VISIBLE) < 1:
break
cv2.imshow("tsmark", frame_visu)
k = cv2.waitKey(draw_wait)
@@ -426,7 +421,4 @@ class Marker:
self.video_reader.release()
self.print_timestamps()
def main():
mark = Marker()
self.save_timestamps()