我的程序的目的是从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();
}
暂无答案!
目前还没有任何答案,快来回答吧!