网站首页 > 技术文章 正文
1、背景
在偶然的机会接触了ffmpeg,当时是从B站下载的视频转移到笔记本上看。使用b站手机客户端下载的视频格式为m4s的两个文件(video.m4s和audio.m4s),需要转成普通播放器支持的mp4格式,得以知道支持音视频转码的ffmpeg这个强大的开源工具。
2、软件介绍
ffmpeg支持windows、linux和mac,安装简单,使用方便。
2.1 Windows:
官网ffmpeg.org/ 下载,官网只提供源码,初次学习可以从github下载编译后的可执行文件github.com/BtbN/FFmpeg… ,下载后解压即可使用,目录结果如下:
bin目录下是可执行文件:
2.2 ffmpeg:
ffmepeg用于音视频转码,文档地址:ffmpeg.org/ffmpeg.html
进入bin目录执行ffmpeg检验是否安装成功,如下图:
将音频视频合并输出到mp4,使用ffmpeg,指令:
ffmpeg -i video.m4s -i audio.m4s -c:v copy -strict experimental 输出名.mp4
ffmpeg主要是通过命令操作,如获取视频信息:
ffmpeg -i video.avi
音频格式转MP3:
ffmpeg -v error -i input output.mp3
2.3 ffplay:
ffplay用来音视频播放,文档地址:ffmpeg.org/ffplay.html
ffplay.exe test.mp4
复制代码
弹出播放窗口,如下图
相关学习资料推荐,点击下方链接免费报名,先码住不迷路~】
音视频免费学习地址:
FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发【免费分享】音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击788280672加群免费领取~
2.4 ffprobe:
ffprobe主要用来查看多媒体文件的信息,文档地址:ffmpeg.org/ffprobe.htm…
ffprobe.exe test.mp4
获取音视频总体信息: 播放时长20.35s,从0秒开始,速率为6322kb/s
部分参数:
-v 日志级别(取值:error、warning、info等)
-pint_format 输出格式(取值:defalut、csv、json、xml等)
2.5 linux:
Linux使用规则跟windows类似,以下介绍下linux环境下安装步骤:
1.安装Nux Dextop Yum 源
由于CentOS没有官方FFmpeg rpm软件包。但是,我们可以使用第三方YUM源(Nux Dextop)完成此工作。
2.6 CentOS 7
sudo rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
可能出现问题:
(1)缺少依赖
处理方法:
rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
(2)执行命令报错,状态码127
处理方法: 共享软件的共享库
- 执行命令vim /etc/ld.so.conf.d/ffmpeg.conf
- 然后添加内容ffmpeg下的lib路径(如/root/ffmpeg/lib),之后保存并退出
- 然后执行ldconfig使配置生效即可
2.7 CentOS 6
sudo rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el6/x86_64/nux-dextop-release-0-2.el6.nux.noarch.rpm
2.安装FFmpeg 和 FFmpeg开发包
sudo yum install ffmpeg ffmpeg-devel -y
3、应用示例
3.1 Java示例
windows环境运行批处理命令的方式,linux环境执行shell脚本:
import org.apache.commons.exec.CommandLine;
import org.apache.commons.exec.DefaultExecutor;
public static void main(String[] args) throws Exception {
String batPath = "F:\ffmpeg\22e12ea6a66141668d2391d5a6d30b76.bat";
DefaultExecutor executor = new DefaultExecutor();
CommandLine line = new CommandLine(batPath);
executor.execute(line);
}
bat文件内容(即需运行的命令):
E:\ffmpeg\bin\ffmpeg.exe -v error -i "F:\音频\1.aac" "F:\音频\\ffmpeg\1.mp3"
前后端交互可通过freemark模板引擎来支持,需后台引freemark的jar包(通过springboot间接引用):
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
<version>2.1.2.RELEASE</version>
</dependency>
传参:
request.setAttribute("yozoFile", url);
3.2 web端应用:
准备好前端模板,引用video标签进行播放音视频源,前端引freemark源www.thymeleaf.org ,模板如下:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" dir="ltr" mozdisallowselectionprint>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=yes">
<meta name="google" content="notranslate">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>永中阅读器-音视频</title>
</head>
<body>
<video id="video" height="835" width="100%">
<source id="video_path" src="" type="video/mp4" />
</video>
</body>
<script th:inline="javascript">
window.onload=function(){
window.videoFile = [[${yozoFile}]];
var videoSrc = [[${yozoFile}]];//新的视频播放地址
document.getElementById("video").src=videoSrc;
};
</script>
</html>
模板中用EL表达式接收后台参数,如播放源的地
window.videoFile = [[${yozoFile}]];
4、总结
以上内容只是简单介绍ffmpeg软件基本使用方法,想要集成到公司产品中还需要一定的前端、运维等相关知识等。
原文
https://juejin.cn/post/7051478621021536263
猜你喜欢
- 2025-05-10 19年前司机被沉尸水库!凶手落网,竟已是身家千万的大老板
- 2025-05-10 常见跨域解决方案(一)(解决跨域的几种方法)
- 2025-05-10 生态文明建设四年巡礼 〉浦城:“三大创新”集成叠加 绿色发展再开新局
- 2025-05-10 福建推进河(湖)长制工作:当好“施工队长”建设八闽幸福河湖
- 2025-05-10 满意在三明 | 三明站附近变美啦,你发现了吗
- 2025-05-10 前端使用FileReader 读取本地文件和校验文件唯一
- 2025-05-10 这是一道“送命题”...辅导孩子写作业,45岁男子被气出脑出血
- 2025-05-10 深入理解Android NDK日志符号化(android日志在什么位置)
- 2025-05-10 中年大叔学编程-微信小程序展示金山词霸每日一句
- 2025-05-10 JavaScript精通到深入(javascript编程精解)
- 最近发表
- 标签列表
-
- cmd/c (64)
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- sqlset (64)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- js数组插入 (83)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)