常见FFmpeg命令行全面分析

article/2025/11/10 23:50:17

FFmpeg多媒体库支持的命令行调用分为三个模块:ffmpeg、ffprobe、ffplay。其中ffmpeg命令行常用于音视频剪切、转码、滤镜、拼接、混音、截图等;ffprobe用于检测多媒体流格式;ffplay用于播放视频。详情可查阅FFmpeg官方文档:ffmpeg Documentation。

目录

一、ffmpeg命令行

1、命令行参数介绍

2、音频常见操作

2.1 音频转码

2.2 音频剪切

2.3 音频拼接

2.4 音频混音

2.5 空灵音效

2.6 惊悚音效

2.7 搞笑音效

2.8 静音检测

2.9 修改音量

2.10 抽取音频

2.11 音乐频谱波形图

3、视频常见操作

3.1 视频剪切

3.2 视频转码

3.3 视频截图

3.4 图片水印

3.5 GIF水印

3.6 去除水印

3.7 视频拼接

3.8 视频翻转

3.9 视频降噪

3.10 视频抽帧

3.11 播放速度

3.12 插入封面

3.13 旋转视频

3.14 黑白视频

3.15 转换3D的VR视频

二、ffplay命令行

三、ffprobe命令行


一、ffmpeg命令行

1、命令行参数介绍

Print help / information / capabilities:
--help topic        show help
-version            show version
-formats            show available formats
-muxers             show available muxers
-demuxers           show available demuxers
-devices            show available devices
-codecs             show available codecs
-decoders           show available decoders
-encoders           show available encoders
-bsfs               show available bit stream filters
-protocols          show available protocols
-filters            show available filters
-pix_fmts           show available pixel formats
-sample_fmts        show available audio sample formats
-hwaccels           show available HW acceleration methodsGlobal options (affect whole program instead of just one file:
-v loglevel         set logging level
-y                  overwrite output files
-n                  never overwrite output files
-filter_threads     number of non-complex filter threads
-stats              print progress report during encoding
-vol volume         change audio volume (256=normal)Per-file main options:
-f fmt              force format
-c codec            codec name
-codec codec        codec name
-t duration         record or transcode "duration" seconds of audio/video
-to time_stop       record or transcode stop time
-fs limit_size      set the limit file size in bytes
-ss time_off        set the start time offset
-sseof time_off     set the start time offset relative to EOF
-frames number      set the number of frames to output
-filter filter_graph  set stream filtergraph
-discard            discard
-disposition        dispositionVideo options:
-vframes number     set the number of video frames to output
-r rate             set frame rate (Hz value, fraction or abbreviation)
-s size             set frame size (WxH or abbreviation)
-aspect aspect      set aspect ratio (4:3, 16:9 or 1.3333, 1.7777)
-bits_per_raw_sample number  set the number of bits per raw sample
-vn                 disable video
-vcodec codec       force video codec ('copy' to copy stream)
-timecode hh:mm:ss[:;.]ff  set initial TimeCode value.
-vf filter_graph    set video filters
-ab bitrate         audio bitrate (please use -b:a)
-b bitrate          video bitrate (please use -b:v)Audio options:
-aframes number     set the number of audio frames to output
-aq quality         set audio quality (codec-specific)
-ar rate            set audio sampling rate (in Hz)
-ac channels        set number of audio channels
-an                 disable audio
-acodec codec       force audio codec ('copy' to copy stream)
-vol volume         change audio volume (256=normal)
-af filter_graph    set audio filtersSubtitle options:
-s size             set frame size
-sn                 disable subtitle
-scodec codec       force subtitle codec ('copy' to copy stream)

命令行整体格式:以ffmpeg开头,参数之间用空格隔开,每个参数key以"-"开头,后面跟着参数value,输出文件放在命令行最后。

2、音频常见操作

2.1 音频转码

直接转码:

ffmpeg -i input.mp3 output.m4a

指定编码器、采样率、声道数转码:

ffmpeg -i input.mp3 -acodec aac -ac 2 -ar 44100 output.m4a

2.2 音频剪切

-ss 10指定从第10秒开始,-t 20代表剪切20秒

ffmpeg -i input.mp3 -ss 10 -t 20 cut.mp3

2.3 音频拼接

ffmpeg -i concat:"hello.mp3|world.mp3" -acodec copy -vn concat.mp3

2.4 音频混音

使用amix,参数inputs代表输入流个数,duration有longest、shortest、first三种模式,weights设置每条流音量权重占比:

ffmpeg -i hello.mp3 -i world.mp3 -filter_complex amix=inputs=2:duration=first -vn mix.mp3

使用amerge,合并成多声道输出:

ffmpeg -i hello.mp3 -i world.mp3 -filter_complex [0:a][1:a]amerge=inputs=2[aout] -map [aout] merge.mp3

2.5 空灵音效

aecho接收4个参数:in_gain (0, 1];out_gain (0, 1];delays (0 - 90000];decays (0 - 1.0]

ffmpeg -i input.mp3 -af aecho=0.8:0.8:1000:0.5 echo.mp3

2.6 惊悚音效

tremolo接收2个参数:frequency [0.1, 20000.0];depth (0, 1]

ffmpeg -i input.mp3 -af tremolo=5:0.9 tremolo.mp3

2.7 搞笑音效

搞笑音效通过调节音速实现,使用atempo:

ffmpeg -i input.mp3 -filter_complex atempo=2 atempo.mp3

2.8 静音检测

ffmpeg -i input.mp3 -af silencedetect=noise=0.0001 -f null -

2.9 修改音量

ffmpeg -i input.mp3 -af volume=0.5 volume.mp3

2.10 抽取音频

从视频抽取音频,直接disable视频流:

ffmpeg -i input.mp4 -vn out.mp3

 从视频抽取音频,disable视频流,音频进行转码:

ffmpeg -i input.mp4 -acodec aac -vn out.m4a

从视频抽取音频,如果存在多个音轨,可以指定某个音轨:

ffmpeg -i input.mp4 -map 0:1 -vn out.mp3

2.11 音乐频谱波形图

使用showwavespic可以获取频谱波形图,以图像形式输出,参数s指定图像的宽高,示例如下:

ffmpeg -i input.mp3 -filter_complex showwavespic=s=1280x720 waveform.png

3、视频常见操作

3.1 视频剪切

基本剪切,指定起始时间、剪切时长:

ffmpeg -i input.mp4 -ss 10 -t 20 -codec copy cut.mp4

精确剪切,包含多音轨,-map 0代表所有track流进行剪切,-accurate_seek代表精确seek:

ffmpeg -ss 10 -accurate_seek -i input.mp4 -t 20 -map 0 -codec copy cut.mp4

3.2 视频转码

使用-vcodec指定视频编码,-acodec指定音频编码,-s 640x480指定视频分辨率,-b 200k指定码率,-r 20指定帧率,这样达到视频压缩效果:

ffmpeg -i input.mp4 -vcodec libx264 -acodec aac -s 640x480 -b 200k -r 20 transcode.mp4

3.3 视频截图

使用-vframes指定截图数量,-ss指定起始时间放在-i前面,这样保证先seek到指定位置再截图。如果是先-i指定输入文件再-ss,是从时间0开始解码,直到指定时间再截图,这样效率太低:

ffmpeg -ss 10 -i input.mp4 -f image2 -vframes 1 -an screenshot.jpg

3.4 图片水印

使用-filter_complex指定位置overlay=x:y,如下所示:

ffmpeg -i input.mp4 -i logo.png -filter_complex overlay=10:20 pic_watermark.mp4

如果要灵活设置左上角、右上角、左下角、右下角位置,可以使用case语句,其中main_w代表视频宽度,main_h代表视频高度,overlay_w代表水印宽度,overlay_h代表水印高度:

public static String obtainOverlay(int offsetX, int offsetY, int location) {switch (location) {case 2:return "overlay='(main_w-overlay_w)-" + offsetX + ":" + offsetY + "'";case 3:return "overlay='" + offsetX + ":(main_h-overlay_h)-" + offsetY + "'";case 4:return "overlay='(main_w-overlay_w)-" + offsetX + ":(main_h-overlay_h)-" + offsetY + "'";case 1:default:return "overlay=" + offsetX + ":" + offsetY;}
}public static String[] addWaterMarkImg(String inputPath, String imgPath, int location,int offsetXY, String outputPath) {String overlay = obtainOverlay(offsetXY, offsetXY, location);String waterMarkCmd = "ffmpeg -i %s -i %s -filter_complex %s -preset:v superfast %s";waterMarkCmd = String.format(waterMarkCmd, inputPath, imgPath, overlay, outputPath);return waterMarkCmd.split(" ");}

3.5 GIF水印

使用-ignore_loop 0代表GIF循环显示,其他操作与图片水印一致:

ffmpeg -i input.mp4 -ignore_loop 0 -i logo.gif -filter_complex overlay=10:20 gif_mark.mp4

3.6 去除水印

使用delogo命令,然后指定水印位置:

ffmpeg -i input.mp4 -filter_complex delogo=x=10:y=20:w=90:h=30 delogo.mp4

3.7 视频拼接

视频拼接分为垂直拼接、水平拼接,还有前后拼接,这里主要介绍垂直与水平拼接,其中使用hstack做水平拼接,vstack做垂直拼接:

ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex hstack out.mp4

3.8 视频翻转

使用reverse实现视频翻转,但是处理比较耗时:

ffmpeg -i input.mp4 -vf reverse -an output.mp4

3.9 视频降噪

使用-nr代表noise reduction,进行视频降噪:

ffmpeg -i in.mp4 -nr 500 out.mp4

3.10 视频抽帧

ffmpeg -ss 20 -accurate_seek -t 10 -i input.mp4 -an -r 5 %3d.jpg

3.11 播放速度

使用setpts设置视频速度,atempo设置音频速度:

ffmpeg -i in.mp4 -filter_complex [0:v]setpts=%.2f*PTS[v];[0:a]atempo=%.2f[a] -map [v] -map [a] out.mp4

3.12 插入封面

其中-disposition:v:1 attached_pic代表封面:

ffmpeg -i in.mp4 -i photo.png -map 0 -map 1 -c copy -c:v:1 png -disposition:v:1 attached_pic out.mp4

3.13 旋转视频

ffmpeg -i in.mp4 -c copy -metadata:s:v:0 rotate=90 out.mp4

3.14 黑白视频

ffmpeg -i in.mp4 -vf lutyuv='u=128:v=128' out.mp4

3.15 转换3D的VR视频

使用ffmpeg的stereo3d可以把视频转换为3D视频,控制参数如下: 

输入: 

        sbsl: 两边平行(左眼在左边,右眼在右边)

        sbsr: 双眼交叉(右眼在左边,左眼在右边)

        abl  : 上下排列(左眼在上面,右眼在下面)

        abr : 上下排列(右眼在上面,左眼在下面)

        al    : 交替显示(左眼奇数帧,右眼偶数帧)

        ar    : 交替显示(右眼奇数帧,左眼偶数帧)

输出:

        arbg: 立体照片,红蓝颜色(左眼红色,右眼蓝色)

        argg: 立体照片,红绿颜色(左眼红色,右眼绿色)

        agmg: 立体照片,绿色紫红(左眼绿色,右眼紫红)

        aybg: 立体照片,黄蓝颜色(左眼黄色,右眼蓝色)

示例如下:

ffmpeg -i input.mp4 -filter_complex stereo3d=sbsl:arbg stereo3d.mp4

生成的3D立体VR视频效果如下:

二、ffplay命令行

ffplay主要用于播放视频,也可以播放网络流,示例如下:

ffplay -i beyond.mp4

三、ffprobe命令行

ffprobe主要用于检测多媒体信息,包括时长、视频分辨率、帧率、音频采样率、声道数、每个stream流信息等等。支持显示形式包括:json和xml,例如-print_format json

ffprobe -i input.mp4 -show_streams -show_format -print_format json

如果要显示每帧数据信息,使用-show_frames可以显示pts、packet_size、duration、frame_type等信息:

ffprobe -i input.mp4 -show_frames

如果只要显示视频流,使用-select_streams v。其中v代表video,a代表audio,s代表subtitle。

ffprobe -i input.mp4 -show_frames -select_streams v

对FFmpeg音视频感兴趣的朋友,可以去GitHub开源项目学习:FFmpegAndroid

视频教程:一起学习音视频​​​​​​​


http://chatgpt.dhexx.cn/article/SrTAMC4j.shtml

相关文章

ffmpeg 常用命令汇总

​​​​​​经常用到ffmpeg做一些视频数据的处理转换等,用来做测试,今天总结了一下,参考了网上部分朋友的经验,一起在这里汇总了一下。 1、ffmpeg使用语法 命令格式: ffmpeg -i [输入文件名] [参数选项] -f [格…

FFmpeg常用基本命令行

本文收集记录了笔者使用过的FFmpeg命令,亲测可用,并不是简单的copy别人的FFmpeg大全,下面的命令大部分都是本人测试成功过的,大家可以放心使用。 音视频技术是程序员日常生活中经常用到的,比如转码需求,同事…

Eclipse启动Tomcat逐渐变慢

现象 1、Eclipse用着用着发现启动Tomcat特别慢 原因 断点打多了,之前调试的断点没有取消,导致启动时加载断点,拖慢启动 解决方案 1、点击debug按钮 2、选择breakpoint选项 清空所有断点 3、重新启动

eclipse 解决启动慢、运行慢的方法总结(最全)

由于 CSDN 的目录只在固定地方显示,并不是很方便阅读,又占空间,所以本文章已同步更新到个人博客上,在个人博客上的文章,有滑动侧边目录栏,阅读体验更加,而且文章的样式也更为丰富,推…

eclipse卡慢解决办法

1.设置JVM运行内存 1.1编辑eclipse.ini 1.2 编辑eclipse.ini,设置jvm运行内存参数,最小内存:物理内存*0.2, 最大内存: 物理内存*0.6; 其中-vmargs为必须添加参数(-vmargs的意思是设置JVM参数),…

eclipse启动很慢调优

前几天装了个eclipse,发现真的启动很慢,而且运行程序也慢,检查了不是网络问题,jsp修改一下,一保存就卡死,要等十几秒,感觉不能忍,所以就上网找资料,但是都不全面,小编接下…

Eclipse 解决启动慢

般在不对eclipse进行相关设置的时候,使用eclipse总是会觉得启动好慢,用起来好卡,其实只要对eclipse的相关参数进行一些配置,就会有很大的改善。 加快启动速度 1.在eclipse启动的时候,它总是会搜索让其运行的jre&…

Eclipse如何解决启动慢

一般在不对eclipse进行相关设置的时候,使用eclipse总是会觉得启动好慢,用起来好卡,其实只要对eclipse的相关参数进行一些配置,就会有很大的改善。 加快启动速度 1.在eclipse启动的时候,它总是会搜索让其运行的jre&a…

eclipse启动tomcat慢

eclipse的oxygen.3(4.7)版本和Photon(4.8)版本,在启动tomcat时会启动内部安全检测机制,因而在启动tomcat时会消耗很多时间。 查看eclipse版本方法: 解决办法: 用eclipse的idea(4.9)或者neon.3(4.6)以及之前的版本 这里提供 neon…

Eclipse如何解决启动慢?

一般在不对eclipse进行相关设置的时候,使用eclipse总是会觉得启动好慢,用起来好卡,其实只要对eclipse的相关参数进行一些配置,就会有很大的改善。 加快启动速度 1.在eclipse启动的时候,它总是会搜索让其运行的jre&am…

解决eclipse启动太慢的问题

我用的是eclipse for javaee(2017版) 电脑i5-4210u,内存4G,硬盘机械7200转,启动eclilpse至少要一分钟 百度上找了优化教程,试了很多,例如修改了启动项,但效果微乎其微,但试了下面这…

如何解决Eclipse启动慢?多图、Eclipse详细配置说明

一般在不对eclipse进行相关设置的时候,使用eclipse总是会觉得启动好慢,用起来好卡,其实只要对eclipse的相关参数进行一些配置,就会有很大的改善。 加快启动速度 1.在eclipse启动的时候,它总是会搜索让其运行的jre&am…

Eclipse解决启动慢

一般在不对eclipse进行相关设置的时候,使用eclipse总是会觉得启动好慢,用起来好卡,其实只要对eclipse的相关参数进行一些配置,就会有很大的改善。 一、加快启动速度 1.在eclipse启动的时候,它总是会搜索让其运行的…

Eclipse如何解决启动慢的问题,超全!!!

一般在不对eclipse进行相关设置的时候,使用eclipse总是会觉得启动好慢,用起来好卡,其实只要对eclipse的相关参数进行一些配置,就会有很大的改善。 加快启动速度 1.在eclipse启动的时候,它总是会搜索让其运行的jre&a…

Eclipse启动慢解决方案

Eclipse 解决启动慢、运行慢的方法总结 修改配置文件 修改 eclipse 的配置文件 eclipse.ini ,由于 eclipse 的默认配置中最大运行内存只设置了 256 m,明显太低了,我们要适当调高点。 我的笔记本配置是固态硬盘8G内存条,但是已经用…

解决eclipse启动慢方法

转自:http://blog.csdn.net/xfz0330/article/details/48915293 每次启动eclipse时都要等待半分钟左右,对于追求效率的程序员来说,等待每一秒都是一种折磨,出于高效开发的精神,这个问题必须解决掉。方案如下&#xff1a…

解决eclipse启动慢

每次启动eclipse时都要等待半分钟左右,对于追求效率的程序员来说,等待每一秒都是一种折磨,出于高效开发的精神,这个问题必须解决掉。方案如下: ①在工具栏中的help中找到about eclipse——>installation details ②…

Eclipse设置、调优、使用

eclipse调优 一般在不对eclipse进行相关设置的时候,使用eclipse总是会觉得启动好慢,用起来好卡,其实只要对eclipse的相关参数进行一些配置,就会有很大的改善。 加快启动速度 1.在eclipse启动的时候,它总是会搜索让…

KCF算法数学推导及算法流程图

参考文章:https://blog.csdn.net/shenxiaolu1984/article/details/50884830 https://blog.csdn.net/discoverer100/article/details/53835507 https://blog.csdn.net/discoverer100/article/details/54345209 https://blog.csdn.net/mhz9123/article/details/516…

KCF原理分析

KCF作为单目标跟踪的经典之作,在准确率和实时性上都有非常不错的表现,特别对算力要求不高。 算法亮点:1. 通过循环矩阵生成正负样本来训练脊回归分类器; 2. 利用循环矩阵可DFT对角化的性质,将循环矩阵的求逆运算转化为…