【发布时间】: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