FFmpeg是领先的开放核心,它是一个强大的用于音频和视频处理的开源库。它可以解码,编码,转码,混合流,分离流媒体,过滤和播放几乎所有格式的音频和视频内容。它不仅可以使用API处理
FFmpeg是领先的开放核心,它是一个强大的用于音频和视频处理的开源库。它可以解码,编码,转码,混合流,分离流媒体,过滤和播放几乎所有格式的音频和视频内容。它不仅可以使用API处理音频和视频,还可以使用FFmpeg命令编辑音频和视频文件。
包括用于音频、视频和字幕流的多个解码器和编码器,以及多个比特流过滤器。
FFmpeg目录及其功能
libavutil:是一个工具库,包含用于简化编程的函数,包括随机数生成器、数据结构、数学例程、核心多媒体实用程序等等。
libavcodec:是一个包含音频/视频编解码器的库。
libavformat:是一个包含多媒体容器格式的合成器和拆分器的库。
libavdevice:是一个包含输入输出设备的库,用来抓取和渲染很多常见的多媒体I/O软件框架,包括Video4Linux、Video4Linux2、VfW和ALSA。
libavfilter:是一个包含媒体过滤器的库。
libwscale:是一个执行高度优化的图像缩放和颜色空帧间/像素格式转换的库。
libswresample:是一个库,执行高度优化的音频重采样,重混音和样本格式转换操作。
FFmpeg工具及其功能FFmpeg:FFMPEG是一个命令行工具,用来实现FFmpeg在命令行上拥有的功能。
FFPlay:FFPlay是一个非常简单和便携的媒体播放器,使用FFmpeg库和SDL库。主要用作各种FFmpeg API的测试平台。
ffprobe:ffprobe是一个多媒体流分析工具。它从多媒体流中收集信息,并以人类和机器可读的形式打印出来。它可以用来检测多媒体流的容器类型,以及每个多媒体流的格式和类型。它可以用作独立的应用程序,也可以与文本过滤器结合使用,以执行更复杂的处理。
在了解了FFmpeg的目录及其工具之后,下面这篇文章重点介绍在日常生活中如何使用FFmpeg命令行处理音视频文件。
MPEG音视频处理的功能描述按照功能区分,FFmpeg命令大致可以分为几大模块:录音命令、音视频合成与分离、音视频剪切与合并、图片与视频转换。下面介绍一下如何使用FFmpeg命令行处理音视频来实现上述功能。
本文以Ubuntu操作系统为例,通过简单的命令sudo apt-get install ffmpeg进行安装。
您也可以在Windows、MacOS和其他Linux操作系统中安装FFmpeg后执行该命令。
1)录制
ffmpeg-f av foundation-list _ devices true-I “”
2)录制屏幕
ffmpeg-f av foundation-I 1-r 30 out . YUV
-f指定使用avfoundation收集数据。
-I指定收集数据的位置,这是一个文件索引号。在我的电脑上,1代表桌面(可以通过上面的命令查询设备索引号)。
-r指定帧速率。根据ffmpeg官方文档,-r与-framerate功能相同,但在实际测试中发现不同。-framerate用于限制输入,而-r用于限制输出。
3)录制屏幕+声音
ffmpeg-f av foundation-I 1:0-r 29.97-c:v libx 264-CRF 0-c:a libfdk _ AAC-profile:a AAC _ he _ v2-b:a 48k out . flv
-I 1:0 “冒号前1 ”表示的屏幕索引号。”冒号0 ″表示的语音相位数。
-c: v与参数-vcodec一样,表示视频编码器。c是codec的缩写,V是video的缩写。
-CRF是x264的参数。0表无损压缩。
-C: A和参数-acodec一样,表示音频编码器。
-profile是fdk_aac的参数。aac_he_v2表使用AAC_HE v2压缩数据。
-b: a指定音频码率。b是bitrate的缩写,A是audio的缩写。
4)录制视频
ffmpeg-帧率30-f av foundation-i0 out.mp4
-framerate限制视频采集的帧速率。这必须根据提示要求进行设置。如果没有设置,将会报告一个错误。
-f指定使用avfoundation收集数据。
-我指定视频设备的索引号。
5)视频+音频
ffmpeg-帧率30-f av foundation-I 0:0 out.mp4
6)录制
ffmpeg-f av foundation-I:0 out . wav
7)记录音频原始数据
ffmpeg-f av foundation-I:0-ar 44100-f s16le out . PCM
8)提取音频流
ffmpeg-I input.mp4-acodec copy-VN out . AAC
Acodec:指定音频编码器,copy表示只复制,不编解码。
VN: V代表视频,N代表无,表示无视频。
9)转换为MP3格式
ffmpeg-I input.mp4-acodec libmp 3 lame out . MP3
10)提取视频流
ffmpeg-I input.mp4-vcodec copy-an out . h264
Vcodec:指定视频编码器,copy表示只复制,不编解码。
安:A代表视频,N代表没有,也就是没有音频。
11)要格式化的视频
ffmpeg-I video _ test . MP4-vcodec copy-acodec copy out _ convert . flv
直接复制上面命令表的音视频,但是把mp4的封装格式改成flv。
12)移除视频声音
ffmpeg-I video _ au ido . MP4-vcodec copy-an video.mp4
13)视频压缩
1)ffmpeg -i test_ffmpeg.mp4(压缩文件更大更清晰,一般不使用)
2) FFMPEG-I输出。MP4-B:v500k 512k _ out.mp4(降低视频比特率,压缩更模糊)
14)音频和视频合并
ffmpeg-I out . h264-I out . AAC-vcodec copy-acodec copy out.mp4
15)提取YUV数据
ffmpeg-I input.mp4-an-c:v raw video-pixel _ format YUV 420 p out . YUV
#播放
ffplay -s wxh out.yuv
-c: v raw video指定将视频转换为原始数据。
-pixel _ format yuv420p指定转换格式为yuv420p。
16)视频YUV转H264
ffmpeg-f raw video-pix _ fmt YUV 420 p-s 640 ×480-r 30-I out . YUV-c:v libx 264-f raw video out . h264
17)提取音频PCM数据
ffmpeg-I out.mp4-VN-ar 44100-AC 2-f s16le out . PCM
#播放
ffplay-ar 44100-AC 2-f s16le-I out . PCM
18) PCM到WAV
ffmpeg-f s16be-ar 8000-AC 2-acodec PCM _ s16be-I input . raw output . wav
19)添加水印
图像水印:
ffmpeg -i out.mp4 -vf “movie=logo.png,scale=128:72[watermask];[in][watermask] overlay=96:54 [out]” water_img.mp4out.mp4-VF “movie=logo.png,scale = 128:72[water mask];[in][water mask]overlay = 96:54[out]”water_img.mp4
-VF中的电影指定徽标位置。指定ScaleLogo刻度。覆盖指定放置徽标的位置。
水印:
out.mp4-VF “Xi。TTF:text = ’anyRTC & # 8217:x = 128:y = 72:font size = 24:font color = red:shadow = 2 ”水_text.mp4
20)视频缩放
FM peg-I out.mp4-VF标度= iw/2:-1 scale.mp4
-VFScale指定使用简单滤镜比例,iw/2中的iw:-1指定视频的宽度为整数。-1表示高度随宽度变化。
降低视频的分辨率并转换视频格式。
ffmpeg -i输入. avi -vf比例= 640:360 out.mp4
21)视频裁剪
ffmpeg-I VR . mov-VF crop = in _ w-300:in _ h-200-c:v libx 264-c:a copy-video _ size 1280 ×720 vr_new.mp4
裁剪格式:crop=out_w:out_h:x:y
Out _ w:输出宽度。您可以使用in_w表来输入视频的宽度。
Out _ h:输出高度。可以使用in_h表输入视频的高度。
X: x坐标
Y: y坐标
如果x和y设定为0,裁剪从左上角开始。不写就从中心点剪。
22)视频左右翻转(上下)
ffmpeg-I out.mp4滤波器_复合体“[0:v]pad = w = 2 * iw[a];[0:v]HF lip[b];overlay = x = w & # 8221duicheng.mp4
水平翻转
如果想改成垂直翻转,可以用vflip。
23)剪辑
ffmpeg-I out.mp4-ss 00:00:00-t 10 out _ cut . MP4
-ss指定剪辑的开始时间,精确到秒。
-t裁剪后的时间长度。
24)音频和视频合并
首先,用以下内容创建一个videolist.txt文件:
文件‘test1.mp4 & # 8217
文件‘test 2 . MP4 ’
然后执行以下命令:
output.mp4拷贝
25) HLS切片
ffmpeg-I out.mp4-c:v libx 264-c:a libfdk _ AAC-strict-2-f HLS out . m3u 8
-strict-2表示为音频启用了AAC。
-f HLS转换成m3u8格式。
26)视频转换为JPEG格式
ffmpeg-I video _ test . MP4-r 1-f image2 image-% 3d . JPEG
27)图像格式转换
ffmpeg -i输入. BMP out.jpg
ffmpeg -i输入. BMP out.png
28)视频截图逐帧
主要用于用户手动截图或者上传视频生成缩略图。
这里:-ss位置搜索指定的时间[-]hh:mm:ss[。xxx]格式也支持,-vframes设置转换多少帧视频,示例命令是第一秒获取第一帧的截图。
注意:生成的截图最好使用jpg格式,占用空间小空。如果需要使用其他格式,可以根据业务需求进行设置。
ffmpeg-ss 00:00:01-y-I video _ test . MP4-v frames 1 snap.jpg
29)视频转GIF
ffmpeg-I video _ test . MP4-r 1-f image2 image-% 3d . JPEG
30)图片转视频
ffmpeg -f image2 -i image-%3d.jpeg out_img_video.mp4ffmpeg-f image2-I image-% 3d . JPEG out _ img _ video . MP4
31)给视频添加字幕srt
ffmpeg-I video _ test . MP4-VF subtitle = subtitle . SRT out _ subtitle . MP4
32)为视频+字幕添加音乐
ffmpeg-I video _ test . MP4-I audio _ BG . MP3-VF subtitle = all _ MP3 _ SRT . SRT out _ MP3 _ subtitle . MP4
FFmpeg是一个强大的音频和视频处理库,许多播放器都是基于FFmpeg开发的。本文提到的功能只是边肖上市的FFmpeg的部分可用功能。更多的FFmpeg命令行可以实现处理音视频的功能。可以去FFmpeg官网查阅相关文档。