FFmpeg 实战

参考资料

视频下载神器:

GitHub - ytdl-org/youtube-dl: Command-line program to download videos from YouTube.com and other video sites

关于音视频的格式

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

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
其他参数的变换

音频可以调整的参数:音频编码、音频声道数、音频采样率、音频码率

视频可以调整的参数:视频编码、视频码率、视频分辨率、视频每秒帧数

关于码率,有一篇文章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

越来越没意思

你的鼓励将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值