如何截取Youtube某段Video的音频片段
Page content
常看视频的朋友都应该知道,许多作者喜好在自己视频的结尾配上一些音乐作为点缀。某天在逛Youtube的时候看到下面这段视频,觉得结尾曲(大概中间开始)还挺好听的,于是就打算把它的这段音频给截取下来当手机铃声(.m4a
)用。
🍺本篇文章大约需要3分钟来阅读,届时你将学到:
- 如何在使用
youtube_dl
及ffmpeg
命令或相关知识 - 如何在使用
python
调用两个命令来一键下载 - 如何使用
Google colab
进行预处理来加速下载
0x00 环境安装
因为本文是python教学,所以就默认用pip来装了
python3 -m pip install --upgrade youtube-dl
在原视频上,我们需要截取目标 11分19秒 到 11分53秒 的音频。
0x01 一键命令下载
我们以变量A
来代表链接,就可以写成这样。
youtube-dl -x --audio-format m4a --postprocessor-args "-ss 0:11:19 -to 0:11:53" A
其中-x
是为了仅仅下载音轨,而--audio-format
则是设定文件格式
这里要介绍三个比较关键的ffmpeg
参数即上文的--postprocessor-args
参数
-ss
起始时间点-to
截止时间点-t
截取时长
0x02 python方式下载音频
import youtube_dl # 导入库
url = 'https://www.youtube.com/watch?v=RrQhnf5yewo' # 配置目标链接
ydl_opts = {
'format': 'bestaudio/best', # 设定音频质量
'postprocessors': [{
'key': 'FFmpegExtractAudio', # 解码方法
'preferredcodec': 'm4a' # 格式类型
}],
'postprocessor_args': [
"-ss","0:11:19","-t","0:11:53" # 额外处理选项,切分
],
}
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
ydl.download([url])
但是这样的缺点就是得把整个文件下载到本地后再进行分割,会很久且等不及。这个时候就需要使用到我们的Colab
<=点击即可直接创建一个python3
的脚本。
首先我们需要安装第三方模块youtube_dl
,通过下面命令后按shift+enter
即可。
然后我们直接把上面的代码直接贴进去运行,文件开始在云端下载,并处理成了一个我们所想要的xxxx.m4a
文件。
接着我们在左侧栏目找到file
,并点击refresh
刷新目录,选定我们生成的音频文件,右键download
。
于是我们就获取到了该文件music.m4a
最后我们将其通过itunes
导入到手机,即可设置成手机铃声啦!
0x03 python方式下载视频
大家开头看到的小视频就是我通过如下方法截取的,和获得音频的方法类似,只不过多了些许细节。
这里首先给大家介绍下相关指定格式下载的format
参数值
代码 | 类型 | 分辨率 | 备注 |
---|---|---|---|
139 | m4a | audio only | DASH audio 48k , m4a_dash container, mp4a.40.5@ 48k (22050Hz) |
249 | webm | audio only | DASH audio 55k , opus @ 50k, 1.14MiB |
250 | webm | audio only | DASH audio 72k , opus @ 70k, 1.51MiB |
140 | m4a | audio only | DASH audio 128k , m4a_dash container, mp4a.40.2@128k (44100Hz) |
251 | webm | audio only | DASH audio 140k , opus @160k, 2.99MiB |
171 | webm | audio only | DASH audio 142k , vorbis@128k, 3.09MiB |
160 | mp4 | 256x144 | DASH video 113k , avc1.4d400c, 30fps, video only |
278 | webm | 256x144 | 144p 121k , webm container, vp9, 30fps, video only, 2.30MiB |
133 | mp4 | 426x240 | DASH video 266k , avc1.4d4015, 30fps, video only |
242 | webm | 426x240 | 240p 282k , vp9, 30fps, video only, 5.47MiB |
243 | webm | 640x360 | 360p 505k , vp9, 30fps, video only, 10.12MiB |
134 | mp4 | 640x360 | DASH video 644k , avc1.4d401e, 30fps, video only |
244 | webm | 854x480 | 480p 896k , vp9, 30fps, video only, 18.53MiB |
135 | mp4 | 854x480 | DASH video 1176k , avc1.4d401f, 30fps, video only |
247 | webm | 1280x720 | 720p 1748k , vp9, 30fps, video only, 36.29MiB |
136 | mp4 | 1280x720 | DASH video 2329k , avc1.4d401f, 30fps, video only |
248 | webm | 1920x1080 | 1080p 3146k , vp9, 30fps, video only, 63.64MiB |
137 | mp4 | 1920x1080 | DASH video 4143k , avc1.640028, 30fps, video only |
17 | 3gp | 176x144 | small , mp4v.20.3, mp4a.40.2@ 24k |
36 | 3gp | 320x180 | small , mp4v.20.3, mp4a.40.2 |
43 | webm | 640x360 | medium , vp8.0, vorbis@128k |
18 | mp4 | 640x360 | medium , avc1.42001E, mp4a.40.2@ 96k |
22 | mp4 | 1280x720 | hd720 , avc1.64001F, mp4a.40.2@192k (best) |
然后我们贴上下载视频的代码,整个文件300mb
,而我们只需要截取其中的部分,这种时候就很好得发挥除了Colab
的优势
# 承接上文变量及导入
ydl_opts = {
'format': '135+140', # 视频+音频
'postprocessors': [{
'key':'FFmpegVideoConvertor',
'preferedformat':'mp4',
}],
'postprocessor_args': [
"-ss","0:10:55","-t","0:11:53","Rust_oblivion.mp4" # 最后为文件名
],
}
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
ydl.download([url])
在处理完后,我们只需要下载4.9mb
的文件即可,其他操作都在云端完成。