通过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

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

  1. C# ffmpeg 视频处理格式转换具体案例

    C# ffmpeg 视频处理格式转换 C# ffmpeg 视频处理格式转换avi到MP4格式 1.代码如下: using System;using System.Diagnostics; namesp ...

  2. 腾讯视频QLV格式转换mp4的方法

    腾讯视频QLV格式转换mp4的方法不知道大家知不知道用?喜欢用腾讯视频的朋友应该都知道腾讯视频单独搞出了个QLV格式文件,只能用腾讯独有的腾讯视频软件才能播放,就算用格式工厂转换也不行,那么腾讯视频的 ...

  3. FFMpeg 常用命令格式转换,视频合成

    FFmpeg都是命令行的,用起来肯定不方便.但是,这对技术宅应该不成问题.下面,我就罗列一些比较实用的使用方法吧. FFmpeg的下载与安装 FFmpeg是开源的.但我们不必去下载它的源代码.下载已经 ...

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

    最近在做微信公众号开发的时候遇到一个问题,就是微信接收到语音消息的格式为amr,在网页上通常不能直接播放,需要先转为mp3,于是找到了一个办法,使用ffmpeg.exe,网上可以搜一下ffmpeg.e ...

  5. 腾讯视频qlv格式转换MP4普通视频方法

    QLV格式视频不是那么好对付的,似乎是一种加密格式,试着把.qlv改成.mp4或.flv都没有用,用格式工厂等转换软件转换也根本无法识别.但这并不意味着没有办法,其实真正的方法是不用任何工具: 1,我 ...

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

    ffmpeg.exe是大名鼎鼎的视频处理软件,以命令行参数形式运行.网上也有很多关于ffmpeg的资料介绍.但是在用C#做实际开发时,却遇到了几个问题及注意事项,比如如何无损处理视频?如何在转换格式的 ...

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

    根据EFmpeg封装的视频转换gif工具:https://my.oschina.net/tianma3798/blog/825317 一.本次使用参数说明 /* * 参数说明: * -i 源文件位置 ...

  8. Unity 利用FFmpeg实现录屏、直播推流、音频视频格式转换、剪裁等功能

    目录 一.FFmpeg简介. 二.FFmpeg常用参数及命令. 三.FFmpeg在Unity 3D中的使用. 1.FFmpeg 录屏. 2.FFmpeg 推流. 3.FFmpeg 其他功能简述. 一. ...

  9. FFmpeg(10)-利用FFmpeg进行视频像素格式和尺寸的转换(sws_getCachedContext(), sws_scale())

    一.包含头文件和库文件 像素格式的相关函数包含在 libswscale.so 库中,CMakeLists需要做下列改动: # swscale add_library(swscale SHARED IM ...

随机推荐

  1. MySQL Backup--Xtrabackup备份异常(MySQL Server has gone away)

    错误场景MySQL 版本:5.7.24XtraBackup 版本:2.4.8CentOS 版本:6.5 MySQL需要新增一个从库,为避免XtraBackup备份影响生产,选择在从库上进行备份,备份脚 ...

  2. IDEA设置项目文件自动Add到Svn/Git

    1)配置自动Add 2)将未添加的文件添加到本地 3)取消已经添加的文件

  3. LInux-命令在后台运行

    在终端运行一个持续很久的命令,一旦开始运行这个终端就会等待命令结束,才能输入下个指令,所以可以让这种指令放到后台运行,终端可以继续执行新指令. 后台运行 这种命令要满足1.要运行一段时间2.不需要与用 ...

  4. SQL SERVER-查询存储运行状态

    SELECT p.name as SPName, qs.last_elapsed_time as [LastExecTime(ms)], (total_elapsed_time as [AvgExec ...

  5. CentOS7.x-lnmp环境下安装Discuz论坛

    1.安装lnmp.这里采用一键安装的包 yum -y install wget wget http://soft.vpser.net/lnmp/lnmp1.6-full.tar.gz 2.加压安装ln ...

  6. stdClass 标准

    在WordPress中很多地方使用stdClass来定义一个对象(而通常是用数组的方式),然后使用get_object_vars来把定义的对象『转换』成数组. 如下代码所示: $tanteng = n ...

  7. php 加密

    PHP 自带的加密解密函数 目前经常使用的加密函数有:md5(), sha1(), crypt(), base64_encode(), urlencode() .其中 md5(), sha1(), c ...

  8. [ipsec][strongswan] strongswan源码分析--(五)plugin的配置文件的添加方法与管理架构解析

    前言 我们知道,strongswan是基于插件式管理的.不同的插件有不同的配置文件,在这下面, 我们以netlink的插件为例:etc/strongswan.d/charon/kernel-netli ...

  9. ISCC之Re1

    IDA打开,调试选ELF,跟踪main函数 发现有一个not_the_flag函数,跟进去 这里判断了一下a1的值是否为42,大致判断引号里面的有可能是flag,直接放到Linux下运行 提交不要有任 ...

  10. Ffmpeg常用转码命令

    H264视频转ts视频流 ffmpeg -i test.h264 -vcodec copy -f mpegts test.ts H264视频转mp4 ffmpeg -i test.h264 -vcod ...