技术分享| 如何使用FFmpeg命令处理音视频
qiyuwang 2024-10-08 10:26 21 浏览 0 评论
FFmpeg是领先的多媒体框架,是一个强大的处理音视频的开源库,能够解码、编码、转码、混流、流媒体分离、滤镜和播放几乎所有格式的音视频内容。它既可以使用API对音视频进行处理,也可以使用FFmpeg命令编辑音视频文件。
包含用于音频、视频和字幕流的多个解码器和编码器,以及多个位流过滤器。
FFmpeg目录及其作用
libavutil: 是一个包含用于简化编程的函数工具库,包括随机数生成器、数据结构、数学例程、核心多媒体实用程序等等。
libavcodec: 是一个包含用于音频/视频编解码器的库。
libavformat: 是一个包含多媒体容器格式的合成器和分离器的库。
libavdevice: 是一个包含输入和输出设备的库,用于抓取和渲染许多常见的多媒体输入/输出软件框架,包括 Video4Linux、Video4Linux2、VfW 和 ALSA。
libavfilter: 是一个包含媒体过滤器的库。
libswscale: 是一个执行高度优化的图像缩放和色彩空间/像素格式转换操作的库。
libswresample: 是一个执行高度优化的音频重采样、rematrixing和样本格式转换操作的库。
FFmpeg工具及其作用
ffmpeg: ffmpeg是一个命令行工具,用于在命令行实现FFmpeg具有的功能。
ffplay: ffplay是一个使用 FFmpeg 库和 SDL 库的非常简单和便携的媒体播放器。它主要用作各种 FFmpeg API 的测试平台。
ffprobe: ffprobe 是一个多媒体流分析工具。它从多媒体流中收集信息,并且以人类和机器可读的形式打印出来。它可以用来检测多媒体流的容器类型,以及每一个多媒体流的格式和类型。它可以作为一个独立的应用来使用,也可以结合文本过滤器执行更复杂的处理。
经过了解了FFmpeg的目录及其工具,下面文章着重介绍下在日常生活中,我们怎么使用FFmpeg命令行处理音视频文件。
FFmpeg处理音视频功能说明
FFmpeg命令根据功能的区分,大致可以分为:录制命令,音视频的合成和分离,音视频的切割与合并,图片、视频互相转换等几个大的模块。下面我们介绍下如何使用FFmpeg命令行处理音视频实现以上的几个功能。
本文以Ubuntu操作系统为例,通过简单的命令sudo apt-get install ffmpeg来安装。
也可以在Windows,MacOS,其他Linux操作系统安装FFmpeg后执行一下命令。
相关学习资料推荐,点击下方链接免费报名,先码住不迷路~】
音视频免费学习地址:FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发
【免费分享】音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击788280672加群免费领取~
1)录制
ffmpeg -f avfoundation -list_devices true -i ""
2)录屏
ffmpeg -f avfoundation -i 1 -r 30 out.yuv
f 指定使用 avfoundation 采集数据。
-i 指定从哪儿采集数据,它是一个文件索引号。在我的电脑上,1 代表桌面(可以通过上面的命令查询设备索引号)。
-r 指定帧率。按 ffmpeg 官方文档说-r 与-framerate 作用相同,但实际测试时发现不同。-framerate 用于限制输入,而-r 用于限制输出。
3) 录屏+声音
ffmpeg -f avfoundation -i 1:0 -r 29.97 -c:v libx264 -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 -framerate 30 -f avfoundation -i 0 out.mp4
- -framerate 限制视频的采集帧率。这个必须要根据提示要求进行设置,如果不设置就会报错。
- -f 指定使用 avfoundation 采集数据。
- -i 指定视频设备的索引号。
5) 视频+音频
ffmpeg -framerate 30 -f avfoundation -i 0:0 out.mp4
6) 录音
ffmpeg -f avfoundation -i :0 out.wav
7) 录制音频裸数据
ffmpeg -f avfoundation -i :0 -ar 44100 -f s16le out.pcm
8) 抽取音频流
ffmpeg -i input.mp4 -acodec copy -vn out.aac
- acodec: 指定音频编码器,copy 指明只拷贝,不做编解码。
- vn: v 代表视频,n 代表 no 也就是无视频的意思。
9) 转换为MP3格式
ffmpeg -i input.mp4 -acodec libmp3lame out.mp3
10) 抽取视频流
ffmpeg -i input.mp4 -vcodec copy -an out.h264、
- vcodec: 指定视频编码器,copy 指明只拷贝,不做编解码。
- an: a 代表视频,n 代表 no 也就是无音频的意思。
11) 视频转格式
ffmpeg -i video_test.mp4 -vcodec copy -acodec copy out_convert.flv
上面的命令表式的音频、视频都直接 copy,只是将 mp4 的封装格式转成了 flv。
12) 去除视频声音
ffmpeg -i video_auido.mp4 -vcodec copy -an video.mp4
13) 视频压缩
1)ffmpeg -i test_ffmpeg.mp4 (压缩的文件更大更清晰,一般情况下不用)
2)ffmpeg -i out.MP4 -b:v 500k 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 rawvideo -pixel_format yuv420p out.yuv
播放
ffplay -s wxh out.yuv
- -c:v rawvideo 指定将视频转成原始数据
- -pixel_format yuv420p 指定转换格式为 yuv420p
16) 视频YUV转H264
ffmpeg -f rawvideo -pix_fmt yuv420p -s 640x480 -r 30 -i out.yuv -c:v libx264 -f rawvideo 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.mp4
- -vf 中的 movie 指定 logo 位置。scale 指定 logo 大小。overlay 指定 logo 摆放的位置。
文字水印:
ffmpeg -i out.mp4 -vf "drawtext=fontfile=FZBaoHTJW_Xi.TTF: text='anyRTC':x=128:y=72:fontsize=24:fontcolor=red:shadowy=2" water_text.mp4
20) 视频缩放
fmpeg -i out.mp4 -vf scale=iw/2:-1 scale.mp4
- -vf scale 指定使用简单过滤器 scale,iw/2:-1 中的 iw 指定按整型取视频的宽度。-1表示高度随宽度一起变化。
降低视频的分辨率且转换视频格式
ffmpeg -i input.avi -vf scale=640:360 out.mp4
21) 视频裁剪
ffmpeg -i VR.mov -vf crop=in_w-300:in_h-200 -c:v libx264 -c:a copy -video_size 1280x720 vr_new.mp4
crop 格式: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 -filter_complex "[0:v]pad=w=2*iw[a];[0:v]hflip[b];[a][b]overlay=x=w" duicheng.mp4
- hflip 水平翻转
- 如果要修改为垂直翻转可以用 vflip
23) 裁剪片段
ffmpeg -i out.mp4 -ss 00:00:00 -t 10 out_cut.mp4
- -ss 指定裁剪的开始时间,精确到秒
- -t 被裁剪后的时长。
24) 音视频合并 首先创建一个 videolist.txt 文件,文件内容如下: file 'test1.mp4' file 'test2.mp4' 然后执行下面的命令:
ffmpeg -f concat -i videolist.txt -c copy output.mp4
25) HLS切片
ffmpeg -i out.mp4 -c:v libx264 -c:a libfdk_aac -strict -2 -f hls out.m3u8
- -strict -2 指明音频使有 AAC
- -f hls 转成 m3u8 格式
26) 视频转JPEG
ffmpeg -i video_test.mp4 -r 1 -f image2 image-%3d.jpeg
27) 图片格式转换
ffmpeg -i input.bmp out.jpg
ffmpeg -i input.bmp out.png
28) 视频按帧截图 主要用于用户手动截图或上传视频生成缩略图
此处:-ss position 搜索到指定的时间 [-]hh:mm:ss[.xxx]的格式也支持,-vframes 设置转换多少桢(frame)的视频,示例命令是获取第一秒第一帧的截图。
注:生成的截图最好使用jpg格式,占用空间较小,如果需要使用其他格式,根据业务需求自行设置即可
ffmpeg -ss 00:00:01 -y -i video_test.mp4 -vframes 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.mp4
31) 视频添加字幕srt
ffmpeg -i video_test.mp4 -vf subtitles=subtitle.srt out_subtitle.mp4
32) 视频添加音乐+字幕
ffmpeg -i video_test.mp4 -i audio_bg.mp3 -vf subtitles=all_mp3_srt.srt out_mp3_subtitle.mp4
FFmpeg是一个强大的专门音视频处理的库,很多播放器都是基于FFmpeg进行的开发。文章所提的功能只是小编罗列的FFmpeg可使用功能的一部分,更多FFmpeg命令行可实现处理音视频的功能,大家可以去FFmpeg官网查阅相关文档。
原文 技术分享| 如何使用FFmpeg命令处理音视频
相关推荐
- 在Word中分栏设置页码一页两个页码的技巧!
-
施老师:在正常情况下,Word文档中一页只会出现一个页码。但在某种情况下,比如说:用了分栏后,我们希望一页中出现两个页码,那应该如何实现呢?今天,就由宁双学好网施老师来为大家讲一下,利用域来实现一页两...
- 如何在关键时刻向上自荐(如何在关键时刻做出正确选择)
-
抓住机会,挺身而出有种时刻叫“关键时刻”,关键时刻,作为一个认为自己有能力的、训练有素的人,应该考虑挺身而出,甚至应该不考虑就挺身而出。...
- WPS Word:跨页的文档表格,快速调整为一页。#Excel
-
如何快速将跨页的文档表格调整为一页?需要根据两种情况分别处理。如果表格所有行的行高相同,调整为一页的方法有两种。第一种方法是将光标移动到表格内,然后将鼠标移动到表格右下角的方框处,按住鼠标左键向上拖动...
- word文档插入下一页分节符(word下一页分页符)
-
在word文档中,对文档页面进行分页是特别常见的操作,其中的下一页分节符也是用得比较多的,但是一些人不太清楚在哪里设置,也不知道它具体能实现的功能是什么。接下来看看如何在word文档中插入下一页分节符...
- word文档如何设置某一页纸张的方向
-
word文档页面方向有横向和纵向,纵向是默认的纸张方向,有时我们需要将页面设置为横向,或只设置其中某一页方向,应该怎么操作呢?一起来看看下面的详细介绍第一步:...
- word怎么单独设置一页为横向(word2019怎样设置单独一页为横向)
-
word里面其中一页可以改为横向的吗?经过实际操作发现是完全可以的。...
- Word如何设置分栏,如何一页内容同时显示一栏和两栏
-
我们使用Word文档,有时需要用到两栏的排版,甚至一页内容同时包含一栏和两栏的排版,这种格式怎么设置呢?具体步骤如下:首先是两栏排版的设置,直接点击Word文件上方工具栏【布局】,选择【分栏】下面的【...
- Word怎么分页?这三个方法可以帮到你
-
我们不仅可以利用Word编辑文档,还可以编辑文集呢。但是有时候会出现两个部分的文章长短不一,我们需要对文档进行分页处理。这样可以方便我们对文档进行其他操作。那么Word怎么分页呢?大家可以采用下面这...
- Word内容稍超一页,如何优化至单页打印?
-
如何将两页纸的内容,缩到一页打印呢?有时候一页纸多一点内容,我们完全可以缩一下,放到一页来打印。...
- [word] word 表格如何跨行显示表头、标题
-
word表格如何跨行显示表头、标题在Word中的表格如果过长的话,会跨行显示在另一页,如果想要在其它页面上也显示表头,更直观的查看数据。难道要一个个复制表头吗?当然不是,教你简单的方法操作设置Wo...
- Word表格跨页如何续上表?(word如何让表格跨页不断掉)
-
长文档的表格跨页时,你会发现页末空白太多了,这时要怎么调整?选中整张表格,右击【表格属性】,点击【行】选项,之后勾选【允许跨页断行】,点击确定即可解决空白问题。...
- Word怎么连续自动生成页码,操作步骤来了!
-
Word怎么连续自动生成页码,操作步骤来了!...
- word文档怎么把两页合并成一页内容?教你4种方法
-
word怎么把两页合并成一页?word怎么把两页合并成一页?用四种方法演示一下。·方法一:把这一个文档合并成一页,按ctrl加a全选文档,然后右键点击段落,弹出的界面行距改成固定值,磅值可以改小一点,...
- 如何将Word中的一页的纸张方向设置为横向?这里提供详细步骤
-
默认情况下,MicrosoftWord将页面定向为纵向视图。虽然这在大多数情况下都很好,但你可能拥有在横向视图中看起来更好的页面或页面组。以下是实现这一目标的两种方法。无论使用哪种方法,请注意,如果...
- Word横竖混排你会玩吗?(word横排竖排混合)
-
我们在用Word排版的时候,一般都是竖版格式,但偶尔会需要到一些特殊的版式要求,比如文档中插入的一个表格,横向的内容比较多,这时就需要用到横版,否则表格显示不全。这种横竖版混排的要求,在Word20...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- navicat无法连接mysql服务器 (65)
- 下横线怎么打 (71)
- flash插件怎么安装 (60)
- lol体验服怎么进 (66)
- ae插件怎么安装 (62)
- yum卸载 (75)
- .key文件 (63)
- cad一打开就致命错误是怎么回事 (61)
- rpm文件怎么安装 (66)
- linux取消挂载 (81)
- ie代理配置错误 (61)
- ajax error (67)
- centos7 重启网络 (67)
- centos6下载 (58)
- mysql 外网访问权限 (69)
- centos查看内核版本 (61)
- ps错误16 (66)
- nodejs读取json文件 (64)
- centos7 1810 (59)
- 加载com加载项时运行错误 (67)
- php打乱数组顺序 (68)
- cad安装失败怎么解决 (58)
- 因文件头错误而不能打开怎么解决 (68)
- js判断字符串为空 (62)
- centos查看端口 (64)