FFmpeg 不完全实战

本文介绍了FFmpeg常用命令,包括格式转换、音视频参数调整、添加水印、视频切片生成HLS流以及加密。还提到了FFprobe用于查看媒体文件信息,以及如何比较文件差异。文章以实例展示了如何使用FFmpeg进行视频处理和转码,适合有一定基础的读者。
摘要由CSDN通过智能技术生成
本文会介绍一些FFmpeg的常用命令(也包含FFplay,FFprobe)。笔者在一开始接触FFmpeg时也是从网上找一些文章来看,但都是零零散散,也不知为什么是这个命令,最近为了完成一些任务啃了啃FFmpeg的文档,总结了一些常用且实用的命令。

阅读之前

本文介绍的内容不是从零开始的,不会教你去安装,也不会特别难,但是有点长。建议阅读本文之前阅读一下以下2篇文章:

关于音视频的格式

如何查看一个媒体文件的详细信息

ffprobe 是一个用来收集媒体文件信息的工具,可以以指定的格式打印出媒体文件信息。你可以用ffprobe查看视频,音频甚至是一张图片的信息。

ffprobe -loglevel quiet -of json -show_format -show_streams video.webm
ffprobe -v quiet -of json -show_format -show_streams video.webm
ffprobe -v 8 -of json -show_format -show_streams video.webm

# -v = -loglevel 日志的级别,常用的参数就是 -v quiet / -v 8,这样就可以获得一个比较干净的输出。
# -of = -print_format 输出的格式,json应该算是可读性比较高的,也可以选择 xml, csv 等。
# -show_format 打印格式信息
# -show_streams 打印流信息

拓展:如何比较两个文件的差异

这里会用到 vimdiff,如果会用 vim 的同学可以尝试一下。

vimdiff 的基本用法是:

vimdiff file1 file2

所以比较两个媒体文件的差异还是比较简单的:

vimdiff <(ffprobe -v quiet -of json -show_format -show_streams video1.mp4) <(ffprobe -v quiet -of json -show_format -show_streams video2.mp4)

常用的音视频格式

阮一峰老师的文章中讲的不错,不再赘述。

常用的视频分辨率

FFmpeg官网中提供了一组分辨率的值:

也有一些文章中提到另外一组分辨率的值:

其实不必太纠结,一般用视频高度就可以了,本文中后面的处理也是这样做的。

常用的音频采样率

目前比较常用的 44,100 Hz 和 48,000 Hz,即 44.1k 和 48k。

  • 22,050 Hz - 无线电广播所用采样率
  • 44,100 Hz - 音频CD,也常用于MPEG-1音频(VCD, SVCD, MP3)所用采样率
  • 48,000 Hz - miniDV、数字电视、DVD、DAT、电影和专业音频所用的数字声音所用采样率
  • 96,000或者192,000 Hz - DVD-Audio、一些LPCM DVD音轨、Blu-ray Disc(蓝光光盘)音轨、和HD-DVD(高清晰度DVD)音轨所用所用采样率

一般转码

终于进入正题,开始划重点:

$ ffmpeg \
[全局参数] \
[输入文件参数] \
-i [输入文件] \
[输出文件参数] \
[输出文件]

这个命令结构是从阮一峰老师那里拿过来的,对于一般的转码这个命令结构已经够用了。实际上,ffmpeg支持多个输入,多个输出(这里有个印象就好)。

格式的变换

ffmpeg -i video.webm video.mp4
ffmpeg -y -v quiet -i video.webm video.mp4

将webm格式的视频转换成mp4。很简单是不是。

# -y 表示输出结果文件存在时直接覆盖,不会询问
# -n 表示输出结果文件存在时终止转换

# -v 前面说过,是日志级别,-v quiet 就是什么也不输出,包括 banner
# -hide_banner 可以不输出 banner

加一些参数,指定音频编码,视频编码

ffmpeg -i video.webm -c:a aac -c:v h264 video.mp4
# -c = -codec 指定编码器
# -c:a 指定音频编码 -c:a aac 指定音频为 aac
# -c:v 指定视频编码 -c:v h264 指定视频为 h264
# -c:a copy 直接复制 音频编码
# -c:v copy 直接复制 视频编码
# -c copy 直接复制音频视频编码

分辨率的变换

指定分辨率

ffmpeg -i video.mp4 -vf scale=1280:720 video_1280_720.mp4
ffmpeg -i video.mp4 -vf scale=852:480 video_852_480.mp4

# -vf = -filter:v 这个参数在后面还要用到很多次

当然还可以只指定宽或者高,而对应的高或者宽自动计算出来

ffmpeg -i video.mp4 -vf scale=-1:720 video_1280_720.mp4

ffmpeg -i video.mp4 -vf scale=1280:-1 video_1280_720.mp4

-1 就表示这个值是缺省值,可以自动计算出来

YUV 编码的坑 -1 与 -2

但是这里有个坑,就是yuv编码中,分辨率必须是偶数。所以当缺省的宽或者高计算出来是一个奇数的话,就会报错。这个时候我们可以使用-2来代替-1,这样计算出来的结果会取偶数,实际上,我更推荐从一开始就用-2。

# 比如原始分辨率是 1920 * 1080
ffmpeg -i video.mp4 -vf scale=-1:480 video_480.mp4
# 使用 -1 计算就会报错,因为算出来的是 853 * 480

ffmpeg -i video.mp4 -vf scale=-2:480 video_480.mp4
# 使用 -2 计算就不会报错,因为算出来的是 852 * 480

其他参数的变换

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值