【问题标题】:Saving audio from livestream using VLC library使用 VLC 库从直播中保存音频
【发布时间】:2018-02-14 16:45:22
【问题描述】:

我正在尝试使用 VLC 库从实时流中保存音频剪辑(每个剪辑 15 秒)。我找不到任何可以让我从直播中仅录制 15 秒的选项。因此我最终在我的代码中使用了计时器,但录制剪辑有时包含 10 秒,有时是 20 秒(很少是 15 秒)。此外,有时音频内容会在剪辑中重复。 这是代码(我是新手,请指导我)

代码.py

import os
import sys
import vlc
import time

clipNumber = sys.argv[1]

filepath = 'http://streamer64.eboundservices.com/geo/geonews_abr/playlist.m3u8'
movie = os.path.expanduser(filepath)
if 'http://' not in filepath:
    if not os.access(movie, os.R_OK):
        print ( 'Error: %s file is not readable' % movie )
        sys.exit(1)
filename_and_command = "--sout=#transcode{vcodec=none,acodec=mp3,ab=320,channels=2,samplerate=44100}:file{dst=clip" + str(clipNumber) + ".mp3}"
#    filename_and_command = "--sout=file/ts:clip" + str(clipNumber) + ".mp3"
instance = vlc.Instance(filename_and_command)
try:
    media = instance.media_new(movie)
except NameError:
    print ('NameError: % (%s vs Libvlc %s)' % (sys.exc_info()[1],
                    vlc.__version__, vlc.libvlc_get_version()))
    sys.exit(1)
player = instance.media_player_new()
player.set_media(media)
player.play()
time.sleep(15)
exit()

现在我想录制 1 分钟的直播,我从 bash 脚本中调用这个 python 代码 4 次,它创建了 4 个音频剪辑(clip1.mp3、clip2.mp3、clip3.mp3 和 clip4.mp3 )

Script.sh

for ((i=1; i<=4; i++))
do
    printf "Recording stream #%d\n", "$i"
    python code.py "$i"
    printf "Finished stream #%d\n", "$i"
done

有没有办法只用 Python 循环代码,而不是用 bash 脚本一次又一次地调用(我试图将代码放在 python 的循环中,但第一个剪辑 - 剪辑 1 - 一直在录制并且永远不会完成录制)。还有一种方法可以指定我只能从直播中录制 15 秒,而不是使用 time.sleep(15)

【问题讨论】:

  • 有谁对此有所了解?任何事情都会有所帮助,我们将不胜感激..
  • 也许 FFMPEG 可以做到这一点?

标签: python ubuntu-16.04 vlc live-streaming


【解决方案1】:

如果你只是想保存文件,不需要使用vlc。这是我用来执行此操作的一个简短程序:

def record(filepath, stream, duration):
    fd = open(filepath, 'wb')
    begin = datetime.now()
    duration = timedelta(milliseconds=duration)
    while datetime.now() - begin < duration:
        data = stream.read(10000)
        fd.write(data)
    fd.close()

在一秒钟内记录的使用示例:

   from urllib.request import urlopen
   record('clip.mp3', urlopen('http://streamer64.eboundservices.com/geo/geonews_abr/playlist.m3u8'), 1000)

【讨论】:

    【解决方案2】:

    所有需要的工作都可以使用 FFMPEG 轻松完成,如下所示:

    ffmpeg -i streamURL -c copy -vn -ac 2 -acodec aac -t 15
    

    -vn 仅用于录制音频部分(无视频)

    -t 用于指定要录制的流的持续时间(此处为 15 秒)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-15
      • 2016-04-27
      • 2015-03-05
      • 2013-06-03
      • 1970-01-01
      相关资源
      最近更新 更多