[保存港口输入Liquidsoap时在文件名中使用元数据

问题描述 投票:2回答:1

因此,我有一个Liquidsoap实例,我正在使用该实例流式传输到Icecast服务器。

我想录制任何自动进行的实时广播,我现在正在做并且效果很好。

[我想做的是在创建mp3存档时使用现场表演的元数据(特别是歌曲名)。

                #!/usr/local/bin/liquidsoap

            set("log.file",true)
            set("log.file.path","/var/log/liquidsoap/radiostation.log")
            set("log.stdout",true)
            set("log.level",3)
            #-------------------------------------

            set("harbor.bind_addr","0.0.0.0")

            #-------------------------------------

            backup_playlist = playlist("/home/radio/playlists/playlist.pls",conservative=true,reload_mode="watch")
            output.dummy(fallible=true,backup_playlist)

            #-------------------------------------

            live_dj = input.harbor(id="live",port=9000,password="XXX", "live")

            date = '%m-%d-%Y'
            time = '%H:%M:%S'
            output.file(%mp3, "/var/www/recorded-shows/#{Title} - Recorded On #{date} At #{time}.mp3", live_dj, fallible=true)

            #time_stamp = '%m-%d-%Y, %H:%M:%S'
            #output.file(%mp3, "/var/www/recorded-shows/live_dj_#{time_stamp}.mp3", live_dj, fallible=true)

            #-------------------------------------

            on_fail = single("/home/radio/fallback/Enei -The Moment Feat DRS.mp3")

            #-------------------------------------

            source = fallback(track_sensitive=false,
                              [live_dj, backup_playlist, on_fail])

            # We output the stream to icecast
            output.icecast(%mp3,id="icecast",
                           mount="myradio.mp3",
                           host="localhost", password="XXX",
                           icy_metadata="true",description="cool radio",
                           url="http://myradio.fm",
                           source)

很遗憾,尽管我无法填充此人口,但我想在其中添加#{title},但我想在其中显示我的歌曲标题。

我的Dj使用BUTT,并且节目名称已作为其连接的一部分进行连接,因此数据应可在预先录制时使用。

任何建议都非常感谢!

icecast liquidsoap
1个回答
0
投票

这远没有看起来那么容易。

  1. title元数据是动态的,因此在脚本初始化时不可用作变量
  2. 初始化脚本时将编译output.file的文件名参数

解决方案将包含在:

  1. 定义变量引用title以填充实时元数据
  2. 输出到临时文件
  3. 使用on_close参数和output.file重命名关闭时的文件(在这种情况下,我们可以在标题前加上标题)

这将提供以下代码(在Linux机器上,在Windows上将mv更改为ren:]

date = '%m-%d-%Y'
time = '%H:%M:%S'
# Title is a reference
title = ref ""

# Populate with metadata
def get_title(m)
  title := m['title']
end
live_dj = on_metadata(get_title,live_dj)

# Rename file on close
def on_close(filename)
  # Generate new file name
  new_filename = "#{path.dirname(filename)}/#{!title} - #{basename(filename)}"
  # Rename file
  system("mv '#{filename}' '#{new_filename}'")
end

output.file(on_close=on_close, %mp3, "/var/www/recorded-shows/Recorded On #{date} At #{time}.mp3", live_dj, fallible=true)

我测试了类似的情况,并且效果很好。请注意,每次DJ断开连接或更新标题时,这都会创建一个新文件。还请记住,时间戳记将由output.file解析。

这是基于Liquidsoap开发人员的以下示例:https://github.com/savonet/liquidsoap/issues/661#issuecomment-439935854

© www.soinside.com 2019 - 2024. All rights reserved.