当前位置: 首页 > 科技观察

FFmpeg命令帮你实现音视频编辑

时间:2023-03-12 08:38:23 科技观察

作者|宇瑞,单位:中国移动智能家居运营中心实验室以及视频复制使用、音视频解复用、回放等重要功能。FFmpeg作为一个多媒体框架,被各大音视频播放软件所采用,支持范围广泛的音视频格式,许多AndroidROM也内置了ffmpeg以提高音视频兼容性。FFmpeg项目中的ffmpeg工具功能非常强大,可以满足我们日常对视频的裁剪、合并、编辑等需求。Part01FFmpeg简介FFmpeg是一个非常有名的多媒体框架,可用于编码、解码、转码、音视频复用、音视频解复用、播放等重要功能。ffmpeg采用LGPLV2.1,部分可选组件采用GPLV2许可,其官网地址:https://ffmpeg.org/。FFmpeg作为多媒体框架被各大音视频播放软件使用,支持的音视频格式非常广泛,很多AndroidROM也内置了ffmpeg来提高音视频兼容性,中国移动的AOS-RM运行系统还内置了ffmpeg用于提供强大的兼容性。另一方面,FFmpeg项目也提供了几个重要的工具,分别是ffmpeg、ffplay和ffprobe。其中ffmpeg主要用于视频编辑操作,如转码、给视频添加背景音乐、添加特效等。ffplay工具主要用于播放音视频文件,ffprobe用于查看音频的详细信息和视频文件。Part02FFmpeg工具下载与安装Windows版下载页面:https://ffmpeg.org/download.html#build-windowsWindows版5:https://www.gyan.dev/ffmpeg/builds/packages/ffmpeg-5.0.1-full_build.7z下载到本地解压,配置好环境变量,在PATH中加入ffmpeg/bin路径。打开Windows命令行,输出ffmpeg-version,验证ffmpeg命令是否可以正常执行。Part03如何使用FFmpeg命令ffmpeg主要用于视频编辑操作,如转码、给视频添加背景音乐、添加特效等时间单位说明:-t后的时间单位为秒,-t后的时间格式-ss是HH:MM:SS(小时:分钟:秒)3.1。调整视频文件分辨率命令:ffmpeg-i输入文件名-swidth*height输出文件名示例:ffmpeg-i1.mp4-s640*480out.mp4示例说明:修改1.mp4文件的分辨率为640*4803.2。视频文件容器格式转换命令:ffmpeg-i输入文件输出文件示例:ffmpeg-i1.mp41.avi示例说明:将mp4格式转换为avi格式查看支持的格式:ffmpeg-formats3.3。视频文件编码格式转换命令:ffmpeg-i输入文件-vcodec视频格式-acodec音频格式输出文件示例:ffmpeg-i1.mp4-vcodechevc-acodecmp3out。mp4示例说明:视频编码格式转HEVC,音频编码格式转MP3查看支持格式:ffmpeg-codecs3.4。合并多个视频3.4.1。使用FFmpegconcatsplitter说明:要求编码格式一致。建议合并前将每个文件的分辨率转换成一致,否则视频无法正常播放。另外,使用该命令前,需要生成一个视频列表文件,可以手动创建,也可以使用命令创建。命令:ffmpeg-fconcat-ivideolistfile-ccopy输出文件示例:ffmpeg-fconcat-ifilelist.txt-ccopyoutput.mp4示例说明:将filelist.txt中指定的文件合并到output.mp4中windows命令行生成filelist.txt(读取以my开头的mp4文件):(for%iin(my*.mp4)do@echofile'%i')>filelist.txtfilelist.txt文件'my1的内容.mp4'文件'my2.mp4'文件'my3.mp4'3.4.2。使用FFmpegconcat协议说明:只能拼接特定格式的文件——如:mpg或mpeg传输流格式命令:ffmpeg-i"concat:file1|file2|file3"-c复制输出文件示例:ffmpeg-i"concat:1.mpg|2.mpg|3.mpg"-ccopyoutput.mpgffmpeg-i"concat:1.ts|2.ts|3.ts"-ccopyoutput.ts示例说明:合并1。mpg、2.mpg、3.mpg文件转换为output.mpg3.5。多张图片转视频命令:ffmpeg-r每秒图片数量-i图片文件名视频文件名示例:ffmpeg-r3-i%3d.jpgout.mp4示例说明:合并当前目录001.jpg中的图片以999.jpg以每秒3张的速度合成视频文件out.mp43.6。将多张图片转为视频并添加背景音乐命令:ffmpeg-r每秒图片数量-i图片文件名-i音频文件视频文件名示例:ffmpeg-r3-i%3d.jpg-itest.mp3out2.mp4示例说明:将当前目录001.jpg到999.jpg的图片以每秒3张的速度合成视频文件out.mp4,并添加音频补充说明:如果音频文件的长度大于video文件,合成后的视频会停留在最后一屏播放音频,此时可以加上-shortest参数,完整命令ffmpeg-r3-i%3d.jpg-itest.mp3-shortestout2.mp43.7。从视频中提取图片的命令:ffmpeg-i原始视频文件-ss开始时间-t时间长度-s宽度*高度-r每秒图片数量输出图片文件名示例:ffmpeg-i1.mp4-ss00:00:05-t5-s640*624-r3%3d.jpg示例说明:从1.mp4文件的第5秒到接下来的5s内容获取一张640*624分辨率的图片,每秒获取3张图片,%3d.jpg表示图片名称以001.jpg,002,.jpg形式存在图片的分辨率要和视频的分辨率一致,可以使用ffproble-i1.mp4来得到视频的分辨率信息。3.8.视频文件去除音频命令:ffmpeg-ioriginalvideofile-vcodeccopy-an去除音频后的视频文件示例:ffmpeg-i1.mp4-vcodeccopy-anout.mp4示例说明:-vcodeccopy表示视频编码格式保持不变,-an表示删除音频3.9。给视频文件添加背景音乐命令1:ffmpeg-i原始视频文件-i背景音乐文件-filter_complex[1:a]aloop=loop=-1:size=2e+09[out];[out][0:a]amix-tvideotime添加背景音乐后的视频文件示例:ffmpeg-i1.mp4-itest.mp3-filter_complex[1:a]aloop=loop=-1:size=2e+09[out];[out][0:a]amix-t10out.mp4示例说明:-filter_complexfilter,[1:a]aloop=loop=-1:size=2e+09[out];无限循环背景音,[out][0:a]amix将背景音和视频中的音频混合,-t10文件时长,单位秒,建议取原视频的总时长命令2:ffmpeg-i原始视频文件-stream_loop-1-i背景音乐文件-filter_complex[0:a][1:a]amix-t添加背景音乐后的时长视频文件示例:ffmpeg-ivideo.mp4-stream_loop-1-itest.mp3-filter_complex[0:a][1:a]amix-t10out4.mp4例子说明:-stream_loop-1参数-1代表循环输入源(背景音乐),[0:a][1:a]amix混合音频流0和1,-t10文件时长,单位秒,推荐值为原视频总时长3.10。视频文件替换音频命令:ffmpeg-an-i原始视频文件-stream_loop-1-i背景音乐文件-t时长输出视频文件示例:ffmpeg-an-i1.mp4-stream_loop-1-itest.mp3-t11out.mp4实例说明:将test.mp3文件添加到1.mp4中,并替换1.mp43.11中的原始音频。视频剪辑:保留一些剪辑3.11.1。去除标题命令:ffmpeg-ss开始时间-i原视频文件裁剪后的视频文件示例:ffmpeg-ss5-t10-i1.mp4out.mp4示例说明:去除前5秒的内容并保存到out.mp43.11.2。保留中间区域命令:ffmpeg-ss开始时间-t编辑后的总时长-i原始视频文件编辑后的视频文件时间单位为秒。示例:ffmpeg-ss5-t10-i1.mp4out.mp4示例说明:获取1.mp4文件的5s,保留10s长度的内容,保存到out.mp43.11.3。保留中间区域命令:fmpeg-ss开始时间-i原始视频文件-到结束时间-c剪辑视频文件示例:fmpeg-ss00:00:05-i1.mp4-to00:00:10-ccopy出去。mp4示例说明:获取1.mp4文件00:00:05到00:00:10的内容,保存到out.mp43.12中。加快播放速度3.12.1。视频加速命令:ffmpeg-ioriginalvideofile-filter:v"setpts=reciprocalofdoublespeed*PTS"编辑后的视频文件示例:ffmpeg-itest.mp4-filter:v"setpts=0.5*PTS"output.mp4示例说明:-filter:v"setpts=0.5*PTS"表示2倍速,0.5=1/2,值为0.25表示4倍速,值为2表示0.5倍慢速播放倍速的倒数范围[0.25,4]3.12.2。音频加速命令:ffmpeg-i原始视频文件-filter:"atempo=doublespeed"-vn编辑后的视频文件示例:ffmpeg-itest.mp4-filter:"atempo=2.0"-vnoutput.mp4示例说明:--filter:"atempo=2.0"表示2xspeedatempo配置范围在0.5到2.0之间,-vn表示去掉video3.12.3。加速音频和视频命令:ffmpeg-ioriginalvideofile-filter:v"setpts=reciprocalofdoublespeed*PTS"编辑后的视频文件示例:ffmpeg-itest.mp4-filter_complex"[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]"-map"[v]"-map"[a]"output2.mp4示例说明:音频和视频都快2倍示例2:ffmpeg-itest.mp4-filter_complex"[0:v]setpts=0.25*PTS[v];[0:a]atempo=2.0,atempo=2.0[a]"-map"[v]"-map"[a]"output3.mp4示例2说明:音频和视频均为4倍速。由于atempo的最大值为2,即3.13。图片转场特效命令设置两次:ffmpeg-loop1-tduration-i图片文件名-loop1-tduration-i图片文件名-filter_complex"xfade=transition=特效名:duration=特效时长:offset=视频转场的起始位置,format=yuv420p"编辑后的视频文件示例:ffmpeg-loop1-t3-i1.jpg-loop1-t3-i2.jpg-filter_complex"xfade=transition=rectcrop:duration=1:offset=2,format=yuv420p"out.mp4示例说明:要求图片1.jpg和2.jpg的分辨率相同,duration=1:offset=2表示转场效果从第二张开始秒,持续1秒。transition=rectcrop是一个过渡效果,rectcrop可以修改为其他可以用于特效的过渡效果参考:https://trac.ffmpeg.org/wiki/Xfade3.14。命令常用选项参考:https://ffmpeg。组织/ffmpeg.html