You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过yt-dlp结合Java代码获取YouTube视频/音频的直接下载链接

如何通过yt-dlp结合Java代码获取YouTube视频/音频的直接下载链接

嘿,我来帮你搞定这个需求!你当前的Java代码是调用yt-dlp直接把视频下载到选定目录,要改成获取能直接在浏览器打开的下载链接其实很简单,只需要调整yt-dlp的命令参数,再修改下代码里的输出处理逻辑就行。

核心思路

yt-dlp自带一个-g(或者--get-url)参数,专门用来提取视频/音频的直接下载URL,而不是执行下载操作。我们只需要把原来的下载命令换成带这个参数的命令,然后捕获yt-dlp输出的链接就行。

修改后的完整代码

package com.chillyfacts.com;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;

import javafx.application.Application;
import javafx.stage.Stage;

public class my_main extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        String dlp = "D:\\youtube_db_java\\yt-dlp ";
        String url = "https://www.youtube.com/watch?v=BaW_jenozKc";
        
        String[] command = {
            "cmd",
        };

        Process p;
        try {
            p = Runtime.getRuntime().exec(command);
            // 处理错误流,避免进程阻塞
            new Thread(new SyncPipe(p.getErrorStream(), System.err)).start();
            
            PrintWriter stdin = new PrintWriter(p.getOutputStream());
            // 不需要切换目录了,直接执行提取链接的命令
            stdin.println(dlp + url + " -f best/bestvideo+bestaudio -g");
            stdin.close();

            // 读取yt-dlp输出的下载链接
            BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
            String line;
            System.out.println("获取到的直接下载链接:");
            while ((line = reader.readLine()) != null) {
                // 打印链接,复制到浏览器即可下载
                System.out.println(line);
            }
            reader.close();
            
            p.waitFor();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

关键修改点说明

  • 移除了DirectoryChooser相关代码:因为我们不再需要下载到本地目录,所以不需要选择目录了
  • 替换yt-dlp命令:把原来的下载命令改成dlp + url + " -f best/bestvideo+bestaudio -g",其中-g就是提取下载链接的核心参数
  • 添加链接读取逻辑:通过BufferedReader读取yt-dlp的输出流,把打印出来的链接复制到浏览器,就能触发下载提示

额外提示

  • 如果只想获取音频的下载链接,可以把-f参数改成bestaudio,也就是命令变成dlp + url + " -f bestaudio -g"
  • 如果只想获取视频的下载链接,改成-f bestvideo即可
  • 要是需要指定特定格式(比如MP4视频+MP3音频),可以用yt-dlp的格式代码,比如-f mp4+mp3,具体格式代码可以用yt-dlp -F <URL>命令查看

备注:内容来源于stack exchange,提问作者Majed

火山引擎 最新活动