前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >FFmpeg常见的音视频处理方法

FFmpeg常见的音视频处理方法

原创
作者头像
cohen
修改2020-12-28 10:50:01
2.8K0
修改2020-12-28 10:50:01
举报

众所周知在音视频的处理方面,FFmpeg是一款非常强大的自由软件,它是一个开源免费跨平台的视频和音频流软件工具,它提供了录制、转换以及流化音视频的完整解决方案。目前各大云厂商在音视频处理的底层能力也是基于开源ffmpeg各自再做优化与改进来实现音视频相关处理的,本文简单介绍下几种比较实用的ffmpeg常见命令方法。

首先了解下FFmpeg由几个组件组成:

  • 命令行应用程序
    • ffmpeg:用于对视频文档或音频档案转换格式
    • ffplay:一个简单的播放器,基于SDL与FFmpeg库
    • ffprobe:用于显示媒体文件的信息Mediainfo
  • 函数库
    • libswresample:用于音频重采样和格式转换等功能
    • libavcodec:包含全部FFmpeg音频/视讯编解码库
    • libavformat:包含demuxers和muxer库
    • libavutil:包含一些工具库
    • libpostproc:对于视讯做前处理的库
    • libswscale:对于影像作缩放的库
    • libavfilter:包含多媒体处理常用的滤镜功能

FFmpeg可使用众多参数,参数内容会根据ffmpeg版本而有差异 这里不再赘述,使用前建议先参考参数及编解码器的叙述。此外参数明细可用ffmpeg -h显示;编解码器名称等明细可用ffmpeg -formats显示。一些常用的参数也可以通过网上查找相关资料获取。

1. 直播推流:将本地mp4文件推流到直播域名

代码语言:javascript
复制
ffmpeg -re -i out.mp4 -c copy -f flv rtmp://livepush.domain/live/streamName

2. 拉流转推:将一路在线直播流转推到另外一个推流地址上

代码语言:javascript
复制
ffmpeg -i '拉流地址' -acodec copy -vcodec copy -f flv '推流地址' 

3. 拉直播流保存本地文件

代码语言:javascript
复制
ffmpeg -i rtmp://liveplay.domain/live/streamName -c copy dump.flv

4. 文件格式转换

代码语言:javascript
复制
ffmpeg -i in.mov -vcodec copy -acodec copyout.mp4  // mov --> mp4
代码语言:javascript
复制
ffmpeg -i in.flv -vcodec copy -acodec copyout.mp4  // flv --> mp4
代码语言:javascript
复制
ffmpeg -i in.gif -vf scale=420:-2,format=yuv420p out.mp4  // gif --> mp4
代码语言:javascript
复制
ffmpeg -i son_origine.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 son_final.mp3   // wav --> mp3

5. 旋转视频,例如将视频顺时针旋转90度:

代码语言:javascript
复制
ffmpeg -i in.mp4 -vf rotate=PI/2 out.mp4   

6. 视频剪辑,当需要截取一个长视频的其中某一段内容,比如从一个视频的第10秒开始,截取6秒的内容,也就是10~16秒的内容,输入一个out.mp4文件:

代码语言:javascript
复制
ffmpeg -i in.mp4 -ss 00:00:10 -t 00:00:06 -acodec aac -vcodec h264 -strict -2 out.mp4 
  //?	-ss 指定裁剪的开始时间,精确到秒   ?	-t 被裁剪后的时长

7. 视频缩放,当需要把一个高分辨率的视频处理成一个低分辨率的视频,以达到减小视频体积的目的。举个例子:把一个源视频为1080*1920的视频缩小到720*960 :

代码语言:javascript
复制
ffmpeg -i in.mp4 -vf scale=720:960 -acodec aac -vcodec h264 out.mp4  // 1080*1920-->720*960

8. 调节视频帧率,比如将源视频25fps调整到15fps :

代码语言:javascript
复制
ffmpeg -i in.mp4 -r 15 out.mp4

9. 视频添加水印

代码语言:javascript
复制
ffmpeg -i out.mp4 -vf "movie=logo.png,scale=64:48[watermask];[in][watermask] overlay=30:10 [out]" watermask.mp4
   // -vf中的 movie 指定logo位置。scale 指定 logo 大小。overlay 指定 logo 摆放的位置

10. 提取音频流

代码语言:javascript
复制
ffmpeg -i input.mp4 -acodec copy -vn out.aac

11. 提取视频流

代码语言:javascript
复制
 ffmpeg -i input.mp4 -vcodec copy -an out.h264

12. 音视频合并

代码语言:javascript
复制
 ffmpeg -i out.h264 -i out.aac -vcodec copy -acodec copy out.mp4

ffmpeg相当强大,以上只是介绍了部分比较常见实用的命令供大家借鉴,在音视频处理上使用ffmpeg可以实现很多功能,一些常见参数说明放在下面附录,完全的说明可以查询ffmpeg的官方资料:http://ffmpeg.org/ffmpeg-filters.html 。

附录:

主要参数

  • -i设置输入文件名。
  • -f设置输出格式。
  • -y若输出文件已存在时则覆盖文件。
  • -fs超过指定的文件大小时则退出转换。
  • -ss从指定时间开始转换。
  • -title设置标题。
  • -timestamp设置时间戳。
  • -vsync增减Frame使影音同步。

图像参数

  • -b设置图像流量,默认为200Kbit/秒。
  • -r设置帧率值,默认为25。
  • -s设置画面的宽与高。
  • -aspect设置画面的比例。
  • -vn不处理图像,于仅针对声音做处理时使用。
  • -vcodec设置图像图像编解码器,未设置时则使用与输入文件相同之编解码器。

声音参数

  • -ab设置的每channel流量。
  • -ar设置采样率。
  • -ac设置声音的Channel数。
  • -acodec设置声音编解码器,未设置时与图像相同,使用与输入文件相同之编解码器。
  • -an不处理声音,于仅针对图像做处理时使用。
  • -vol设置音量大小,256为标准音量。(要设置成两倍音量时则输入512,依此类推。)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 众所周知在音视频的处理方面,FFmpeg是一款非常强大的自由软件,它是一个开源免费跨平台的视频和音频流软件工具,它提供了录制、转换以及流化音视频的完整解决方案。目前各大云厂商在音视频处理的底层能力也是基于开源ffmpeg各自再做优化与改进来实现音视频相关处理的,本文简单介绍下几种比较实用的ffmpeg常见命令方法。
  • 主要参数
  • 图像参数
  • 声音参数
相关产品与服务
云直播
云直播(Cloud Streaming Services,CSS)为您提供极速、稳定、专业的云端直播处理服务,根据业务的不同直播场景需求,云直播提供了标准直播、快直播、云导播台三种服务,分别针对大规模实时观看、超低延时直播、便捷云端导播的场景,配合腾讯云视立方·直播 SDK,为您提供一站式的音视频直播解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com