ffmpeg命令行使用

这篇具有很好参考价值的文章主要介绍了ffmpeg命令行使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

查看视频信息

ffmpeg -i 视频名字

ffmpeg命令行使用
视频名字这里输入前几个字符按 tab 键可以自动补全

返回结果:
ffmpeg命令行使用

红框之内的内容没什么用

编码器 :encoder : Lavf57.25.100
持续时间:Duration: 00:14:20.58, start: 0.000000, bitrate: 381 kb/s
Duration 持续时间,start 开始时间,bitrate比特率

视频流: Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yu
v420p, 1360x768, 182 kb/s, 29.94 fps, 30 tbr, 15360 tbn, 30720 tbc (default)
h264编码格式,avc1封装格式,yuv420p每一帧的格式,1360x768分辨率,182 kb/s 视频比特率,29.94 fps帧数

音频流: Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, flt
p, 191 kb/s (default)
aac 编码格式,mp4a 封装格式,44100 Hz 采样率,stereo 立体声,fltp 浮点型,191 kb/s (default)音频比特率

去除音频

ffmpeg -i 文件名 -an -vcodec copy 文件名.mp4

-an去除音频,-vcodec copy拷贝源数据的视频流到文件名.mp4文件里面

去除视频

ffmpeg -i 文件名 -vn -acodec copy 文件名.mp4

-vn去除音频,-acodec copy拷贝源数据的音频流到文件名.mp4文件里面

保存音频为AAC文件

 ffmpeg -i 文件名.mp4 -vn -acodec copy 文件名.aac

改变视频分辨率

ffmpeg -i 文件名.mp4 -vf scale=640:360 文件名.mp4

scale=后面填写的是修改后的分辨率

ffmpeg -i 文件名.mp4 -vf scale=iw*2:ih*2 文件名.mp4

把分辨率变成两倍,也可以*0.5变成二分之一

隐藏无用信息

ffmpeg -i 文件名.mp4 -hide_banner

ffmpeg命令行使用

添加水印

ffmpeg -i 文件名.mp4 -i 水印.png -filter_complex overlay out.mp4

默认左上角,overlay=W-w 是右上角,overlay=0:H-h 是左下角,overlay=W-w:H-h 是右下角
大写的 H 是视频的高度,大写的 W 是视频的宽度,小写的 h 是水印的高度,小写的 w 是水印的宽度。

去除水印

ffmpeg -i 文件名.mp4 -vf delogo=x:y:w:h:show out.mp4

x,y 确定logo的位置坐标
w,h 设置logo的宽高
show 表示是否显示矩形框,默认是 0 不显示,1 是显示

添加文字水印

ffmpeg -i 文件名.mp4 -vf drawtext=text='内容':fontcolor='颜色':fontsize=字号 out.mp4

截取视频

ffmpeg -i 文件名.mp4 -ss 秒 -to 时间 out.mp4

从多少秒开始,截取多长时间的视频

视频转换为gif

ffmpeg -i 文件名.mp4 -ss 10 -t 5 -s 640*320 -r 15 out.mp4

-ss 开始时间
-t 持续时间
-i 后面是源文件
-s 动图分辨率
-r 帧率

ffmpeg -i 文件名.mp4 -vframes 30 out.gif

-vframes 30 视频前三十帧
把视频前三十帧转换为gif

视频压缩之 -crf

ffmpeg -i 文件名.mp4 -c:v libx264 -crf 23 out.mp4

×264 默认值是 23(建议18 - 28)
×265 默认是28(建议24 - 34)
两个的可用值是 0 到 51
值越小编码质量越好,码率越高
其中 0 可以说是无损的,51质量最差
crf 差别为6就会导致文件大小加倍或者减半

视频压缩之 -preset

ffmpeg -i 文件名.mp4 -vocdec libx264 -preset xxx -crt 25 out.mp4

preset 主要影响编码的速度,并不会很大影响输出文件的大小
x264编码算法有下列参数值
ultrafast 编码速度最快压缩率低,生成文件很大
superfa
veryfast
faster
fast
medium x264默认标准
slow
slower
veryslow
placebo 编码速度最慢,压缩率高,生成文件小

xxx 就是填入下列的参数

给视频或图像加上黑边

ffmpeg -i 文件名.mp4 -vf pad=1080:720:0:56:black out.mp4

pad后面参数值依次为:宽,高,x坐标,y坐标,默认是黑边可以不写
56:(720 - 680)/2=56
1080 x 608分辨率变成 1080 x 720分辨率

转格式

ffmpeg -i out.mp4 -vcodec copy -acodec copy out.flv

上面的命令表式的是音频、视频都直接 copy,只是将 mp4 的封装格式转成了flv。
copy是把原来的并不条件

  • -i: 输入文件
  • -vcodec copy : 视频编码处理方式
  • -acodec copy: 音频编码处理方式

音视频合并

ffmpeg -i out.h264 -i out.aac -vcodec copy -acodec copy out.mp4

提取YUV数据

ffmpeg -i input.mp4 -an -c:v rawvideo -pixel_format yuv420p out.yuv

ffplay -s (wxh分辨率,stream中看) out.yuv
  • -an: a代表audio,n代表no不包括音频的
  • -c:v rawvideo 指定将视频转成原始数据
  • -pixel_format yuv420p 指定转换格式为yuv420p(4:2:0)

YUV转H264

ffmpeg -f rawvideo -pix_fmt yuv420p -s 320x240 -r 30 -i out.yuv -c:v libx264 -f rawvideo out.h264

提取PCM数据

ffmpeg -i out.mp4 -vn -ar 44100 -ac 2 -f s16le out.pcm

播放的时候参数也要和上面一样,因为不知道你用什么采样率和声道是啥

ffplay -ar 44100 -ac 2 -f s16le -i out.pcm
  • -vn: v代表video,n代表不要视频
  • -ar: a代表audio,r代表read,采样率44100 44.1k
  • -ac: a代表audio,c2代表双声道还有立体声,环绕立体声
  • -f: 音频抽取出来的存取格式, s16 s代表有符号的,每一位16位表示

PCM转WAV

ffmpeg -f s16be -ar 8000 -ac 2 -acodec pcm_s16be -i input.raw output.wav

查看有哪些设备

首先通过下面的命令查看一下 mac 上都有哪些设备。

ffmpeg -f avfoundation -list_devices true -i ""

录屏

yuv播放的时候需要指定宽高

ffmpeg -f avfoundation -i 1 -r 30 out.yuv
  • -f 指定使用 avfoundation 采集数据。
  • -i 指定从哪儿采集数据,它是一个文件索引号。在我的MAC上,1代表桌面(可以通过上面的命令查询设备索引号)(1其实是个索引,屏幕是1,摄像头是0)。
  • -r 指定帧率。按ffmpeg官方文档说-r与-framerate作用相同,但实际测试时发现不同。-framerate 用于限制输入,而-r用于限制输出。

注意,桌面的输入对帧率没有要求,所以不用限制桌面的帧率。其实限制了也没用。

播放

录制的时候会提示

Stream #0:0: Video: rawvideo (UYVY / 0x59565955), uyvy422, 3360x2100,
q=2-31, 3386880 kb/s, 30 fps, 30 tbn, 30 tbc

-s 3360x2100
-pix_fmt uyvy422

ffplay -s xxxxx(你录制时候的宽高) -pix_fmt (也是你录制时候的格式) ./out.yuv

录屏+声音

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 32k  out.flv
ffmpeg -y -f avfoundation -i 1:0 -framerate 60 -c:v libx264 -r 60 -pix_fmt yuv420p -preset 0 -crf 19 -c:a aac -b:a 192k "$HOME/Screen Record $(date "+%Y-%m-%d %H-%M-%S").mp4"
  • -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的缩与

录视频

ffmpeg -framerate 30 -f avfoundation -i 0 out.mp4 
  • -framerate 限制视频的采集帧率。这个必须要根据提示要求进行设置,如果不设置就会报错。
  • -f 指定使用 avfoundation 采集数据。
  • -i 指定视频设备的索引号

视频+音频

ffmpeg -framerate 30 -f avfoundation -i 0:0 out.mp4 

录音

ffmpeg -f avfoundation -i :0 out.wav

0是代表设备的索引,可以去上面查看

录制好了播放

ffplay ./out.wav

录制音频裸数据

ffmpeg  -f avfoundation -i :0 -ar 44100 -f s16le out.pcm

视频缩小一倍

ffmpeg -i out.mp4 -vf scale=iw/2:-1 scale.mp4
  • -vf scale 指定使用简单过滤器 scale,iw/2:-1 中的 iw 指定按整型取视频的宽度。 -1 表示高度随宽度一起变化。

视频裁剪

ffmpeg -i VR.mov  -vf crop=in_w-200: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,说明从左上角开始裁剪。如果不写是从中心点裁剪。

倍速播放

ffmpeg -i out.mp4 -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" speed2.0.mp4
  • -filter_complex 复杂滤镜,[0:v]表示第一个(文件索引号是0)文件的视频作为输入。setpts=0.5*PTS表示每帧视频的pts时间戳都乘0.5,也就是差少一半。[v]表示输出的别名。音频同理就不详述了。
  • map 可用于处理复杂输出,如可以将指定的多路流输出到一个输出文件,也可以指定输出到多个文件。"[v]"复杂滤镜输出的别名作为输出文件的一路流。上面 map的用法是将复杂滤镜输出的视频和音频输出到指定文件中。

对称视频

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。

画中画

ffmpeg -i out.mp4 -i out1.mp4 -filter_complex "[1:v]scale=w=176:h=144:force_original_aspect_ratio=decrease[ckout];[0:v][ckout]overlay=x=W-w-10:y=0[out]" -map "[out]" -movflags faststart new.mp4

录制画中画

ffmpeg  -f avfoundation -i "1" -framerate 30 -f avfoundation -i "0:0" 
-r 30 -c:v libx264 -preset ultrafast 
-c:a libfdk_aac -profile:a aac_he_v2 -ar 44100 -ac 2 
-filter_complex "[1:v]scale=w=176:h=144:force_original_aspect_ratio=decrease[a];[0:v][a]overlay=x=W-w-10:y=0[out]" 
-map "[out]" -movflags faststart -map 1:a b.mp4

多路视频拼接

ffmpeg  -f avfoundation -i "1" -framerate 30 -f avfoundation   -i "0:0" -r 30 -c:v libx264 -preset ultrafast -c:a libfdk_aac -profile:a aac_he_v2 -ar 44100 -ac 2 -filter_complex "[0:v]scale=320:240[a];[a]pad=640:240[b];[b][1:v]overlay=320:0[out]" -map "[out]" -movflags faststart  -map 1:a  c.mp4

添加水印

ffmpeg -i out.mp4  -vf "movie=logo.png,scale=64:48[watermask];[in][watermask] overlay=30:10 [out]" water.mp4
  • -vf中的 movie 指定logo位置。scale 指定 logo 大小。overlay 指定 logo 摆放的位置。

删除水印

先通过 ffplay 找到要删除 LOGO 的位置

ffplay -i test.flv -vf delogo=x=806:y=20:w=70:h=80:show=1

使用 delogo 滤镜删除 LOGO

ffmpeg -i test.flv -vf delogo=x=806:y=20:w=70:h=80 output.flv

裁剪

ffmpeg -i out.mp4 -ss 00:00:00 -t 10 out1.mp4
  • -ss 指定裁剪的开始时间,精确到秒,时:分:秒
  • -t 被裁剪后的时长,单位为秒

合并

首先创建一个 inputs.txt 文件,文件内容如下:

file ‘1.flv’
file ‘2.flv’
file ‘3.flv’

然后执行下面的命令:

ffmpeg -f concat -i inputs.txt -c copy output.flv

hls切片

ffmpeg -i out.mp4 -c:v libx264 -c:a libfdk_aac -strict -2 -f hls  out.m3u8
  • -strict -2 指明音频使有AAC。
  • -f hls 转成 m3u8 格式。

视频转JPEG

ffmpeg -i test.flv -r 1 -f image2 image-%3d.jpeg
  • -r : 图片转出的帧率,每秒钟转出1张图片
  • -f : 将输入文件转成什么格式
  • %3d是动态的,3个数字组成的

视频转gif

ffmpeg -i out.mp4 -ss 00:00:00 -t 10 out.gif

图片转视频

这个会一下把所有帧全部输出文章来源地址https://www.toymoban.com/news/detail-402629.html

ffmpeg  -f image2 -i image-%3d.jpeg images.mp4
  • -i : 表示输入,后面是图片

播放YUV 数据

ffplay -pix_fmt nv12 -s 192x144 1.yuv 

播放YUV中的 Y平面

ffplay -pix_fmt nv21 -s 640x480 -vf extractplanes='y' 1.yuv

到了这里,关于ffmpeg命令行使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android 使用FFmpeg3.3.9基于命令实现视频压缩

    前言 首先利用linux平台编译ffmpeg的so库,具体详情请查看文章:Android NDK(ndk-r16b)交叉编译FFmpeg(3.3.9)_jszlittlecat_720的博客-CSDN博客    点击Create JNI function for compressVideo 自动打开native-lib.cpp并创建完成Java_com_suoer_ndk_ffmpegtestapplication_VideoCompress_compressVideo 方法  在此方法下实现压缩

    2024年02月02日
    浏览(53)
  • Linux下使用lscpu命令查看CPU详细信息

    在Linux系统上使用 lscpu 命令,会显示当前系统中处理器的相关信息,包括处理器架构、CPU频率、CPU核心数、线程数、缓存大小、字节序等等,可以很好的了解系统的处理能力和硬件配置情况,下面是一些常见的输出解释: 下面是在一台实际服务器上执行的输出以及解释: N

    2024年02月04日
    浏览(47)
  • 【FFmpeg】ffmpeg 命令行参数 ⑧ ( 使用 ffmpeg 转换封装格式 | 音视频编解码器参数设置 | 视频 帧率 / 码率 / 分辨率 设置 | 音频 码率 / 采样率 设置 )

    音视频 文件 从 采样 - 处理 - 得到原始数据帧队列 - 音视频编码 - 音视频包队列 - 格式封装 的过程如下 : 封装格式 参考 【音视频原理】音视频 “ 采样 - 编码 - 封装 过程 “ 和 “ 解封装 - 解码 - 播放 过程 “ 分析 ( 视频采集处理流程 | 音频采集处理流程 | 音视频文件解封装

    2024年04月17日
    浏览(85)
  • 使用ADB命令查看手机已安装应用详细信息,包含应用名称

    最近有个需求需要获取手机上已安装应用列表,需要包含应用名称(非包名)、版本号、包名等信息,记录一下解决过程。 使用adb命令查看设备已安装应用列表很简单 但命令只能获取到应用包名 想要获取应用的详细信息需要使用以下命令 但查看输出发现,该命令可以获取到

    2024年02月15日
    浏览(56)
  • FFmpeg:打印音/视频信息(Meta信息)

    多媒体文件其实是个容器 在容器里面有很多流(Stream/Track) 每种流是由不同的编码器编码的 从流中读出的数据称为包 在一个包中包含着一个或多个帧 AVFormatContext AVStream AVPacket av_register_all()  avformat_open_input()/avformat_close_input() av_dump_format() :打印音视频的meta信息 具体来看一下

    2024年02月08日
    浏览(44)
  • docker命令(查看容器状态stats、容器的导入导出、docker容器的详细信息inspect、docker cp命令的使用)

    目录 查看docker容器状态: docker镜像的导入导出  第一种导入导出(是docker本地的静态) 第二种导出导入 (这种导出是正在运行的容器里的文件系统变成一个归档文件(可以包含已经下载好的软件)) docker容器的详细信息: 命令: 设置docker容器资源限制,再通过inspect查看 d

    2024年02月10日
    浏览(53)
  • FFmpeg获取媒体文件的视频信息

    视频包标志位 代码 结果 视频帧率 结果 视频编解码器 代码 结果 视频帧宽高 代码 结果 视频长度 代码 结果 完整代码 结果

    2024年02月07日
    浏览(121)
  • ffmpeg 实用命令 -- 截取视频

    截图 下例利用 select 过滤器,抽取了视频中的第 86 帧,保存为 extract.png: 帧是从0开始的,所以要写85才是对应第86帧  如果不需要特别精确,也可以用时间戳来截取: 截取视频 下面,以想要截取 video.mp4 视频的第2到第5分钟为例。 对于容易计算片段秒数的截取任务(本例

    2024年01月19日
    浏览(38)
  • FFmpeg命令分隔视频

          有一个视频如a.mp4,此视频采用帧率为30生成,共有299帧,这里通过FFmpeg命令分隔成1秒一个个的小视频,即每个小视频帧数为30帧。       用到的FFmpeg参数如下所示:       (1).-i:指定输入视频文件的名称;       (2).-c:指定编解码器;copy是一个特殊编解码器,它直接复

    2024年02月03日
    浏览(34)
  • ffmpeg视频音频命令

    视频音频合并,以视频时间为主,音频短了循环 方法1:混音,视频权重0,volume调节音量,aloop无限循环,duration:first为第一个素材的长度 ffmpeg -i video.mp4 -i audio.mp3 -filter_complex \\\"[1:a]volume=0.5[a1];[a1]aloop=loop=-1:size=2e+09[a2];[0:a][a2]amix=inputs=2:duration=first:weights=\\\'0 1\\\'[a]\\\" -map 0:v -map \\\"[a]\\\"

    2024年02月13日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包