使用VLC库从livestream保存音频

时间:2018-02-14 16:45:22

标签: python ubuntu-16.04 vlc live-streaming

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

Code.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的循环中,但是第一个剪辑 - clip1 - 继续录制并且永远不会完成录制)。还有一种方法可以指定我只能在实时流中记录15秒而不是使用time.sleep(15)

2 个答案:

答案 0 :(得分:2)

如果您只想保存文件,则无需使用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)

答案 1 :(得分:0)

所有需要的工作都可以通过FFMPEG轻松完成:

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

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

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