FFmpeg功能命令集合(超详细)

参考

ffmpeg常用命令

ffmpeg参数中文详细解释

[总结]FFMPEG视音频编解码零基础学习方法

一、安装

打开https://ffmpeg.zeranoe.com/builds/,该网站中的FFMPEG分为3个版本:Static,Shared,Dev。

前两个版本可以直接在命令行中使用,他们的区别在于:Static里面只有3个应用程序:ffmpeg.exe,ffplay.exe,ffprobe.exe,每个exe的体积都很大,相关的Dll已经被编译到exe里面去了。Shared里面除了3个应用程序:ffmpeg.exe,ffplay.exe,ffprobe.exe之外,还有一些Dll,比如说avcodec-54.dll之类的。Shared里面的exe体积很小,他们在运行的时候,到相应的Dll中调用功能。Dev版本是用于开发的,里面包含了库文件xxx.lib以及头文件xxx.h,这个版本不包含exe文件。

image.png

放一个mp4视频,然后把声音提取到output.acc,用命令测试一下:ffmpeg -i mov_bbb.mp4 -acodec copy -vn output.aac

二、常用命令

主要参数:

-i 设定输入流 
-f 设定输出格式 
-ss 开始时间

视频参数:

-b 设定视频流量(码率),默认为200Kbit/s 
-r 设定帧速率,默认为25 
-s 设定画面的宽与高 
-aspect 设定画面的比例 
-vn 不处理视频 
-vcodec 设定视频编解码器,未设定时则使用与输入流相同的编解码器 

音频参数:

-ar 设定采样率 
-ac 设定声音的Channel数 
-acodec 设定声音编解码器,未设定时则使用与输入流相同的编解码器 
-an 不处理音频

1. 视频格式转换

(其实格式转换说法不太准确,但大家都这么叫,准确的说,应该是视频容器转换)

比如一个avi文件,想转为mp4,或者一个mp4想转为ts。

ffmpeg -i input.avi output.mp4

ffmpeg -i input.mp4 output.ts

插个号外:某天我在知乎上看到一段视频,想转给微信好友看,怎么操作呢。这里参考如何全自动下载知乎上的视频到本地(注意不要滥用),先打开要观看的视频页面,再F12清空,然后开始播放视频,就能看到类似https://vdn.vzuu.com/SD/49c84c7c-c61a-11e8-8bad-0242ac112a0a.mp4?auth_key=1539832492-0-0-c61c22f39c&expiration=1539832492&disable_local_cache=1这样的字符串,然后用ffmpeg -i "403 Forbidden..." output.mp4即可下载。弄到电脑上,用电脑QQ发送到手机QQ上,在手机QQ上点击选择保存到手机上。然后在微信里选照片就能看到这个视频了(注意视频文件不要超过20M,另外最开始用的不是电脑QQ,而是百度网盘,发现不行……)。

2. 提取音频

比如我有一个“晓松奇谈”,可是我不想看到他的脸,我只想听声音, 地铁上可以听,咋办?

ffmpeg -i 晓松奇谈.mp4 -acodec copy -vn output.aac

上面的命令,默认mp4的audio codec是aac,如果不是会出错,咱可以暴力一点,不管什么音频,都转为最常见的aac。

ffmpeg -i 晓松奇谈.mp4 -acodec aac -vn output.aac

(-vn 不处理视频 )

3. 提取视频

我目测有些IT员工,特别是做嵌入式的,比如机顶盒,想debug一下,没有音频的情况下,播放一个视频几天几夜会不会crash,这时候你需要一个纯视频文件,可以这么干。

ffmpeg -i input.mp4 -vcodec copy -an output.mp4

-an 不处理音频

4. 视频剪切

经常要测试视频,但是只需要测几秒钟,可是视频却有几个G,咋办?切啊!

下面的命令,就可以从时间为00:00:15开始,截取5秒钟的视频。

ffmpeg -ss 00:00:15 -t 00:00:05 -i input.mp4 -vcodec copy -acodec copy output.mp4

-ss表示开始切割的时间,-t表示要切多少。上面就是从开始,切5秒钟出来。

摘自使用 MediaSource 搭建流式播放器

注意一个问题,ffmpeg 在切割视频的时候无法做到时间绝对准确,因为视频编码中关键帧(I帧)和跟随它的B帧、P帧是无法分割开的,否则就需要进行重新帧内编码,会让视频体积增大。所以,如果切割的位置刚好在两个关键帧中间,那么 ffmpeg 会向前/向后切割,所以最后切割出的 chunk 长度总是会大于等于应有的长度。

5. 码率控制

码率控制对于在线视频比较重要。因为在线视频需要考虑其能提供的带宽。

那么,什么是码率?很简单: bitrate = file size / duration

比如一个文件20.8M,时长1分钟,那么,码率就是:

biterate = 20.8M bit/60s = 20.8*1024*1024*8 bit/60s= 2831Kbps

一般音频的码率只有固定几种,比如是128Kbps, 那么,video的就是

video biterate = 2831Kbps -128Kbps = 2703Kbps。

说完背景了。好了&

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
继续介绍一些常用的 ffmpeg 命令: 1. 裁剪视频 裁剪视频可以使用 `ffmpeg -i input.mp4 -ss 00:00:10 -t 00:00:20 -c copy output.mp4` 命令,其中 `-ss` 参数为开始时间,`-t` 参数为裁剪时长,`-c` 参数为指定编解码器,`copy` 表示直接复制原视频的编解码器。 2. 添加水印 添加水印可以使用 `ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=x=10:y=10" output.mp4` 命令,其中 `-i` 参数为输入文件,`-filter_complex` 参数为指定滤镜复杂度,`overlay` 表示添加叠加层,`x` 和 `y` 分别表示水印的横、纵坐标。 3. 转换视频格式 转换视频格式可以使用 `ffmpeg -i input.mp4 -c:v libx264 -c:a copy output.avi` 命令,其中 `-c:v` 参数为指定视频编码器,`libx264` 表示使用 H.264 编码器,`-c:a` 参数为指定音频编码器,`copy` 表示直接复制原视频的音频编码器,`output.avi` 表示输出文件的格式为 AVI。 4. 视频分离成帧 视频分离成帧可以使用 `ffmpeg -i input.mp4 -r 1/1 frame_%03d.jpg` 命令,其中 `-r` 参数表示帧率,`1/1` 表示每秒输出一帧,`%03d` 表示输出文件名格式为 `frame_001.jpg`、`frame_002.jpg` 等。 5. 视频合并 视频合并可以使用 `ffmpeg -i "concat:input1.mp4|input2.mp4" -c copy output.mp4` 命令,其中 `-i` 参数表示输入文件,通过 `concat` 协议将多个输入文件合并,`-c` 参数表示指定编解码器,`copy` 表示直接复制原视频的编解码器。 这些命令只是 ffmpeg 的冰山一角,ffmpeg 还有很多强大的功能,可以满足不同的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值