仅下载YouTube视频的音频

18
我知道有很多方法可以从YouTube下载视频,然后将其转换为音频或进行进一步处理。但最近我惊讶地看到了一个名为YoutubeToMp3的应用程序在Mac上实际显示“跳过X MB的视频”,并且据称仅下载视频的音频部分,而无需使用带宽下载整个视频然后再转换。我想知道这是否真的正确和可能,因为我找不到任何方法来做到这一点。你有什么想法吗?
编辑: 经过一些测试,以下是有关此主题的其他信息。我尝试从中获取音频的视频只是来自互联网的样本mp4文件:

http://download.wavetlan.com/SVV/Media/HTTP/MP4/ConvertedFiles/MediaCoder/MediaCoder_test6_1m9s_XVID_VBR_306kbps_320x240_25fps_MPEG1Layer3_CBR_320kbps_Stereo_44100Hz.mp4

我尝试过以下命令: 不幸的是,这些命令似乎都没有使用更少的带宽。它们都下载整个视频。现在您已经有了视频,您能否确认是否有实际上只从中下载音频流并降低带宽使用的命令?谢谢!

服务器可能允许您在下载时搜索。也就是说,如果下载链接是可搜索的,那为什么不呢。 - sashoalm
这个 YoutubeToMp3 应用程序是否使用 FFmpeg 作为后端?尝试捕获并查看它传递给 FFmpeg 的命令行参数。 - sashoalm
如果您使用JDownloader打开YouTube URL,它将为您提供多个下载选项,每个分辨率一个FLV文件,图片和MP3音频文件;) - Andrea Ligios
2个回答

24
经过大量研究,我发现这是不可能的,并开发了一种替代方法:
  1. 下载mp4文件头
  2. 解析头信息并获取音频字节的位置
  3. 使用http范围请求和偏移量下载音频字节
  4. 组装音频字节并将它们包裹在一个简单的ADTS容器中,生成可播放的m4a文件
这样只使用了音频字节的带宽。如果您找到更好的方法,请告诉我。
有关示例Android应用程序和实现,请查看: https://github.com/feribg/audiogetter/blob/master/audiogetter/src/main/java/com/github/feribg/audiogetter/tasks/download/VideoTask.java

有人知道youtube-dl或其他工具现在是否可以正确地完成这项任务吗? - Jon Nordby

3

FFmpeg能够接受URL作为输入。如果该URL可寻址,则理论上,FFmpeg可以跳过所有视频帧,因此它只需要下载音频流的数据。

尝试使用

ffmpeg -i http://myvideo.avi out.mp3

并查看是否需要更少的带宽。


开始工作后卡在以下位置: libavutil 51. 73.101 / 51. 73.101 libavcodec 54. 59.100 / 54. 59.100 libavformat 54. 29.104 / 54. 29.104 libavdevice 54. 2.101 / 54. 2.101 libavfilter 3. 17.100 / 3. 17.100 libswscale 2. 1.101 / 2. 1.101 libswresample 0. 15.100 / 0. 15.100 libpostproc 52. 0.100 / 52. 0.100 - Feras
这就是使用FFmpeg的方法。你问如何仅转换音频,就是这样。它应该可以工作,但当然可能会有错误。尝试在他们的邮件列表中报告错误或自行调试。 - sashoalm
这在YouTube上永远不会起作用。FFmpeg期望的输入是实际文件,而不是YouTube URL。这不是它要解析的内容。如果链接指向有效的视频流或文件,则应该可以工作,但是YouTube将视频嵌入为Flash,因此除非他们明确支持YouTube,否则FFmpeg无法解析。像youtube-dl这样的工具做得更好。 - slhck
1
当然,他需要解析HTML以获取实际内容URL,但有许多免费和开源工具可以做到这一点 - 例如youtube-dl.py。他可以重写它们,只打印出内容URL而不是下载它。此外,这只是与他的问题相关的次要问题,他问是否可以通过仅下载大型视频文件的音频流来节省带宽,他只是举了YouTubeToMp3作为执行此操作的工具的例子。 - sashoalm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接