如何转换视频在多个比特率使用asp.net
本文关键字:比特率 net asp 何转换 转换 视频 | 更新日期: 2023-09-27 18:16:39
我想用不同的比特率播放一个视频。就像我上传了一个1080P分辨率的视频,我想播放720P、480P、360P、240P、144P等分辨率的视频。我想用c#在asp.net中实现这个解决方案。
像youtube一样提供观看不同分辨率视频的功能。
请帮我解决这个问题。
我尝试了以下代码,但不工作:
using Softpae.Media;
namespace ConsoleTest
{
class Program
{
static void Main(string[] args)
{
Job2Convert myJob = new Job2Convert();
MediaServer ms = new MediaServer();
myJob.pszSrcFile = "E:''EhabVideoLibrary''videos''sinbad.mkv";
myJob.pszDstFile = "E:''EhabVideoLibrary''videos''sinbad.mp4";
myJob.pszDstFormat = "mp4";
myJob.pszAudioCodec = "aac";
myJob.nAudioChannels = 2;
myJob.nAudioBitrate = -1;
myJob.nAudioRate = -1;
myJob.pszVideoCodec = "h264";
myJob.nVideoBitrate = -1;
myJob.nVideoFrameRate = -1;
myJob.nVideoFrameWidth = -1;
myJob.nVideoFrameHeight = -1;
bool ret = ms.ConvertFile(myJob);
}
}
}
可以使用FFmpeg项目的FFplay。有了FFmpeg,几乎所有编解码器都可以按照你想要的分辨率进行编码和转码。在这个线程中使用的是一个使用c#的命令行应用程序。
我从来没有尝试过,但是也有像这样使用FFmpeg为。net提供的库:
- ffmpegdotnet.codeplex.com
- intuitive.sk/fflib
成功与它!
下面是一个使用ffmpeg的示例代码(我在Win7 VM下测试了它):
using System;
namespace ConsoleApplication_FFmpegDemo
{
class Program
{
static void Main(string[] args)
{
string inputVideo = @"C:'Users'Public'Videos'Sample Videos'Wildlife.wmv";
string outputVideo = @"C:'Users'Public'Videos'Sample Videos'Wildlife.mp4";
string ffmpegArg = string.Format("-i '"{0}'" -vf scale=320:240 '"{1}'"", inputVideo, outputVideo);
string ffmpegPath = @"C:'Portable'ffmpeg-win32-static'bin'ffmpeg.exe";
FFmpegTask ffmpegTask = new FFmpegTask(ffmpegPath, ffmpegArg);
ffmpegTask.Start();
Console.ReadLine();
}
}
}
和FFmpegTask
.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;
using System.IO;
namespace ConsoleApplication_FFmpegDemo
{
public class FFmpegTask
{
public Process process = new Process();
public FFmpegTask(string ffmpegPath, string arguments)
{
process.StartInfo.FileName = ffmpegPath;
process.StartInfo.Arguments = arguments;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.CreateNoWindow = false;
process.StartInfo.UseShellExecute = false;
}
public bool Start()
{
return process.Start();
}
}
}