FFmpeg基础学习

参考学习网站 https://ffmpeg.org/ffmpeg.html?tdsourcetag=s_pctim_aiomsg

本文demo地址:FFmpegDemo 先睹为快

1.什么是FFmpeg,它可以做什么?

答:FFmpeg 是一个非常快速的视频和音频转换器,//也可以从现场音频/视频源抓取。它还可以在任意采样率之间进行转换,并使用高质量的多相滤波器动态调整视频大小。

2.如何下载?

答:https://ffmpeg.org/ 选择Download,选择自己适合的平台下载安装即可。

#3.如何使用FFmpeg? #

答:首先看它的命令形式 ffmpeg [global_options] {[input_file_options] -i input_url} … {[output_file_options] output_url} …

global_options 参数影响后面的输入输出
-i 通过该参数可以指定输入参数

举个列子:

//demo 音乐 https://m10.music.126.net/20181018094157/f58f270a51e5cbe38b943e788b78f6a1/ymusic/6b35/02c0/4844/300abb010d844be1941e5555ba373a2d.mp3

FFmpeg -i https://m10.music.126.net/20181018094157/f58f270a51e5cbe38b943e788b78f6a1/ymusic/6b35/02c0/4844/300abb010d844be1941e5555ba373a2d.mp3 demo.mp3

通过ffmpeg -i命令 制定了一个输入文件,该文件可以是 本地文件,可以是一个url文件,也可以是一个流,最后指定一个输出文件 当然可以指定多个输出文件

ffmpeg -i F:\blog\ffmpeg\test.mp4 -r 10 test2.mp4

设置帧率,当帧率低于16fps的时候会感觉明显的卡顿

ffmpeg -i F:\blog\ffmpeg\test.mp4 -b:v 64k -bufsize 64k test3.mp4

通过设置视频的比特率可以调整视频的清晰度,并且可以减小文件的大小

因此我们可以用适当的调整比特率的方式来减小视频大小方便传输

4.ffmpeg中间过程是怎么处理的?

 _______              ______________
|       |            |              |
| input |  demuxer   | encoded data |   decoder
| file  | ---------> | packets      | -----+
|_______|            |______________|      |
                                		   v
                                       _________
                                      |         |
                                      | decoded |
                                      | frames  |
                                      |_________|
 ________             ______________       |
|        |           |              |      |
| output | <-------- | encoded data | <----+
| file   |   muxer   | packets      |   encoder

ffmpeg首先从输入文件------到解码数据------到解码帧数据----然后通过一系列操作对帧数据编码操作-----然后打包编码数据----最后输出文件

(调用libavformat库(包含多路分离器)来读取输入文件并从中获取包含编码数据的数据包。然后将编码的数据包传递给解码器。解码器产生未压缩的帧(原始视频/ PCM音频/ …),可以通过过滤进一步处理(参见下一节)。在过滤之后,帧被传递到编码器,编码器对它们进行编码并输出编码的分组。最后,这些传递给复用器,复用器将编码的数据包写入输出文件。)

相关库:libavformat----> libavformat 用于对音频和视频编码解码的支持库

5.FFmpeg基础学习

5.1 Filtering

( Filtering https://ffmpeg.org/ffmpeg.html?tdsourcetag=s_pctim_aiomsg#toc-Filtering)

ffmpeg 可以对输入的音频视频文件做过滤处理(滤波器),ffmpeg支持2种(simple and complex)方式。

5.1.1 简单的滤波器 Simple filtergraphs

 _________                        ______________
|         |                      |              |
| decoded |                      | encoded data |
| frames  |\                   _ | packets      |
|_________| \                  /||______________|
             \   __________   /
  simple     _\||          | /  encoder
  filtergraph   | filtered |/
                | frames   |
                |__________|

简单的滤波器图是那些只有一个输入和输出的滤波器,它们都是相同的类型,简单的过滤器图使用per-stream -filter选项配置(分别使用-vf和-af别名用于视频和音频)。一个简单的视频滤镜图可以看起来像这样:

 _______        _____________        _______        ________
|       |      |             |      |       |      |        |
| input | ---> | deinterlace | ---> | scale | ---> | output |
|_______|      |_____________|      |_______|      |________|

请注意,某些过滤器会更改帧属性但不会更改帧内容。例如。之前提到修改fps过滤器会更改帧数,但不会触及帧内容。另一个例子是setpts过滤器,它只设置时间戳,否则不改变帧。

5.1.2 复杂的滤波器 Complex filtergraphs

#6.其他 #:

1.ffprobe 查看文件信息

C:\ffmpeg\bin>ffprobe a.mp3
ffprobe version N-92132-g0a41a8bf29 Copyright (c) 2007-2018 the FFmpeg developers
 built with gcc 8.2.1 (GCC) 20180813
  configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth
 libavutil      56. 19.101 / 56. 19.101
 libavcodec     58. 32.100 / 58. 32.100
 libavformat    58. 18.104 / 58. 18.104
 libavdevice    58.  4.105 / 58.  4.105
libavfilter     7. 33.100 /  7. 33.100
 libswscale      5.  2.100 /  5.  2.100
 libswresample   3.  2.100 /  3.  2.100
 libpostproc    55.  2.100 / 55.  2.100
Input #0, mp3, from 'a.mp3':
Metadata:
encoder         : Lavf57.25.100
comment         : 163 key(Don't modify):L64FU3W4YxX3ZFTmbZ+8/d5BxaaSkA01PActFA9tMYQgfPEbS3UOf+TJCF/3U7ihjDBK+WaiIUDoa9od5fLSYh1E3OM1DCttgrSnXijItYvczfKqVdtIGcos5VonPA42nWYjFloLWgArbhvkhjVGPnGK/fONCGPzPorxviiBN8QmT/Yslk7NaYNvjb84VzJx+dUleNsCJMOw7qV2zP8/de0zJYVEbaBTZGZnfkYih
album           : 热门华语7
title           : CCTV新闻联播片头
artist          : 群星
disc            : 1
track           : 1
Duration: 00:00:16.72, start: 0.025056, bitrate: 202 kb/s
Stream #0:0: Audio: mp3, 44100 Hz, stereo, fltp, 128 kb/s
Metadata:
  encoder         : Lavc57.24
Stream #0:1: Video: mjpeg, yuvj444p(pc, bt470bg/unknown/unknown), 640x640 [SAR 72:72 DAR 1:1], 90k tbr, 90k tbn, 90k tbc
Metadata:
  comment         : Media (e.g. label side of CD)

1.合并2个音频流(amix),

ffmpeg -i b.mp3   -i a.mp3   -filter_complex  amix=inputs=2:duration=longest -f mp3  output2.mp3

2.分离流

ffmpeg -i INPUT -map 0:1 out.wav

可以通过查看流的信息得知文件信息中包含几个Stream(如下所示)

Stream #0:0: Audio: mp3, 44100 Hz, stereo, fltp, 128 kb/s
Metadata:
  encoder         : Lavc57.24
Stream #0:1: Video: mjpeg, yuvj444p(pc, bt470bg/unknown/unknown), 640x640 [SAR 72:72 DAR 1:1], 

这里表示该文件包含2个流信息,一个是mp3类型,一个是封面 所以我们可以使用下面的命令,把jpeg图片取出来

ffmpeg -i a.mp3 -map 0:1 a.png 

音频倍数(atempo)

ffmpeg -i a.mp3  -filter_complex  atempo=2 -y aaaa.mp3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值