本帖最后由 wuxunjin 于 2019-1-21 21:04 编辑
优酷下载的视频都是Kux格式只能用优酷客户端才能播放,
有些会员的或版权的客客户端也没法转成mp4
因要收藏些视频又不想用优酷格式收藏便写了这个小工具
第一次发帖,不知道有没有发错地方
由于技术有限,这个工具如果转换完一次后软件必须重启才能再次转换了
下面我就贴出代码:
[C#] 纯文本查看 复制代码
public class Cmd
{
private Process proc = null;
/// <summary>
/// 构造方法
/// </summary>
public Cmd()
{
proc = new Process();
}
public String RunCmd (string cmd)
{
try
{
proc.StartInfo.CreateNoWindow = true;
proc.StartInfo.FileName = "ffmpeg.exe";
proc.StartInfo.Arguments = cmd;
proc.StartInfo.UseShellExecute = false;//是否使用操作系统shell启动
proc.StartInfo.RedirectStandardError = true;//重定向标准错误输出
proc.StartInfo.RedirectStandardInput = true;//接受来自调用程序的输入信息
proc.StartInfo.RedirectStandardOutput = true;//由调用程序获取输出信息
proc.Start();//启动程序
proc.BeginErrorReadLine();//开始异步读取
proc.StandardInput.AutoFlush = true;
string outStr = proc.StandardOutput.ReadToEnd();//获取cmd窗口的输出信息
proc.WaitForExit();//等待程序执行完退出进程
proc.Close();//关闭关闭进程
proc.Dispose();//释放资源
return outStr;
}
catch (Exception e)
{
return e.ToString();
}
}
}
[C#] 纯文本查看 复制代码
Cmd c = new Cmd();
private void Button1_Click(object sender, EventArgs e)
{
//列表为空不运行
if (listView.Items.Count > 0)
{
string cmd = "", path = null;
for (int i = 0; i < listView.Items.Count; i++)
{
path = listView.Items[i].SubItems[1].Text.Replace(".kux", "");
if (this.outPath == null)
{
this.outPath = path;
}
//合并ffmpeg命令
cmd += " -y -i \"" + listView.Items[i].SubItems[1].Text + "\" -c:v copy -c:a copy -threads 2 \"" + this.outPath + ".mp4\"";
}
c.RunCmd(cmd);
MessageBox.Show("视频转换已完成!");
//textBox1.Text = c.RunCmd(textBox2.Text.Trim());
}
}
完整程序下载:
https://pan.baidu.com/s/1noSdQEDxGAAyeqr58WQmXw
完整源码:
https://pan.baidu.com/s/1z6cmRGgQaRXOmhG-_O6cJg
经各位反映和我自行多视频试得出的结果是:
[C#] 纯文本查看 复制代码
//开始转换
private void Button1_Click(object sender, EventArgs e)
{
//列表为空不运行
if (listView.Items.Count > 0)
{
for (int i = 0; i < listView.Items.Count; i++)
{
c.RunCmd(" -y -i \"" + listView.Items[i].SubItems[1].Text + "\" -c:v copy -c:a copy -threads 2 \"" + listView.Items[i].SubItems[1].Text.Replace(".kux", "") + ".mp4\"");
}
//textStatus.Text = "正在整合合命令……";
//progressBar.Value += i / 100;
//合并ffmpeg命令
//cmd += " -y -i \"" + listView.Items[i].SubItems[1].Text + "\" -c:v copy -c:a copy -threads 2 \"" + listView.Items[i].SubItems[1].Text.Replace(".kux", "") + ".mp4\"";
//c.RunCmd(" -y -i \"" + listView.Items[i].SubItems[1].Text + "\" -c:v copy -c:a copy -threads 2 \"" + listView.Items[i].SubItems[1].Text.Replace(".kux", "") + ".mp4\"");
//c.RunCmd(cmd);
progressBar.Value = 100;
textStatus.Text = "完成!";
MessageBox.Show("视频转换已完成!");
//textBox1.Text = c.RunCmd(textBox2.Text.Trim());
}
}
用这段(即按键1)代码替换掉原来的就能批量转换了,但是不建议一次转太多(10个以内吧)
然后,只看到第一个马上成功下面的还是0kb这时把软件关闭等待自行完成!
我在网上找了这问题有大神说是.net底层问题,据体什么问题我也不清楚
还望各位继续完善,谢谢!
|