16

我知道有一百万种方法可以从 youtube 下载视频,然后将其转换为音频或对其进行进一步处理。但最近我很惊讶地看到 mac 上一个名为 YoutubeToMp3 的应用程序实际上显示“跳过 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

我试过了

ffmpeg -i "输入" out.mp3

ffmpeg -i "输入" -vn out.mp3

ffmpeg -i “输入” -vn -ac 2 -ar 44100 -ab 320k -f mp3 output.mp3

ffmpeg -i “输入” -vn -acodec 复制输出.mp3

不幸的是,这些命令似乎都没有使用较少的带宽。他们都下载了整个视频。既然你有了视频,你能确认是否真的有一个命令只从视频中下载音频流并降低带宽使用?谢谢!

4

2 回答 2

24

经过大量研究后,我发现这是不可能的,并开发了一种替代方法:

  1. 下载 mp4 头文件
  2. 解析标头并获取音频字节的位置
  3. 下载带有 http 范围请求和偏移量的音频字节
  4. 组装音频字节并将它们包装在一个简单的 ADTS 容器中以生成一个正在播放的 m4a 文件

这样,仅使用音频字节的带宽。如果您找到更好的方法,请告诉我。

有关示例 Android APP 和实现,请查看:

https://github.com/feribg/audiogetter/blob/master/audiogetter/src/main/java/com/github/feribg/audiogetter/tasks/download/VideoTask.java

于 2014-05-03T21:35:18.763 回答
2

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

尝试使用

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

看看它是否需要更少的带宽。

于 2013-03-06T07:44:20.510 回答