top
本文目录
0. 查看视频信息
1. 视频裁剪
1.1 指定开始时间和裁剪时长
1.2 指定裁剪开始时间和结束时间
2. 视频格式转换
3. 视频画质转换
3.1 指定高度和宽度
3.2 指定宽度,高度自动调整
3.3 指定高度,宽度自动调整
3.4 指定比例调整
4. 调整视频帧率
5. 视频压缩
5.1 preset参数
5.2 crf参数
6. 视频加减速
6.1 仅加减速视频
6.2 视音频同步加减速
7. 视频合并
7.1 方式一
7.2 方式二
8. 视频添加水印
9. 提取视频缩略图

FFmpeg 视频转码基本用法


共计 3198 个字符,预计需要花费 8 分钟才能阅读完成。

0. 查看视频信息

ffmpeg -i input.mp4

查询结果如下:

Stream #0:00x1: Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1280x720, 1734 kb/s, 30 fps, 30 tbr, 16k tbn (default)
Stream #0:10x2: Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 313 kb/s (default)

可以得到如下有用的信息:

  • 视频流信息:Stream #0:0,视频编码格式为h264(High Profile),分辨率为1280x720,帧率为30 fps。
  • 音频流信息:Stream #0:1,音频编码格式为AAC(LC),采样率为48000 Hz,声道为立体声。

1. 视频裁剪

1.1 指定开始时间和裁剪时长

从 45 秒开始,裁剪 15 秒。

# 更常用的方式
ffmpeg -i input.mp4 -c:v libx264  -ss 00:00:45 -t 15 output.mp4
# 指定开始的秒数
# ffmpeg -i input.mp4 -c:v libx264  -ss 45 -t 15 output.mp4

1.2 指定裁剪开始时间和结束时间

从 45 秒开始,裁剪到 1 分钟。

# 更常用的方式
ffmpeg -i input.mp4 -c:v libx264  -ss 00:00:45 -to 00:01:00 output.mp4
# 视频比较短的时候,指定开始的秒数和结束的秒数
# ffmpeg -i input.mp4 -c:v libx264  -ss 45 -to 60 output.mp4

2. 视频格式转换

可以转换成各种格式,如 avi、mkv、mov、flv、wmv、gif 等等,经测试 mp4 转各种格式都没有出现问题,只是发现有些默认播放器不支持某些格式。

ffmpeg -i input.mp4 -c:v libx264 output.avi

注意这里转换成 gif 应该使用 gif 编码器作为输出格式,而不是 libx264。

ffmpeg -i output.mp4 output.gif

3. 视频画质转换

3.1 指定高度和宽度

ffmpeg -i input.mp4 -vf "scale=1280:720" -c:v libx264 output.mp4

3.2 指定宽度,高度自动调整

ffmpeg -i input.mp4 -vf "scale=1280:-1" -c:v libx264 output.mp4

3.3 指定高度,宽度自动调整

ffmpeg -i input.mp4 -vf "scale=-1:720" -c:v libx264 output.mp4

3.4 指定比例调整

ffmpeg -i input.mp4 -vf "scale=iw/2:ih/2" -c:v libx264 output.mp4
#ffmpeg -i input.mp4 -vf "scale=iw*0.5:ih*0.5" -c:v libx264 output.mp4

4. 调整视频帧率

ffmpeg -i input.mp4 -r 24 output.mp4

5. 视频压缩

5.1 preset参数

preset 参数用于指定视频编码器的预设选项,它可以影响视频编码的速度和质量。常见的参数有 ultrafast、superfast、veryfast、faster、fast、medium、slow、slower、veryslow,编码速度越慢,压缩率越高,文件就越小。

ffmpeg -i input.mp4 -c:v libx264 -preset veryslow output.mp4

5.2 crf参数

CRF(Constant Rate Factor)参数用于控制视频编码的质量。CRF参数的取值范围通常是0到51,其中0表示无损压缩,51表示最差的质量。默认值是23。

ffmpeg -i input.mp4 -c:v libx264 -crf 40 output.mp4

6. 视频加减速

6.1 仅加减速视频

这意味这音频不会和视频同步。

# 视频加速
ffmpeg -i input.mp4 -filter:v "setpts=0.5*PTS" -c:v libx264 -c:a copy output.mp4

下面的命令将视频播放调整为 0.5 倍。

# 视频减速
ffmpeg -i input.mp4 -filter:v "setpts=2*PTS" -c:v libx264 -c:a copy output.mp4

6.2 视音频同步加减速

使用 -filter_complex 选项来分别处理音频和视频,然后再将它们合并成一个新的视频文件。

# 将视频加速为原来的2倍
ffmpeg -i input.mp4 -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" output.mp4

值得注意的是 atempo 对音频速度调整限制在0.5 到 2.0 之间。

# 将视频减速为原来的两倍
ffmpeg -i input.mp4 -filter_complex "[0:v]setpts=2.0*PTS[v];[0:a]atempo=0.5[a]" -map "[v]" -map "[a]" output.mp4

[0:v] 表示输入文件中的第一个视频流。在 FFmpeg 中,输入文件可以包含多个音频流和视频流,它们被编号为索引。索引从0开始,表示第一个流。因此,[0:v] 表示第一个输入文件的视频流。

类似地,[0:a] 表示输入文件的第一个音频流,[1:v] 表示第二个输入文件的视频流,[1:a] 表示第二个输入文件的音频流,依此类推。

7. 视频合并

7.1 方式一

创建一个文本文件

file 'input.mp4'
file 'input2.mp4'

运行命令:

ffmpeg -f concat -i input.txt -c copy output.mp4

7.2 方式二

ffmpeg -i video1.mp4 -i video2.mp4 -filter_complex "[0:v][0:a][1:v][1:a]concat=n=2:v=1:a=1[v][a]" -map "[v]" -map "[a]" output.mp4

在上述命令中,使用了 -i 选项两次来指定要合并的两个视频文件,即 video1.mp4video2.mp4。然后,使用 -filter_complex 选项指定复杂的过滤器图表。

[0:v][0:a][1:v][1:a] 表示将第一个视频文件的视频流 [0:v]、音频流 [0:a],以及第二个视频文件的视频流 [1:v]、音频流 [1:a] 作为输入。

concat=n=2:v=1:a=1[v][a] 表示使用 concat 过滤器将这四个输入流串联起来。n=2 表示总共有两个输入文件,v=1 表示输出一个视频流,a=1 表示输出一个音频流。结果视频流保存在 [v],音频流保存在 [a]

最后,使用 -map 选项将处理后的视频流 [v] 和音频流 [a] 映射到输出文件。

8. 视频添加水印

使用系统默认字体,发现中文乱码。

ffmpeg -i input.mp4 -vf "drawtext=text='watermark':fontsize=30:fontcolor=white:x=20:y=20" -c:a copy output.mp4

windows 下使用字体的绝对路径似乎不生效,只好将字体复制到当前目录。

ffmpeg -i input.mp4 -vf "drawtext=text='watermark水印':fontfile=msyh.ttc:fontsize=30:fontcolor=white:x=20:y=20" -c:a copy output.mp4

9. 提取视频缩略图

fps=1/10 意思是每秒 1/10 帧,即 10 秒才一帧,这条命令的意思是每 10 秒产生一张缩略图。

ffmpeg -i input.mp4 -vf "fps=1/10,scale=-1:720" t-%03d.jpg

提醒:本文发布于497天前,文中所关联的信息可能已发生改变,请知悉!

Tips:清朝云网络工作室

阅读剩余
THE END
icon
0
icon
分享
icon
二维码
icon
海报
发表评论
评论列表

赶快来坐沙发

您好,今天过得怎么样?