概述

最近买了一台Sony D100录音砖, 录音效果极赞.于是录了几次TUNA协会的金枪鱼之夜技术沙龙活动.但光自己录不分享实在是耍流氓.于是准备开一个Podcast.

Podcast实际上就是加了一些iTunes特定标签的RSS.规范见Apple中国-制作播客, 或参见英文版.
而Podcast的RSS格式挺麻烦的, 懒得读文档的话, 可以直接使用Podcast RSS在线生成器.

iTunes并不负责托管你的mp3/m4a/mp4/epub等文件, 因此你需要自行解决.

RSS按格式写好之后, 可以通过iTunes或iPhone的播客来订阅, 也可以测试通过之后, 提交给iTunes Store, 来借Apple的平台进行推广.

哦对了, 还需要准备一个1400x1400像素的方形图做Logo.

最后直接开一个Apache, 把RSS内容写到podcast.xml(或其它的xml名字), 发布订阅就好啦.

Bug 1:

貌似这个在线生成器生成的pubDate字段有问题, 可能导致原生的podcast显示的时间为2001年1月1日, 按Apple的说法是要严格符合RFC 2822

Wed, 15 Jun 2014 19:00:00 UTC+8

重定向

如果你的订阅URL中途有变动, iTunes提供了一个标签用于重定向, 省去通知原有订户的烦恼.

在Channel段里加一个new-feed-url即可:

<itunes:new-feed-url>http://podcast.tuna.moe/podcast.xml</itunes:new-feed-url>

订阅方法

  • 电脑上的iTunes
  • iPhone上的播客
    • Marco Arment 的 Overcast, 目前 Overcast 2.0 免费啦, 推荐尝试.
    • iOS 上比较推荐的还有 Castro, 虽然是收费的.
    • 虽然 iOS 9 原生的改进不错, 但是据说还不咋地
  • Android上的Podcast & Radio Addict
  • Linux 的 banshee, rythmbox, amarok
  1. 如何订阅 IPN 出品的播客?
    首先你需要一个泛用型(或称通用型)播客客户端软件. 在 iOS 上我们第一推荐的是Castro. 若您暂时不打算为播客客户端付费, 也可以用苹果自家出的那个紫色图标的 Podcasts, 它是免费的, 并已预装在了 iOS 8 上. 在九月即将推出的 iOS 9 里, Podcasts 会全面更新.
    在安卓上我们推荐 Pocket Casts, 但很遗憾国内安卓市场上的 Pocket Casts 均为盗版. 若您无法在 Google Play 购买 Pocket Casts, 我们推荐开源且免费的 AntennaPod. ​
    (from http://ipn.li/faq)

参考

与 Jekyll 集成

后来我们基于Jekyll实现了一个Markdown博客自动导出podcast.xml的项目, 见https://github.com/tuna/podcast.

附1: 可以接受的几种转码方式

1. FFMPEG: MP3, 效率低, 不推荐

根据这篇帖子, 直接不加任何参数转码, 可能会导致duration加倍.解决方案是

According to #2697: MP3 output duration incorrect in OS X, using the -write_xing 0 option solves the problem.

ffmpeg -i input.wav -write_xing 0 output.mp3

2. FFMPEG: AAC/M4A[Native], 不推荐

经过我们测试, 64kbps的AAC音频和128kbps的MP3效果接近.

ffmpeg -i input.mp3 -strict -2 -c:a aac -b:a 64k output.m4a

3. FFMPEG: FDK-AAC/M4A, 推荐!

貌似原生的aac编码器不太好用, 需要手动编译libfdk_aac

ffmpeg -i input.wav -c:a libfdk_aac -profile:a aac_he -b:a 64k output.m4a

如果不想手动编译FFMPEG的话, 可以

sudo apt-get install libfdk-aac-dev
git clone https://github.com/nu774/fdkaac
cd fdkaac && autoreconf -i && ./configure && make && sudo make install
fdkaac -b64000 -p5 tuna.wav -o tuna64k.m4a

或像下面这样用个管道, 省得转wav了

ffmpeg -i ooo.xxx -f wav - | fdkaac -b64000 -p5 - -o tuna64k.m4a

4. FFMPEG: OGG, 从正义的角度,推荐

OGG是开源的, 但是得用128kbps的效果才差不多.

ffmpeg -i tuna128k.m4a -codec:a libvorbis -ab 128k tuna128k.ogg

5. iTunes: AAC, 方便, 推荐

在Mac OS X上, 直接对于WAV格式右键服务->对所选音频文件进行编码即可.

提供的几种编码格式:

  • 口述播客: ABR 22.05kHz AAC (实测是65kbps左右, 谈话类这个基本够了)
  • 高质量: 128kbps 44.1kHz AAC

附2: 目前我所使用的脚本

# to_aac.sh 
ffmpeg -i $1 -f wav - | fdkaac -b64000 -p5 - -o ./m4a/$(basename $1 .mp3).m4a

# to_ogg.sh 
ffmpeg -i $1 -codec:a libvorbis -ab 128k ./ogg/$(basename $1 .mp3).ogg

# to_info.sh 
echo $1
echo $(du -b $1|awk {'print $1'})
printf "                        <itunes:duration>"
printf $(ffprobe $1 2>&1| grep Duration|cut -d, -f1|awk {'print $2'}|cut -d. -f1)
printf "</itunes:duration>"
echo 

附3: Tuna的示例

podcast.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0">
    <channel>
	    <title>Tunight - 金枪鱼之夜</title>
	    <link></link>
	    <language>zh</language>
	    <copyright>Tsinghua University TUNA Association</copyright>
	    <itunes:subtitle></itunes:subtitle>
	    <itunes:author>TUNA</itunes:author>
	    <itunes:summary>金枪鱼之夜</itunes:summary>  
	    <itunes:owner>
		    <itunes:name>Wang Kang</itunes:name>
		    <itunes:email>scateu@gmail.com</itunes:email>
	    </itunes:owner>
	    <itunes:image href="http://laser.scateu.me/tuna.png" />
	    <itunes:category text="Technology"/>

	    <item>
		    <title>Tunight #2 正则表达式讲座</title>
		    <itunes:author>TUNA</itunes:author>
		    <itunes:subtitle>正则表达式讲座</itunes:subtitle>
		    <itunes:summary>正则表达式讲座, 与电子系合作的例行讲座.</itunes:summary>
		    <itunes:image href="http://laser.scateu.me/tuna.png" />
		    <enclosure url="http://laser.scateu.me/2015-10-17-%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be%e5%bc%8f%e8%ae%b2%e5%ba%a7.m4a" length="29918464" type="audio/mpeg"/>
		    <guid></guid>
		    <pubDate>Sat, 17 Oct 2015 14:00:00 UTC+8</pubDate>
		    <itunes:duration>01:01:35</itunes:duration>
	    </item>
	    <item>
		    <title>Tunight #1 国庆的尾巴</title>
		    <itunes:author>TUNA</itunes:author>
		    <itunes:subtitle></itunes:subtitle>
		    <itunes:summary>盒子咖啡馆</itunes:summary>
		    <itunes:image href="http://laser.scateu.me/tuna.png" />
		    <enclosure url="http://laser.scateu.me/2015-10-07-%e9%87%91%e6%9e%aa%e9%b1%bc%e4%b9%8b%e5%a4%9c.m4a" length="78251570" type="audio/mpeg"/>
		    <guid></guid>
		    <pubDate>Wed, 07 Oct 2015 18:00:00 UTC+8</pubDate>
		    <itunes:duration>02:41:06</itunes:duration>
	    </item>
    </channel>
</rss>

附4: 一行脚本搭建自己的临时Podcast

pip install podcats
youtube-dl -o '%(id)s.%(ext)s' -f bestaudio $@
podcats --host 0.0.0.0 --port 8080 --title podcats serve /path/to/podcasts