我正在使用.net ffmpeg 包装器在视频上发布水印。如果我直接执行 ffmpeg 命令,但如果通过 asp.net 应用程序执行命令,则无法找到合适的水印 png 文件位置,则发布水印工作正常。
这是示例 ffmpeg 命令
string RootPath = HttpContext.Current.Server.MapPath(HttpContext.Current.Request.ApplicationPath);
_mhandler.FFMPEGPath = RootPath + "/ffmpeg_aug_2013/bin/ffmpeg.exe";
_mhandler.InputPath = RootPath + "/contents/original";
_mhandler.OutputPath = RootPath + "/contents/mp4";
_mhandler.BackgroundProcessing = false;
_mhandler.FileName = "wildlife.wmv";
_mhandler.OutputFileName = "wildlife_ddd";
string presetpath = RootPath + "/ffmpeg_aug_2013/presets/libx264-ipod640.ffpreset";
_mhandler.OutputExtension = ".mp4";
_mhandler.Parameters = "-s 640x380 -b:v 500k -bufsize 500k -b:a 128k -ar 44100 -c:v libx264 -vf \"movie = watermark.png [watermark]; [in][watermark] overlay=main_w-overlay_w-10:main_h-overlay_h-10 [out]\"";
_mhandler.Parameters = _mhandler.Parameters + " -fpre \"" + presetpath + "\"";
VideoInfo info = _mhandler.Process();
我也试过直接代码
string _out = "";
Process _process = new Process();
_process.StartInfo.UseShellExecute = false;
_process.StartInfo.RedirectStandardInput = true;
//_process.StartInfo.RedirectStandardOutput = true;
_process.StartInfo.RedirectStandardError = true;
_process.StartInfo.CreateNoWindow = true;
_process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
_process.StartInfo.FileName = _ffmpegpath;
_process.StartInfo.Arguments = cmd;
if (_process.Start())
{
_process.WaitForExit(ExitProcess);
_out = _process.StandardError.ReadToEnd();
if (!_process.HasExited)
_process.Kill();
return _out;
}
ffmpeg 错误输出为
100 libavcodec 55. 29.100 / 55. 29.100 libavformat 55. 14.102 / 55. 14.102 libavdevice 55. 3.100 / 55. 3.100 libavfilter 3. 82.102 / 3. 82.102 libswscale 2. 5.100 / 2. 5.100 libswresample 0. 17.103 / 0. 17.103 libpostproc 52. 3.100 / 52. 3.100 [asf @ 024c9960] 流#0:没有足够的帧来估计速率;考虑增加输入流的probesize Guessed Channel Layout
0.0:立体声输入 #0,asf,来自 'F:\own\mhp_new/contents/original\wildlife.wmv':元数据:
SfOriginalFPS:299700 WMFSDKVersion:11.0.6001.7000 WMFSDKNeeded:0.0.0.0000 评论:素材:Small World Productions, Inc; 新西兰旅游局 | 制片人:Gary F. Spradling | 音乐:Steve Ball 标题:Wildlife in HD 版权所有:© 2008 Microsoft Corporation IsVBR:0 DeviceConformanceTemplate:AP@L3 持续时间:00:00:30.09,开始:0.000000,比特率:6977 kb/s Stream #0:0(eng) : 音频: wmav2 (a 1 [0][0] / 0x0161), 44100 Hz, 立体声, fltp, 192 kb/s Stream
0:1(eng):视频:vc1(高级)(WVC1 / 0x31435657)、yuv420p、1280x720、5942 kb/s、29.97 tbr、1k tbn、1k tbc [image2 @ 024c76e0]
找不到路径为 'watermark.png' 且索引在 0-4 范围内的文件 [Parsed_movie_0 @ 024c0540] avformat_open_input 'watermark.png' [AVFilterGraph @ 024ca100] 使用 args 'watermark.png' 初始化过滤器'movie' 时出错打开过滤器时出错!错误代码= 0
点错误(找不到路径为 'watermark.png' 的文件)显示 watermark.png 文件未找到。我将 watermark.png 文件放在以下位置但仍然找不到
i: 应用程序根
ii: 实际 aspx 页面所在的根目录
三:ffmpeg根
四:ffmpeg/bin/
我也使用了完整路径,但仍然无法检测到。
注意:如果我在 php 中使用相同的 ffmpeg 命令并将 watermark.png 放置在实际 php 页面存在的位置,水印被正确检测到并且命令正确执行,但同样的方法在 asp.net 中不起作用
谁能帮我把 watermark.png 文件放在哪里,以便脚本可以访问它。