在jupyter笔记本中播放视频:
我做:
from IPython.display import *
Audio("linktomp3.mp3", autoplay=True)
这样可以创建一个像手机一样的音频播放器,你可以播放mp3。
现在我想解决一件事。我在一个文件夹中有很多mp3文件。我想逐个在jupyter笔记本中播放所有这些内容。怎么做? 有什么帮助吗?
还有一种方法可以调整此功能以启用播放.m4a音乐文件吗?
提前致谢!!
答案 0 :(得分:1)
我们可以在Jupyter中直接使用IPython.display.HTML
显示HTML代码,您只需要创建一个音频播放列表控制器并为href
或src
attr分配文件名。
我刚刚从HTML5 Audio and Video and how to make a playlist借了一个演示,因为我对web dev不是很熟悉。对CSS样式进行了小的修改以使示例更直观。作者值得称赞!
在.ipynb
文件的同一父目录下,我创建了Music
dir,并将两个相册目录复制到其中。目录结构如下:
../Music/:
Stille/ 贼/
以下代码将加载.mp3
目录下的所有Music
个文件并生成播放列表。
import os
from IPython.display import display,Audio,HTML
playlist_html=""
audio_html=""
music_dir = u'Music'
count=0
for root, dirs, files in os.walk(music_dir):
#print 'root: ' + repr(root)
#print 'dirs: ' + repr(dirs)
#print 'files: ' + repr(files)
for file in files:
if count==0:
playlist_html = u'''<li class="active"><a href="{0}">{1}</a>
</li>\n'''.format(os.path.join(root, file), file)
audio_html = u'''<audio id="audio" preload="auto" tabindex="0" controls="" type="audio/mpeg">
<source type="audio/mp3" src="{}">Sorry, your browser does not support HTML5 audio.
</audio>'''.format(os.path.join(root, file))
else:
playlist_html +=u'''<li><a href="{0}">{1}</a></li>\n'''.format(os.path.join(root, file), file)
count += 1
playlist_html = audio_html + u'''\n<ol id="playlist">\n{}</ol>'''.format(playlist_html)
#print playlist_html
playlist_css = """
<style>
#playlist .active a{color:#CC0000;text-decoration:none;}
#playlist li a:hover{text-decoration:none;}
</style>
"""
playlist_js = """
<script>
var audio;
var playlist;
var tracks;
var current;
init();
function init(){
current = 0;
audio = $('audio');
playlist = $('#playlist');
tracks = playlist.find('li a');
len = tracks.length - 1;
audio[0].volume = .10;
playlist.find('a').click(function(e){
e.preventDefault();
link = $(this);
current = link.parent().index();
run(link, audio[0]);
});
audio[0].addEventListener('ended',function(e){
current++;
if(current == len){
current = 0;
link = playlist.find('a')[0];
}else{
link = playlist.find('a')[current];
}
run($(link),audio[0]);
});
}
function run(link, player){
player.src = link.attr('href');
par = link.parent();
par.addClass('active').siblings().removeClass('active');
audio[0].load();
audio[0].play();
}
</script>
"""
display(HTML(playlist_html))
display(HTML(playlist_css))
display(HTML(playlist_js))
所有这些代码片段都是将html,css和js代码插入到单元格输出中。用正确的文件名替换href
attr有点麻烦但并不困难。实际上js代码可能更难阅读。
Jupyter的输出已经足够了。控制器加载了所有文件,可以按顺序播放音频文件。
如果您想将代码重构为IPython.core.display.DisplayObject
子类,我建议您阅读ipython/Custom Display Logic.ipynb at c4ef808311f2bb84bf4a0a5d3bb980b3d81c373b · ipython/ipython,还有很多工作要做。
.m4a
支持我在自己的Jupyter环境(使用Chrome)上进行了测试,但也无法播放.m4a
。我想这是因为type
标记的audio
attr是audio/m4a
,Chrome无法正确识别。
我曾经遇到过类似的情况:python - IPython.display.Audio cannot correctly handle .ogg
file type? - Stack Overflow。手动将.m4a
的MIME类型更改为audio/mp4
将根据我的测试解决问题。在IPython中播放.m4a
文件之前添加此代码段:
import mimetypes
mimetypes.init()
mimetypes.add_type('audio/mp4', '.m4a')
答案 1 :(得分:0)
我觉得有人只想在你的jupyter笔记本中放一个可播放的音频文件,这就是我使用过的解决方案。我使用html5音频元素。
{
"vishReqHeader": {
"ClientId": "0",
"AppId": "101",
"ApiCode": "1007",
"ReqNo": "123456789"
},
"vishReqBody": {
"RegPhNo": "9880889660",
"Cnt": "3",
"Contacts": [{
"PhNo": "9880889660",
"Name": "Alex"
},
{
"PhNo": "9538607847",
"Name": "Cindy"
},
{
"PhNo": "9886949651",
"Name": "Rob"
}
]
},
"vishReqTrailer": {
"DeviceData": "lat=12.9677992|lng=77.596204|IMEI=1234567890|appVer=3.0.1|OS=ANDROID|SoftVer=6.0.1",
"Authentication": "securitytoken"
}
}