3

我想从 C# 中的视频 URL 生成缩略图。我进行了很多搜索以找到一种简洁的方法,但没有成功。我用过NrecoMediaToolKit但没有一个提取缩略图。使用 ffmpeg 也有 mumbo jumbos 没有用!

使用 NReco:

var ffMpeg = new NReco.VideoConverter.FFMpegConverter();
string thumbnailJPEGpath = "http://localhost:81882/content/hashem.jpeg";
ffMpeg.GetVideoThumbnail(videoUrl,thumbnailJPEGpath);

使用 ffmpeg:

try
        {
            System.Diagnostics.Process ffmpeg;

            string video;
            string thumb;

            video = Server.MapPath("~/Content/Movies/bye.mp4");
            thumb = Server.MapPath("~/Content/frame.jpg");

            ffmpeg = new System.Diagnostics.Process();

            ffmpeg.StartInfo.Arguments = " -i " + video + " -ss 00:00:07 -vframes 1 -f image2 -vcodec mjpeg " + thumb;
            ffmpeg.StartInfo.FileName = Server.MapPath("~/Content/ffmpeg.exe");
            ffmpeg.Start();
            ffmpeg.WaitForExit();
            ffmpeg.Close();
        }
        catch (Exception ex)
        {
            Response.Write("Error: " + ex.Message);
        }

考虑视频文件不是本地的,我只有一个文件的直接链接:例如:http://phytonord.com/Film-Series/hana/26.mp4

有没有人有任何解决方案?任何有效的示例代码?

4

3 回答 3

4

使用 NReco 创建视频缩略图:

我发现了我的问题:

1:我没有使用过Server.MapPath。我刚刚输入了relativePath。

2:视频文件不必是本地的,它可以托管在其他地方。NReco 只需下载所需的视频部分,然后提取缩略图。您的视频文件应位于本地服务器的 localHost 目录中。我的意思是,如果您的网站正在开发中并且视频文件在您的本地计算机文件夹中,它不会工作,因为 NReco 需要在 HTTP 响应头文件中支持字节范围。

不可接受的链接:“ http://localhost:81882/content/AVSEQ01.mp4

所以对于我的本地测试,我已将我的视频文件移动到本地 IIS 目录: ‪C:\inetpub\wwwroot\AVSEQ01.mp4

//sample remote video file
//string videoUrl = "http://phytonord.com/Film-Series/peik%20sahar/1.mp4";

 //local video file
string localVideoFile = "http://localhost/AVSEQ01.mp4"
var ffMpeg = new NReco.VideoConverter.FFMpegConverter();
string thumbnailJPEGpath = Server.MapPath("~/Content/videoThumb.jpg");
ffMpeg.GetVideoThumbnail(videoUrl, thumbnailJPEGpath);
于 2015-02-05T12:56:55.867 回答
0

我可以看到问题已经回答但没有写清楚,所以这是我的答案:首先下载DLL

ffMpeg.GetVideoThumbnail(inputFile,outputFile, frameTime);
// Summary:
    //     Extract video frame from local video file at specified position
    //
    // Parameters:
    //   inputFile:
    //     path to local video file
    //
    //   outputFile:
    //     path to thumbnail jpeg file
    //
    //   frameTime:
    //     video position (in seconds)

这就是我在项目中所做的

            var thumbNailMovieImage = PHYSICAL_PATH_UPLOAD_FILE + "/" + folder + "/thumb_" + filenameWithoutExtn + ".jpg";
            var ffMpeg = new FFMpegConverter();
            ffMpeg.GetVideoThumbnail(path, thumbNailMovieImage, 1);

现在运行此代码并检查创建缩略图文件的位置

于 2015-05-18T12:15:31.880 回答
0

以防万一,如果有人正在寻找使用 ffmpeg 或 NReco 库创建多个拇指图像提取以创建精灵图像。

使用命令行--> ffmpeg -i corpfilm.mp4 -s 280x150 -vf fps=1 thumb/img%03d.jpg

在引擎盖下NReco.VideoConverter使用 System.Diagnostics.Process API 执行 ffmpeg;这意味着您可以在命令行中运行任何可能的命令。

对于这个具体的命令 VideoConverter 的 API 等效:

var ffmpeg = new NReco.VideoConverter.FFMpegConverter();
ffmpeg.ConvertMedia(
  "corpfilm.mp4", null,
  " thumb/img%03d.jpg", null,
  new ConvertSettings() {
    CustomOutputArgs = " -s 280x150 -vf fps=1 "
  });
于 2022-02-08T07:44:51.833 回答