adding datetime tag to pipeline (SOLVED)
Pablo Rodríguez
oinos at web.de
Sat Apr 16 17:10:34 UTC 2022
On 4/16/22 17:22, Pablo Rodríguez via gstreamer-devel wrote:
> [...]
> To the best (of my extremely limited) knowledge, this should add
> metadata to the recorded file.
>
> What am I doing wrong or what am I missing?
Replying to myself, as it might serve for future reference (of what to
avoid).
The script worked fine, but I was really running:
python3 record.py && mediainfo record.py
After I realized that it should read "mediainfo record.py", I also
discovered that both mpv and vlc don’t seem to read any date from datetime.
I include the updated script below.
Just in case it might help,
Pablo
import sys
import gi
gi.require_version("Gtk", "3.0")
gi.require_version("Gst", "1.0")
from gi.repository import Gtk, Gdk, GObject, Gst, GLib
Gst.init(sys.argv)
class record:
def __init__(self):
self.audiofilename = "recording.mp3"
self.win = Gtk.Window()
self.win.set_title("recording script")
self.win.set_default_size(500, 500)
self.win.set_position(Gtk.WindowPosition.CENTER_ALWAYS)
self.vbox = Gtk.VBox()
self.win.connect("destroy", Gtk.main_quit)
self.win.show_all()
self.win.connect('key-press-event', self.key_press_event)
self.player = Gst.parse_launch("autoaudiosrc ! audio/x-raw !
lamemp3enc ! id3v2mux ! filesink location=\"" + self.audiofilename + "\"")
bus = self.player.get_bus()
bus.add_signal_watch()
bus.connect('message', self.on_message)
tags_dict = { "title" : "The Title" }
tags_dict["artist"] = "The Artist"
tags_dict["datetime"] = Gst.DateTime.new_now_local_time()
tags_dict["date"] =
GLib.Date.new_dmy(tags_dict["datetime"].get_day(),
tags_dict["datetime"].get_month(), tags_dict["datetime"].get_year())
tagsetter = self.player.get_by_interface(Gst.TagSetter)
taglist = Gst.TagList.new_empty()
for tag_key, tag_value in tags_dict.items():
try:
taglist.add_value(Gst.TagMergeMode.REPLACE, tag_key,
tag_value)
except ValueError:
print("WARNING: skipping tag %s; value %s is not valid" %
(tag_key, tag_value))
if not taglist.is_empty():
tagsetter.merge_tags(taglist, Gst.TagMergeMode.REPLACE_ALL)
else:
print("<<<< WARNING: Could not find element to set tags. >>>")
print(taglist.to_string())
def on_message(self, bus, message):
t = message.type
if t == Gst.MessageType.EOS:
self.player.set_state(Gst.State.NULL)
Gtk.main_quit()
elif t == Gst.MessageType.ERROR:
err, debug = message.parse_error()
print ("Error: %s" % err, debug)
self.player.set_state(Gst.State.NULL)
def key_press_event(self, widget, event):
if event.keyval == Gdk.keyval_from_name("space"):
if self.player.get_state(0)[1] == Gst.State.NULL:
self.player.set_state(Gst.State.PLAYING)
self.win.set_title("recording...")
elif self.player.get_state(0)[1] == Gst.State.PLAYING:
self.player.send_event(Gst.Event.new_eos())
self.win.set_title("Bye...")
def gtk_main_quit(self, widget, event):
Gtk.main_quit()
def main(self):
Gtk.main()
rec = record()
rec.main()
More information about the gstreamer-devel
mailing list