Python 使用VLC库从livestream保存音频

Python 使用VLC库从livestream保存音频,python,ubuntu-16.04,vlc,live-streaming,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.ebou

我正在尝试使用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

for((i=1;i如果您只想保存文件,无需使用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()

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

使用FFMPEG as可以轻松完成所需的所有工作:

ffmpeg -i streamURL -c copy -vn -ac 2 -acodec aac -t 15
-vn仅用于录制音频部分(无视频)


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

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

ffmpeg -i streamURL -c copy -vn -ac 2 -acodec aac -t 15
-vn仅用于录制音频部分(无视频)


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

任何了解这一点的人?任何事情都会有帮助并得到赞赏..也许这在FFMPEG中是可能的?任何了解这一点的人?任何事情都会有帮助并得到赞赏..也许这在FFMPEG中是可能的?