C# ffmpeg 视频处理格式转换和添加水印

通过C#调用ffmpeg 将flv格式转换为mp4格式,并添加水印

C#调用ffmpeg的方法封装如下:

/// <summary>
/// 视频处理器ffmpeg.exe的位置
/// </summary>
public string FFmpegPath { get; set; }

/// <summary>
/// 调用ffmpeg.exe 执行命令
/// </summary>
/// <param name="Parameters">命令参数</param>
/// <returns>返回执行结果</returns>
private string RunProcess(string Parameters)
{
//创建一个ProcessStartInfo对象 并设置相关属性
var oInfo = new ProcessStartInfo(FFmpegPath, Parameters);
oInfo.UseShellExecute = false;
oInfo.CreateNoWindow = true;
oInfo.RedirectStandardOutput = true;
oInfo.RedirectStandardError = true;
oInfo.RedirectStandardInput = true;

//创建一个字符串和StreamReader 用来获取处理结果
string output = null;
StreamReader srOutput = null;

try
{
//调用ffmpeg开始处理命令
var proc = Process.Start(oInfo);

proc.WaitForExit();

//获取输出流
srOutput = proc.StandardError;

//转换成string
output = srOutput.ReadToEnd();

//关闭处理程序
proc.Close();
}
catch (Exception)
{
output = string.Empty;
}
finally
{
//释放资源
if (srOutput != null)
{
srOutput.Close();
srOutput.Dispose();
}
}
return output;
}

转换格式的命令参数:-i orignal.flv -y -b 1024k -acodec copy -f mp4 newFile.mp4

添加水印的命令参数:-i orignal.flv -i water.png -filter_complex \"overlay=10:10\" newFile.flv

参数简要说明和细节提示:

orignal.flv : 要处理的原始视频文件(最好是绝对路径)
-y : 覆盖已有文件(注意,加水印不可覆盖原始文件,否则只能生成1秒的视频)
-b:视频的码率 这里设置1024k 基本可满足无损处理 如不设置-b参数则默认为200k 视频会非常模糊
-acodec copy : 保持音频质量不变
-f mp4 : 表示转换的视频格式
 
-i water.png : 水印图片路径
overlay=10:10 : 水印距离视频的左上角坐标
其他位置参数:
右上角:main_w-overlay_w-10:10
左下角:10:main_h-overlay_h-10
右下角:main_w-overlay_w-10:main_h-overlay_h-10
 
newFile.mp4  要保存的文件路径

笔者尝试了各种命令的组合,发现对于不同版本的ffmpeg,有的参数是不能使用的,就笔者使用的2.8.2版本最终 找了一个比较好的解决方案:

可以选择使用以下命令参数:

//同时转换格式和加水印

-i orignal.flv -i water.png -filter_complex \"overlay=10:10\" -y -b 1024k -acodec copy -f mp4

//只加水印,不做格式转换

-i orignal.flv -i water.png -filter_complex \"overlay=10:10\" -b 1024k -acodec copy

总结:                                                          
C#调用ffmpeg时 不要使用proc.WaitForExit();方法,否则会假死

ffmpeg的版本最好使用最新版本,并参考命令参数说明

无损转换,无损加水印 要注意保证视频的码率 和音频的参数(直接copy,视频不能这样写-avcodec copy  会报错,只能用-b设置视频码率)

原文链接:https://blog.csdn.net/zhongjie112/article/details/50448327

原文地址:https://www.cnblogs.com/1175429393wljblog/p/11601817.html

时间: 2024-07-30 18:34:21

C# ffmpeg 视频处理格式转换和添加水印的相关文章

FFMPEG常用命令-格式转换-持续更新中

ffmpeg是一个强大的工具,在工作者各种格式转换,编码,提取视频中的帧需要用到,记录下工作中常用的一些ffmpeg命令,持续更新中... 将输入的infile视频文件通过avc编码成h264的视频流 ffmpeg -i infile.mp4 -an -vcodec libx264 -crf 23 outfile.h264 -i  input file     -an   disable audio    -vcodec 指定编码类型  -crf  采用cf的编码方式并设定level为23(CR

FFmpeg(10)-基于FFmpeg进行像素格式转换(sws_getCachedContext(), sws_scale())

一.包含头文件和库文件 像素格式的相关函数包含在 libswscale.so 库中,CMakeLists需要做下列改动: # swscale add_library(swscale SHARED IMPORTED) set_target_properties(swscale PROPERTIES IMPORTED_LOCATION ${FF}/libswscale.so) target_link_libraries target_link_libraries( # Specifies the t

.net 语音,视频等格式转换

最近在做微信公众号开发的时候遇到一个问题,就是微信接收到语音消息的格式为amr,在网页上通常不能直接播放,需要先转为mp3,于是找到了一个办法,使用ffmpeg.exe,网上可以搜一下ffmpeg.exe的使用方法,包括了各种语音.视频的转换,下面给出.net中amr转mp3的例子给大家参考,未做整理,直接copy项目中的代码,调用ConvertAmrToMp3方法,若要实现更多的转换请修改命令即可 /// <summary> /// 将Amr音频转成mp3 /// </summary&

腾讯视频qlv格式转换mp4普通视频方法

先到为的电脑里打开,点击"计算机"---"工具"---"文件夹选项"   找到"查看"--"隐藏文件夹",选择显示   腾讯视频,搜索你要的视频,等待他缓冲完成,点击右上角的"箭头"按钮,倒数第三个,然后选择设置   在"设置"中选择"下载设置",查看如下图所示的视频播放缓存记录存储位置,并通过电脑找到此目录.   从我的电脑进入目录后,按下图所示

史林枫:C#.NET利用ffmpeg操作视频实战(格式转换,加水印 一步到位)

ffmpeg.exe是大名鼎鼎的视频处理软件,以命令行参数形式运行.网上也有很多关于ffmpeg的资料介绍.但是在用C#做实际开发时,却遇到了几个问题及注意事项,比如如何无损处理视频?如何在转换格式的同时添加水印,以提升处理效率?,ffmpeg的版本应该选择什么版本?.今天史林峰将用实战的方式来探索C#操作ffmpeg的奥秘. 关于ffmpeg的使用及其参数命令,这里就不做过多介绍了.主要以项目实战中为主. 因工作需要,笔者手头有近300部短视频需要处理,在网上找了不少工具,虽然能用,但是用起来

ffmpeg视频格式转换中关键帧的设置

在用ffmpeg转换视频到flv过程中,需要设置关键帧的间隔,以便在播放过程中实现精确定位.在网上查找了不少,最后发现这个指令有效: -g 1 -keyint_min 2 . http://blog.csdn.net/windflow/article/details/6228088 还没试,要试试-- ffmpeg视频格式转换中关键帧的设置,布布扣,bubuko.com

C#使用FFmpeg 将视频格式转换成Gif图片示例

一.本次使用参数说明 /* * 参数说明: * -i 源文件位置 * -y 输出新文件,是否覆盖现有文件 * -s 视频比例 4:3 320x240/640x480/800x600 16:9 1280x720 ,默认值 'wxh',和原视频大小相同 * -f 等同'-formats',定义的可支持的文件格式'ffmpeg-formats',更多参考:https://ffmpeg.org/ffmpeg-formats.html * -vframes 数字类型,指定视频输出帧数 * -dframes

ffmpeg 音频视频格式转换

ffmpeg是Linux中转换音频视频文件的常用工具. mp4 to mp3: ffmpeg -i $ID.mp4 -acodec libmp3lame -ac 1 -ar 16000 $ID.mp3 ffmpeg -i $ID.mp4 -vn -ab 128k -ar 16000 -y $ID.mp3 -i: 表示输入的音频或视频 -ac: channel 设置通道3, 默认为1 -ar: sample rate 设置音频采样率 -acodec: 使用codec编解码 -ab: bitrate

FFmpeg基础库编程开发学习笔记——视频常见格式

声明一下:这些关于ffmpeg的文章仅仅是用于记录我的学习历程和以便于以后查阅,文章中的一些文字可能是直接摘自于其它文章.书籍或者文献,学习ffmpeg相关知识是为了使用在Android上,我也才是刚開始接触学习,如有不正确之处还请指出. 视频格式能够分为适合本地播放的本地影像视频和适合在网络中播放的网络流媒体影像视频两大类.虽然后者在播放的稳定性和播放画面质量上可能没有前者优秀.但网络流媒体影像视频的广泛传播性使之正被广泛应用于视频点播.网络演示.远程教育.网络视频广告等等互联网信息服务领域.