首页 >> 大全

FFmpeg音视频处理详解及实战

2023-12-04 大全 22 作者:考证青年

1 介绍

项目由 在2000年创立。到目前为止,项目的开发者仍然与VLC、MPV、dav1d、x264等多媒体开源项目有着广泛的重叠。( Mpeg)是一款遵循GPL的开源软件,在音视频处理方面表现十分优秀,几乎囊括了现存所有的视音频格式的编码,解码、转码、混合、过滤及播放。作为最受欢迎的视频和图像处理软件,它被来自各行各业的不同公司所广泛使用。同时也是一款跨平台的软件,完美兼容Linux、、Mac OSX等平台。其实它由3大部件组成,号称音视频处理工具三剑客:

应该是 工具集中最核心的利器,支持多种多样的编码器、解码器、封装格式、滤镜功能。框架的基本组成包含、、、、等模块库,结构图如下:

(1)–的封装模块

中实现了目前多媒体领域中的绝大多数媒体封装格式,包括封装和解封装,如MP4、FLV、KV、TS等文件封装格式,RTMP、RTSP、MMS、HLS等网络协议封装格式。是否支持某种媒体封装格式,取决于编译时是否包含了该格式的封装库。根据实际需求,可进行媒体封装格式的扩展,增加自己定制的封装格式,即在中增加自己的封装处理模块。

(2)–的编解码模块

中实现了目前多媒体领域绝大多数常用的编解码格式,即支持编码,也支持解码。除了支持MPEG4、AAC、MJPEG等自带的媒体编解码格式之外,还支持第三方的编解码器,如H.264(AVC)编码,需要使用x264编码器;H.265(HEVC)编码,需要使用x264编码器;MP3()编码,需要使用编码器。如果希望增加自己的编码格式,或者硬件编解码,则需要在中增加相应的编解码模块。

(3)–的滤镜模块

库提供了一个通用的音频、视频、字幕等滤镜处理框架。在中,滤镜框架可以有多个输入和多个输出。

(4)–的音频转换计算模块

模块提供了高级别的音频重采样API。例如允许操作音频采样、音频通道布局转换与布局调整。

(5)–的视频图像转换计算模块

模块提供了高级别的图像转换API,例如它允许进行图像缩放和像素格式转换,常见于将图像从1080p转换成720p或者480p等的缩放,或者将图像数据从转换成YUYV,或者YUV转RGB等图像格式转换。

2 conda环境安装 (1)环境安装

安装方法详见:安装

(2)安装

conda install ffmpeg

3 命令

提供的命令行(CLI)工具,其使用方法如下(方括号表示可选项,花括号表示必选项目):

ffmpeg [global options] {[infile options]['-i' 'infile'] ...} {[outfile options] 'outfile' ...}

参数选项由三部分组成:可选的一组全局参数、一组或多组输入文件参数、一组或多组输出文件参数,其中,每组输入文件参数以‘-i’为结束标记;每组输出文件参数以输出文件名为结束标记。

(1)能力集列表

使用方法:

ffmpeg configure -encoders

(2)常用输入选项

对于输入,以下选项通常是自动识别的,但也可以强制设定。

(3)常用输出选项 (4)流标识

的某些选项可以对一个特定的媒体流起作用,这种情况下需要在选项后面增加一个流标识。流标识允许以下几种格式:

假如要设定第二个音频流为copy,则需要指定-codec:a:1 copy

(5)音频选项 (6)视频选项 (7)高级选项 4 使用示例 (1)视频播放

input.mp4

- input.mp4

-i input.mp4 - 16:9 .mp4

(2)视频压缩与拼接

-i demo.mp4 - h264 -vf scale=640:-2 - 4 .mp4

-i demo.mp4 - -2 - h264 .mp4

-i 0.mp4 -i 1.mp4 -i 2.mp4 -i 3.mp4 - '[0:0][1:0] [2:0][3:0] =n=4:v=1 [v]' -map '[v]' .mp4

-i 1.mp4 -i 2.mp4 -i 3.mp4 - '[0:0][0:1] [1:0][1:1] [2:0][2:1] =n=3:v=1:a=1 [v][a]' -map '[v]' -map '[a]’ .mp4

-i 0.mp4 -i 1.mp4 - "[0:v]pad=iw*2:ih*1[a];[a][1:v]=w" out.mp4

-i 0.mp4 -i 1.mp4 - "[0:v]pad=iw:ih*2[a];[a][1:v]=0:h" out_2.mp4

-i 0.mp4 -i 1.mp4 - "[0:v]pad=iw:ih*2[a];[a][1:v]=0:h" out_2.mp4

-i 0.mp4 -i 1.mp4 -i 2.mp4 - "[0:v]pad=iw:ih*3[a];[a][1:v]=0:h[b];[b][2:v]=0:2.0*h" .mp4

-i 0.mp4 -i 1.mp4 -i 2.mp4 -i 3.mp4 - "[0:v]pad=iw*2:ih*2[a];[a][1:v]=w[b];[b][2:v]=0:h[c];[c][3:v]=w:h" out.mp4

(2)视频帧操作

-v error - .mp4

-y -i demo.mp4 -ss 00:03:22.000 - 1 -an .jpg

-v error - - v:0 - = -of =nokey=1:=1 .mp4

-v error - - v:0 - = -of =nokey=1:=1 .mp4

-v error - - v:0 - = -of =nokey=1:=1 - nokey .mp4

-v error - nokey - v:0 - frame= -of csv==0 .mp4

-v error - .mp4 | grep

-v error - v - - frame= -of csv .mp4 | grep -n I | cut -d ':' -f 1

-i .mp4 - -x264- =1:=0 - copy out.mp4

-v error - v:0 - = -of ==1:nokey=1 .mp4

(3)图片与视频

-i demo.avi -vf scale=640:640 .avi

-i .mp4 -an -.mp4

-i input.mp4 - copy -an .mp4

-i test.asf -y -f -t 0.001 -s a.jpg

-i test.asf - 30 -y -f gif a.gif

-i test.avi -y -f -ss 8 -t 0.001 -s test.jpg

-i demo.avi - copy - copy .mp4

-i video.mp4 -i .srt -c:v copy -c:a copy - -c:s -map 0 -map 1 .mp4

-y -i test.mpeg - - h263 -b 128 -r 15 -s

- aac -ac 2 -ar 22500 -ab 24 -f 3gp test.3gp

-re -i demo.mp4 - copy - -s -map 0:0 -f rtp rtp://10.10.10.100:1234 -map 0:1 -f rtp rtp://10.10.10.100:1238 > /var/www/live.sdp

- mpeg4 -b 1000 -r 10 -g 300 -vd x11:0,0 -s ~/test.avi

- mpeg4 -b 1000 -r 10 -g 300 -i ~/test.avi -s 800×600 ~/test-800-600.avi

-f -s 320*240 -r 10 -i /dev/ test.asf

-f -i 'in%6d.jpg' - -r 25 -b 200k test.mp4

方法1:不规则图片名称合成视频文件

- 10 - glob -i '*.jpg' out.mp4

cat *.png | -f -i - .mp4

方法2:先动手把不规则文件重命名规则图片名。

def getTpyeFile(filelist, type):     res = []     for item in filelist:name, suf = os.path.splitext(item) # 文件名,后缀if suf == type:res.append(item)return respwd = os.getcwd() # 返回当前目录的绝对路径
dirs = os.listdir() # 当前目录下所有的文件名组成的数组
typefiles = getTpyeFile(dirs, '.jpg')for i in range(0,len(typefiles)):os.rename(typefiles[i],"./%d.jpg" % (i)) #将文件以数字规则命令

将需要合成的图片放在txt中,通过读取txt文件合并成视频。

-f -i files.txt .mp4

-i .mp4 -r 24 .mp4

-i .mp4 -c:v -ac 2 -c:a aac - -2 -b:a 128k -crf 28 .mp4

(4)音频处理

demo.ape

- 1 demo.ape

- 2 demo.ape

-i video.mp4 -vn audio.mp3

-i video.mp4 -vn -ab 128k audio.mp3

-loop 1 -i image.jpg -i audio.wav -c:v -c:a aac - -b:a 192k - .mp4

-f alsa -i hw:0 -t 100 .wav

-f alsa -i - aac - -2 -b:a 128k -r 44100 /var/www/data/main.m3u8

-i .mp3 -ab 128k .mp3

-i .mp3 -b:a 192k .mp3

(5)格式转换

-i input.mp4 - -2 - h264 .mp4

-i input.mp4 - -2 - mpeg4 .mp4

-i in.webp out.jpg

-i in.webp out.png

-i in.jpg out.png

-i in.jpg out.webp

-i in.png out.webp

-i in.png out.jpg

(6)其它指令

-

-

-

--help

-i .mp4 -t 5 .mp4

-i .wav -t 00:00:05 .wav

通过 -ss 给出一个开始时间,-to 给出结束时间

-i .mp3 -ss 00:01:14 .mp3

-i .wav -ss 00:00:30 -t 10 .wav

-i .h264 -ss 00:01:30 -to 00:01:40 .h264

-i .ogg -ss 5 .ogg

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了