adding datetime tag to pipeline
Pablo Rodríguez
oinos at web.de
Sat Apr 16 15:22:05 UTC 2022
On 4/16/22 13:28, Pablo Rodríguez via gstreamer-devel wrote:
> [...]
> I wonder whether this will work.
I have tried this code in the following script.
I get no error messages and no metadata.
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?
Background for this comes from
https://sourceforge.net/p/gentrans/code/ci/master/tree/tools/entrans.py#l2803
Many thanks for your 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
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()
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. >>>")
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