首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >pyav:保存视频和音频以将文件从流hls中分离出来

pyav:保存视频和音频以将文件从流hls中分离出来
EN

Stack Overflow用户
提问于 2019-03-27 09:52:19
回答 1查看 2.8K关注 0票数 1

我正在编写一个脚本来提取视频关键帧(到frame_{0}.jpg)和音频到一个单独的.mp3文件。以下是我到目前为止所拥有的:

代码语言:javascript
运行
复制
import os
import av

path_to_video = 'http://184.72.239.149/vod/smil:BigBuckBunny.smil/playlist.m3u8'
container = av.open(path_to_video)

stream = container.streams.video[0]
audio_stream = container.streams.audio[0]

stream.codec_context.skip_frame = 'NONKEY'
tgt_path = "./frames"
if not os.path.isdir(tgt_path):
    os.makedirs(tgt_path)
for frame in container.decode(stream):
   tgt_filename = os.path.join(tgt_path,'frame-{:09d}.jpg'.format(frame.pts))
   frame.to_image().save(tgt_filename,quality=80)

如何将音频流保存到文件(最好是块)。是否需要启动单独的捕获例程并并行运行,还是可以在上面的循环中捕获?

不幸的是,我检查了一下pyav github哨所,发现没有运气。不知道我怎么能在一个循环中做到这一点。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-25 18:31:13

这是一个发布在pyav上的回答

代码语言:javascript
运行
复制
import av

input_container = av.open(
    'http://184.72.239.149/vod/smil:BigBuckBunny.smil/playlist.m3u8')
input_stream = input_container.streams.get(audio=0)[0]

output_container = av.open('live_stream.mp3', 'w')
output_stream = output_container.add_stream('mp3')

for frame in input_container.decode(input_stream):
    frame.pts = None
    for packet in output_stream.encode(frame):
        output_container.mux(packet)

for packet in output_stream.encode(None):
    output_container.mux(packet)

output_container.close()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55374251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档