如何截取Youtube某段Video的音频片段

Page content

常看视频的朋友都应该知道,许多作者喜好在自己视频的结尾配上一些音乐作为点缀。某天在逛Youtube的时候看到下面这段视频,觉得结尾曲(大概中间开始)还挺好听的,于是就打算把它的这段音频给截取下来当手机铃声(.m4a)用。

🍺本篇文章大约需要3分钟来阅读,届时你将学到:

  • 如何在使用youtube_dlffmpeg命令或相关知识
  • 如何在使用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即可。

colab_pip_install

然后我们直接把上面的代码直接贴进去运行,文件开始在云端下载,并处理成了一个我们所想要的xxxx.m4a文件。

colab_run

接着我们在左侧栏目找到file,并点击refresh刷新目录,选定我们生成的音频文件,右键download

download_file

于是我们就获取到了该文件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的文件即可,其他操作都在云端完成。