基于ffmpeg实现音视频转码

基于ffmpeg实现音视频转码

经验文章nimo972025-03-11 15:27:358A+A-

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间接引用):


    org.springframework.boot
    spring-boot-starter-thymeleaf
    2.1.2.RELEASE

传参:

request.setAttribute("yozoFile", url);

3.2 web端应用:

准备好前端模板,引用video标签进行播放音视频源,前端引freemark源www.thymeleaf.org ,模板如下:




  
  
  
  
  永中阅读器-音视频
  
  
    

  
  <script th:inline="javascript">
    window.onload=function(){
      window.videoFile = [[${yozoFile}]];
      var videoSrc = [[${yozoFile}]];//新的视频播放地址
      document.getElementById("video").src=videoSrc;
    };
  </script>

模板中用EL表达式接收后台参数,如播放源的地

window.videoFile = [[${yozoFile}]];

4、总结

以上内容只是简单介绍ffmpeg软件基本使用方法,想要集成到公司产品中还需要一定的前端、运维等相关知识等。

原文
https://juejin.cn/post/7051478621021536263

点击这里复制本文地址 以上内容由nimo97整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

尼墨宝库 © All Rights Reserved.  蜀ICP备2024111239号-7