ffplay flv mp4 转_利用 FFmpeg 将 MP4 转成 FLV
最近做一个小项目,要在线播放录制的 MP4 视频,想开源的 flash player 或 html 5 可以播放。可,虽然 MP4 是 H.264 编码,但就是播放不了。可能是封装方式(PS 方式)不一样吧。由于录制用的第三方设备,不能修改参数,只能自己使用工具转码了。
FFmpeg
网上一搜索,就找到了大名鼎鼎的 FFmpeg ,好像 google 的 youtube 后台也是用的这个转码,国内的很多视频播放器核心也是这个。有了这个实现起来就非常简单了。FFmpeg 转码时占用 CPU 很高,可以到 100%,也不知道该怎么解决此问题。转码只要一条指令就行了:
ffmpeg.exe -i source.mp4 -c:v libx264 -crf 24 destination.flv
这是最简单的设置,更多可以去官网看详细的参数,其中 -crf 很重要,是控制转码后视频的质量,质量越高,文件也就越大。
The range of the quantizer scale is 0-51: where 0 is lossless, 23 is default, and 51 is worst possible. A lower value is a higher quality and a subjectively sane range is 18-28. Consider 18 to be visually lossless or nearly so: it should look the same or nearly the same as the input but it isn't technically lossless.
官网的解释(翻译):
此值的范围是 0 到 51:0 表示高清无损;23 是默认值(如果没有指定此参数);51 虽然文件最小,但效果是最差的。
值越小,质量越高,但文件也越大,建议的值范围是 18 到 28。而值 18 是视觉上看起来无损或接近无损的,当然不代表是数据(技术上)的转码无损。
Coding:
实现起来也是很简单,只要使用 Processs 后台转码就行,请看 FfmpegHelper:
1 usingSystem;2 usingSystem.Configuration;3 usingSystem.IO;4 //referencehttps://github.com/LeafDuan/WebPrint/tree/master/WebPrint.Framework
5 usingWebPrint.Framework;6 //referencehttps://github.com/LeafDuan/WebPrint/tree/master/WebPrint.Logging
7 usingWebPrint.Logging;8
9 namespaceWebPrint.CameraServer.Helper10 {11 public classFfmpegHelper12 {13 private static readonly ILogger Logger = LoggerHelper.GetLogger(typeof(FfmpegHelper));14
15 private static stringFfmpeg16 {17 get { return ConfigurationManager.AppSettings["ffmepg"]; }18 }19
20 private static stringArgs21 {22 get { return ConfigurationManager.AppSettings["args"]; }23 }24
25 private static stringFlvPath26 {27 get { return ConfigurationManager.AppSettings["flv"]; }28 }29
30 public static string DecodeMp4ToFlv(string mp4, int timeout = 0)31 {32 var ffmpeg = "\"{0}\"".Formatting(Ffmpeg);33 var flv = Path.Combine(FlvPath, (Path.GetFileNameWithoutExtension(mp4) ?? string.Empty) + ".flv");34 var args = Args.Formatting("\"{0}\"".Formatting(mp4), "\"{0}\"".Formatting(flv));35 stringoutput, error;36 if (timeout <= 0)37 timeout = 5*60*1000; //timeout = 5 minutes
38 ProcessHelper.Process(ffmpeg, args, timeout, out output, outerror);39 if (!error.IsNullOrEmpty())40 {41 Logger.Error("{0}{1} : {2}{0}".Formatting(Environment.NewLine, "FFmpeg", error));42 }43
44 returnflv;45 }46 }47 }
View Code
倒是其中 Process 的实现需要技巧,尤其是针对 output、error 和 timeout 的处理。如果不使用 AutoResetEvent ,process 很容易卡死在 error output 上(IO blocked)。其中针对超时,做了一个处理,就是 kill 掉 process ,免得引起资源霸占和泄露(过多 ffmpeg 进程)。
附:Flash 推荐
可以转码成 html 5 支持的 H.264,也可以其他格式,如 flv。为了兼容 IE6 及以上浏览器,只能使用 flash 播放的方式了。使用的是开源的 vcastr22.swf,可能由于开源,项目现在没有人维护了。
最后吐槽一句:盼 IE9 以下的版本早日寿终正寝。为了随窗口以 16:9 的尺寸自动缩放,兼容 IE6、7 的 css 和 js 是写得累死了。因为非专业前端,找资料都累死了。
感谢
感谢 @eflay 的解决思路,“通过转封装的方式,以复制的效率实现MP4转FLV”。本人不是很懂这些视频的编码,因此没有想到这么好的解决方式。
ffplay flv mp4 转_利用 FFmpeg 将 MP4 转成 FLV相关推荐
- 利用ffmpeg将m3u8下载成mp4(利用ps1脚本解析json批量下载)
利用ffmpeg将m3u8下载成mp4 安装ffmpeg JSON文件示例(自行抓取m3u8) powershell脚本 打开powershell运行 安装ffmpeg 自行baidu JSON文件示 ...
- java利用FFMpeg将mp4转换为gif
网上和官方资料整合 存在问题,在不丢帧的情况下转换后的gif会比原始mp4文件大很多. package jinx; import java.io.BufferedReader; import java ...
- 使用jsmpegjs前,先把利用 ffmpeg 将 MP4 格式的文件转换为 ts 格式
利用 ffmpeg 将 MP4 格式的文件转换为 TS 格式 ffmpeg官网:http://ffmpeg.org/download.html ffmpeg下载地址: https://github.c ...
- 利用ffmpeg 把.mp4转换为.flv
1. 下载安装 ffmpeg Download FFmpeg windows下载编译之后的exe文件,放到path环境变量中. Linux 下 tar xvf xxx.tar.bz2 ./config ...
- ffmpeg实现摄像头拉流_利用ffmpeg一步一步编程实现摄像头采集编码推流直播系统...
了解过ffmpeg的人都知道,利用ffmpeg命令即可实现将电脑中摄像头的画面发布出去,例如发布为UDP,RTP,RTMP等,甚至可以发布为HLS,将m3u8文件和视频ts片段保存至Web服务器,普通 ...
- ffmpeg 切片花屏_利用ffmpeg解码H264,花屏,该如何解决
利用ffmpeg解码H264,花屏 UINT CMP4File::VideoCap_Thread_Fun(void* pParam) { CMP4File *pMP4File=(CMP4File*) ...
- 利用ffmpeg将mp4视频转换成多张jpg图片
分离视频音频流 ffmpeg -i input_file -vcodec copy -an output_file_video //分离视频流 ffmpeg -i input_file -acodec ...
- python读取图片文字为表格_利用python将图片转换成excel文档格式
前言 本文主要介绍了关于利用python将图片转换成excel文档的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 实现步骤 读取图像,获取图像每个像素点的RGB值: 根据 ...
- python将excel转换成图片格式_利用python将图片转换成excel文档格式
前言 本文主要介绍了关于利用python将图片转换成excel文档的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 实现步骤 读取图像,获取图像每个像素点的RGB值: 根据 ...
最新文章
- 用栈实现形如a+bb+a@的中心对称字符的检验
- Orleans解决并发之痛(四):Streams
- 基于结构体的二进制文件读写
- lt;++mysql_php+js+mysql设计的仿webQQ-lt;1gt;邮箱验证
- 实战:Docker容器虚拟化技术(使用DockerFile构建镜像并搭建 swarm+compose集群)5
- 关于 Flutter Layout(转载)
- html整体移动,html 可以拖动多个div
- 体验 Vista Speech Recognition,使梦想成为可能
- poj 3678 Katu Puzzle 2-SAT
- idea创建maven工程_maven创建父子工程 springboot自动配置
- 安卓模拟器刷小米系统_小米5x原生rom系统刷机-小米5X MIUI10刷机包下载V9.7.21最新版-西西软件下载...
- Java Swing Mysql学生签到考勤系统
- 复旦退休教授直播间吸烟被举报:此前因违规吸烟被学校要求做检讨
- t3服务器一登录就运行时错误,用友T3软件登陆系统管理提示运行时错误3709
- dz3 php post 登录,discuz X3用户登录uc_user_login()函数详解
- 雷达原理 知识点汇总
- 读《蔡康永的说话之道》
- 你为什么始终做不好会议营销?「会议营销」电子书免费下载
- 好书推荐——从零开始学习 Julia 编程、数学和数据科学。
- 网站建设-简单动态网站搭建