2021-03-16 ffmpeg处理音视频

2021-03-16  本文已影响0人  justnomomo

FFmpeg怎么念

FFmpeg念作ef ef em peg,其全称为 Fast Forward Moving Picture Expert Group

FFmpeg是什么

FFmpeg是一套领先的多媒体框架,是一套开源且跨平台的多媒体解决方案,提供了音视频的编码、解码、转码、封装、解封装、流媒体、滤镜、播放等功能,官网地址为 ffmpeg.org

FFmpeg可以用来干嘛

除了播放和转换,其他如音视频录制直播推流滤镜应用等很多场景都可以使用FFmpeg

FFmpeg的组成

使用FFmpeg有两种方式:

FFmpeg基础使用示例

前端和FFmpeg有什么关联

安装

brew install ffmpeg

参数说明

常用参数

-i 设定输入流
-f 设定输出格式
-ss 开始时间

视频参数

-b 设定视频流量(码率),默认为200Kbit/s
-r 设定帧速率,默认为25
-s 设定画面的宽与高
-aspect 设定画面的比例
-vn 不处理视频
-vcodec 设定视频编解码器,未设定时则使用与输入流相同的编解码器

音频参数

-ar 设定采样率
-ac 设定声音的Channel数
-acodec 设定声音编解码器,未设定时则使用与输入流相同的编解码器
-an 不处理音频

常用命令

提取音频

ffmpeg -i mov_bbb.mp4 -acodec copy -vn output.aac

-vn 不处理视频

提取视频

ffmpeg -i input.mp4 -vcodec copy -an output.mp4

-an 不处理音频

合并音频和视频

ffmpeg -i video.mp4 -i audio.wav -c:v copy -c:a aac -strict experimental output.mp4

合并两个音频

ffmpeg -i input1.mp3 -i input2.mp3 -filter_complex amerge -ac 2 -c:a libmp3lame -q:a 4 output.mp3

视频格式转换

ffmpeg -i input.avi output.mp4

视频编码格式转换

ffmpeg -i input.mp4 -vcodec h264 output.mp4

视频剪切

ffmpeg -ss 00:00:15 -t 00:00:05 -i input.mp4 -vcodec copy -acodec copy output.mp4

-ss表示开始切割的时间,-t表示要切多少。上面就是从开始,切5秒钟出来。

码率控制

可以间接控制文件大小,有三种方式:

ffmpeg -i input.mp4 -b:v 2000k output.mp4
ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k output.mp4
ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k -maxrate 2500k output.mp4

码率:bitrate = file size / duration
一个文件20.8M,时长1分钟,那么,码率就是:
biterate = 20.8M bit/60s = 20.810241024*8 bit/60s= 2831Kbps
一般音频的码率只有固定几种,比如是128Kbps, 那么,video的就是
video biterate = 2831Kbps -128Kbps = 2703Kbps。

缩小视频

将输入的1920x1080缩小到960x540输出:

ffmpeg -i input.mp4 -vf scale=960:540 output.mp4

scale=960:-1,会保持原始宽高比等比缩小

为视频添加logo

ffmpeg -i input.mp4 -i iQIYI_logo.png -filter_complex overlay output.mp4
image.png

去掉视频logo

ffmpeg -i input.mp4 -vf delogo=0:0:220:90:100:1 output.mp4

-vf delogo=x:y:w:h[:t[:show]]
x:y 离左上角的坐标
w:h logo的宽和高
t: 矩形边缘的厚度默认值4
show:若设置为1有一个绿色的矩形,默认值0。

抓取视频的一些帧,存为jpeg图片

从input.mp4的第20s时间开始,往下10s,即20~30s这10秒钟之间,每隔1s就抓一帧,总共会抓10帧。

ffmpeg -i input.mp4 -ss 00:00:20 -t 10 -r 1 -q:v 2 -f image2 pic-%03d.jpeg

-ss 表示开始时间
-t表示共要多少时间
-r 表示每一秒几帧
-q:v表示存储jpeg的图像质量,一般2是高质量

提取两个声道

ffmpeg -i music.mp3 -map_channel 0.0.0 letf.aac -map_channel 0.0.1 right.aac

双声道合并单声道

ffmpeg -i music.mp3 -ac 1 music.aac

视频转gif

ffmpeg -i capx.mp4 -t 10 -s 320x240 -pix_fmt rgb24 jidu1.gif

-t参数表示提取前10秒视频
-s 表示按照 320x240的像素提取

我用它解决了什么问题

有个视频在android手机里播放时有画面和背景音,但是没有配音。

具体解决步骤:

ffmpeg -i input.mp4 -acodec copy -vn output.aac
ffmpeg -i input.mp4 -vcodec copy -an silent.mp4
ffmpeg -i output.aac -map_channel 0.0.0 letf.aac -map_channel 0.0.1 right.aac
ffmpeg -i silent.mp4 -i letf.acc -c:v copy -c:a aac -strict experimental output.mp4
ffmpeg -i output.mp4 -ar 44100 output-1.mp4

参考文档:
https://www.jianshu.com/p/ddafe46827b7
https://blog.csdn.net/newchenxf/article/details/51364105
https://cloud.tencent.com/developer/article/1531167

上一篇下一篇

猜你喜欢

热点阅读