python - 如何从 Python 中的视频链接下载音频

标签 python python-3.x audio beautifulsoup

我有一个我正在迭代的链接列表,如下所示

https://www.loc.gov/item/2015669100/
https://www.loc.gov/item/2015669101/
https://www.loc.gov/item/2015669102/
https://www.loc.gov/item/2015669103/
https://www.loc.gov/item/2015669104/
https://www.loc.gov/item/2015669105/
https://www.loc.gov/item/2015669106/
https://www.loc.gov/item/2015669107/
https://www.loc.gov/item/2015669108/
https://www.loc.gov/item/2015669109/
如果您查看这些链接,您会发现它有一个视频和一个可下载的 XML 文件。我的任务是从视频中下载音频并从一页一起下载 XML 文件。
我的问题是,如何从此类音频文件中获取音频?
下面是我目前的代码。
from bs4 import BeautifulSoup
from urllib.request import Request, urlopen

base_html = "https://www.loc.gov/collections/civil-rights-history-project/?sp={}"

for i in range(1,8):
    html = base_html.format(i)
    req = Request(html, headers={'User-Agent': 'Mozilla/5.0'})
    soup = BeautifulSoup(urlopen(req).read(), 'html.parser')
    
    pages = soup.findAll('div', attrs={'class' : 'item-description'})
    for div in pages:
            crawl_p = div.find('a')['href']
            #some logic here

最佳答案

查看该站点,看起来像通过传输段(.ts 文件)形成的 m3u8 url 流式传输的视频和音频文件。<source>包含 m3u8 流的 url。标签使用标签中的属性来标识。(这里是类型属性)。

import subprocess
from bs4 import BeautifulSoup
import requests as r

sess = r.session()
site_url = "https://www.loc.gov/item/2015669100/"
request = sess.get(site_url)
#print(request.content)

soup = BeautifulSoup(request.content, 'html5lib')
m3u8_url = soup.find('source',attrs={'type' : 'application/x-mpegURL'})['src']
print(str(m3u8_url))

这将删除 m3u8 网址,https://tile.loc.gov/streaming-services/iiif/service:afc:afc2010039:afc2010039_crhp0001:afc2010039_crhp0001_mv04/full/full/0/full/default.m3u8ffmpeg 可以从 m3u8 文件下载流(视频或音频)。它也可以从 python 运行。
subprocess.call(['ffmpeg','-i',m3u8_url,'-vn','-map','a','output.ts' ])
不要忘记用 [] 包装命令.引号内的每个单词代表一个空格分隔的命令。完整的 ffmpeg 命令是 ffmpeg -i m3u8_url -vn -map a output.ts这是完整的代码。只要确保包含 ffmpeg 路径变量,否则子进程会抛出错误。文件很大,所以下载音频文件可能需要一段时间。
import subprocess
from bs4 import BeautifulSoup
import requests as r

sess = r.session()
site_url = "https://www.loc.gov/item/2015669100/"
request = sess.get(site_url)
#print(request.content)

soup = BeautifulSoup(request.content, 'html5lib')
m3u8_url = soup.find('source',attrs={'type' : 'application/x-mpegURL'})['src']
print(str(m3u8_url))

subprocess.call(['ffmpeg','-i',m3u8_url,'-vn','-map','a','output.ts' ])

关于python - 如何从 Python 中的视频链接下载音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64142110/

相关文章:

python-3.x - 在 Pandas 滚动中使用带参数的自定义函数

c - 从应用程序内注册虚拟声音设备

blackberry - 如何在j2me/blackberry(midp)应用程序中快进和快退音频?

android - 在Android上音调转换音频文件

Python 计划未按计划运行

python - “类型”对象在函数定义时不可订阅

python - 您可以将 python 脚本嵌入到网络浏览器中吗?

python - 使用浏览器使用 Python3 更新 facebook 状态

Python argparse.ArgumentParser 无法区分 `--modes` 和 `--mode`

python - 使用 PIL 将 RGBA PNG 转换为 RGB