通过windows的命令行使用VLC3.x从youtube转码和下载

xwbd5t1u  于 2021-08-25  发布在  Java
关注(0)|答案(0)|浏览(233)

我的程序的目的是从youtube下载视频和音频,并根据用户需要将它们转换成mp3/mp4文件。
我的程序是用java编写的,并使用 Runtime.getRuntime().exec(cmd); 用于向vlc应用程序启动命令。
这很好,但我不知道我应该使用什么样的vlc命令。
目前我正在使用 vlc [url] --sout=#transcode{vcodec=dummy,acodec=mpga,ab=128}:file{dst=[destination]} vlc://quit mp3文件和 vlc [url] --sout=#transcode{vcodec=h264,vb=512,acodec=mpga,ab=128,deinterlace}:standard{access=file,mux=mp4,dst=[destination]} vlc://quit 用于mp4文件的命令,其中 [url] 表示internet中的视频/音频位置,以及 [destination] 对于输出文件路径,而 vlc://quit 用于在下载视频/音频后退出vlc。
运行我的程序下载音频文件一切顺利,但运行它下载视频文件会产生错误的输出:
视频顺时针旋转90°;
并非所有视频都适用(为什么?!):文件中的视频仅在9秒后才显示(我注意到有时vlc从开始的9秒开始停止,并在一段时间后继续下载);
视频文件包含的音频流不是每个程序都能读取的(例如windows media player和电影电视windows应用程序无法读取)。
我从以下url下载了一段youtube视频作为我的程序示例:https://www.youtube.com/watch?v=nmwybdzmnpu 并将其发布在imgur上:https://imgur.com/a/7mpotn4.
守则:

String vlcPath = "C:\\Program Files\\VideoLAN\\VLC\\vlc.exe";
String quitVLC = "vlc://quit";

String url = "https://www.youtube.com/watch?v=NmwybdzmnPU";
String outputFolder = "C:\\Users\\[your user name]\\Desktop\\";  // Put here your Desktop folder path
String fileName = "YouTube";  // Your file name
String format = "";  // Choose ".mp3" or ".mp4"

String cmd = "";
if(format.equals(".mp3")) {
    cmd = String.format("\"%s\" \"%s\" --sout=#transcode{vcodec=dummy,acodec=mpga,ab=128}:file{dst=\"%s\"} %s", vlcPath, url, outputFolder + fileName + format, quitVLC);
} else if(format.equals(".mp4")) {
    cmd = String.format("\"%s\" \"%s\" --sout=#transcode{vcodec=h264,vb=512,acodec=mpga,ab=128,deinterlace}:standard{access=file,mux=mp4,dst=\"%s\"} %s", vlcPath, url, outputFolder + fileName + format, quitVLC);
}
System.out.println(cmd);

try {
    Runtime.getRuntime().exec(cmd);
} catch(IOException ex) {
    ex.printStackTrace();
}

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题