在jupyter笔记本中播放视频:我这样做:
from IPython.display import *
Audio("linktomp3.mp3", autoplay=True)
这创建了一个像手机一样的音频播放器,你可以播放mp3。
现在我想解决一件事。我在一个文件夹中有很多mp3文件。我想逐个在jupyter笔记本中播放所有这些内容。怎么做?有什么帮助吗?
还有一种方法来调整此功能,以启用播放.m4a音乐文件?
提前致谢!!
我们可以在Jupyter中直接用IPython.display.HTML
显示html代码,你需要做的就是创建一个音频播放列表控制器并为href
或src
attr指定文件名。
我刚刚从HTML5 Audio and Video and how to make a playlist借了一个演示,因为我不太熟悉web开发。对CSS样式进行了小的修改以使示例更直观。作者值得称赞!
在.ipynb
文件的同一个父目录下,我创建了Music
目录,并将两个专辑目录复制到其中。目录结构如下:
../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
support我在自己的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')
我有人想要在你的jupyter笔记本中有一个可播放的音频文件,这是我使用的解决方案。我使用html5音频元素。
from IPython import display, HTML
def show_audio_with_controls(file_path):
display(HTML("<audio controls><source src={} type='audio/mpeg'></audio>".format(file_path)))