diff --git a/docs/ffmpeg.html b/docs/ffmpeg.html index a6199cb8..879f2c33 100644 --- a/docs/ffmpeg.html +++ b/docs/ffmpeg.html @@ -42,7 +42,7 @@

本备忘清单是 FFmpeg 中常见视频处理操作的备忘清单

FFmpeg 参考

安装

Linux

@@ -312,32 +312,7 @@
:--
-ab bRate设置音频比特率(单位 kbit/s)
-aframes N设置要录制的音频帧数 [-frames:a 的别名]
-aq q设置音频质量(特定于编解码器,VBR) [-q:a 的别名]
-an禁用录音
-acodec codec设置音频编解码器。[-codec:a 的别名] 使用 'copy' 复制流。
-vol以 256 的倍数更改音频音量,其中 256 = 100%(正常)音量。例如 512 = 200%
-newaudio将新的音频流添加到当前输出流
-alang code设置当前音频流的 ISO 639 语言代码(3 个字母)

视频编辑

-

裁剪

- -
$ ffmpeg -i <input> -filter:v "crop=640:480:100:25" <output>
-
- -

通过从输入视频中复制偏移 x=100px y=25px 的相应窗口来创建 640x480 大小的输出视频

-
# 裁剪到宽度 360,高度 640
-$ ffmpeg -i input.mov -filter:v 'crop=360:640:0:0' -codec:a copy output.mov
-
- -

裁剪到宽度 360,高度 640,从坐标 (10, 20) 开始

-
$ ffmpeg -i input.mov -filter:v 'crop=360:640:10:20' -codec:a copy output.mov
-
- -

缩放

-
$ ffmpeg -i <输入> -vf scale=640:480 <输出>
-
- -

视频帧速率

-
$ ffmpeg -i input.avi -r 24 output.avi
-
-

将输出文件的帧速率强制为 24 fps

-
$ ffmpeg -r 1 -i input.m2v -r 24 output.avi
-
-

将输入文件的帧速率(仅对原始格式有效)强制为 1 fps,将输出文件的帧速率强制为 24 fps

-

剪切视频部分

+

剪切视频部分

# 从1分45秒开始剪切2分35秒
 $ ffmpeg -i <input> -ss 00:01:45 -t 00:02:35 -vcodec copy -acodec copy <output>
@@ -348,6 +323,13 @@
 $ ffmpeg -i in.mp4 -ss 4.5 -t 5 out.mp4
 
+

视频帧速率

+
$ ffmpeg -i input.avi -r 24 output.avi
+
+

将输出文件的帧速率强制为 24 fps

+
$ ffmpeg -r 1 -i input.m2v -r 24 output.avi
+
+

将输入文件的帧速率(仅对原始格式有效)强制为 1 fps,将输出文件的帧速率强制为 24 fps

H265 2-pass 编码

$ ffmpeg -y -i <input> -c:v libx265 -b:v 2600k \
@@ -369,10 +351,6 @@
 

不要为旋转重新编码,而是简单地为旋转角度添加一个视频元数据字段

-

放慢视频速度

-
$ ffmpeg -i in.mp4 -filter:v "setpts=4.0*PTS" out.mp4
-
-

使用过滤器减慢视频。 此示例将视频减慢四倍

缩放到特定宽度

$ ffmpeg -i in.mp4 -filter:v scale="538:trunc(ow/a/2)*2" -c:a copy out.mp4
 
@@ -383,16 +361,6 @@

-vn (过滤视频),使用 -c copy,不会重新解码和编码,加快速度。

-

创建缩略图

- -

在 10 秒时创建一个缩略图

-
$ ffmpeg -ss 10 -i <input file> -vframes 1 -vcodec png -an thumb.png
-
- -

例如,要每 n 秒创建一次缩略图,请使用 -vf fps=1/n

-
$ ffmpeg -i <input file> -vf fps=1/60 thumbnails/thumb%03d.png
-
-

提取视频流

$ ffmpeg -i file.mp4 -an -c copy output.mp4
 
@@ -411,6 +379,10 @@
$ ffmpeg -i file.aac -acodec mp3 -ar 44100 -ab 128000 output.mp3
 
+

将输入文件转码为 DVD PAL 格式

+
$ ffmpeg -y -threads 8 -i inFile -target pal-dvd -ac 2 -aspect 16:9 -acodec mp2 -ab 224000 -vf pad=0:­0:0:0 outFile
+
+

-map 命令

-map 命令用于指定索引文件,以及索引文件中流类型和它的索引

@@ -491,8 +463,16 @@

mac 下录屏

$ ffmpeg -f avfoundation -i 1:0 -preset ultrafast out.mkv
 
-

将输入文件转码为 DVD PAL 格式

-
$ ffmpeg -y -threads 8 -i inFile -target pal-dvd -ac 2 -aspect 16:9 -acodec mp2 -ab 224000 -vf pad=0:­0:0:0 outFile
+

合并音频与图片

+

合并多个音频,自定义背景图片,生成视频音乐

+
# mylist.txt >>>
+file '1.mp3'
+file '2.mp3'
+file '3.mp3'
+
+# OBS: 46500 = 25:50 minutes * 60 * 30fps
+# echo "00:25:50" | awk -F: '{ print (($1 * 3600) + ($2 * 60) + $3) * 30 }'
+$ ffmpeg -y -loop 1 -i cover.jpg -f concat -i mylist.txt -c:v libx264 -r 30 -pix_fmt yuv420p -vframes 46500 -c:a aac -b:a 192k -strict experimental -shortest output.mp4
 

转换为 Gif

@@ -588,8 +568,8 @@
$ ffmpeg -i audioS.mp4 -i videoS.mp4 -c copy -map 0:a -map 1:v outFil­e.mp4
 
-

合并视频

- +

合并视频

+

合并相同规格(解码/分辨率/帧率)视频

# mylist.txt >>>
 file '1.mp4'
@@ -622,22 +602,28 @@
 
$ ffmpeg -f concat -i mylist.txt -c:v copy -c:a flac -strict -2 output.mp4
 
-

合并音频与图片

-

合并多个音频,自定义背景图片,生成视频音乐

-
# mylist.txt >>>
-file '1.mp3'
-file '2.mp3'
-file '3.mp3'
-
-# OBS: 46500 = 25:50 minutes * 60 * 30fps
-# echo "00:25:50" | awk -F: '{ print (($1 * 3600) + ($2 * 60) + $3) * 30 }'
-$ ffmpeg -y -loop 1 -i cover.jpg -f concat -i mylist.txt -c:v libx264 -r 30 -pix_fmt yuv420p -vframes 46500 -c:a aac -b:a 192k -strict experimental -shortest output.mp4
+

视频过滤器

+

格式

+

如果一个 fliter 有多个参数,需要使用 , 分隔

+
$ ffmpeg -i test.avi -c:v libx264 -vf "scale=1024:-1,transpose=1,crop=iw/3:ih/3" output.mp4
+
+

缩放

+ +
$ ffmpeg -i input.mp4 -vf "scale=640:480" out.mp4
+# -1 → 指根据另一个参数帮我们推断
+$ ffmpeg -i input.mp4 -vf "scale=720:-1" out.mp4
+# 宽度和高度
+ffmpeg -i input.mp4 -vf "scale=w=800:h=600" output.mp4
+# in_w\in_h 输入尺寸
+ffmpeg -i input.mkv -vf "scale=w=1/2*in_w:h=1/2*in_h" output.mkv
 
-

添加水印

-

在视频左上方 20,20 的位置插入 logo.png 图片

-
# -b:v 548k 可选参数,设置视频比特率,默认 200k 最好设置与原视频一致
-ffmpeg -i 1.mp4 -acodec copy -b:v 548k -vf "movie=logo.png[watermark];[in][watermark]overlay=20:20" output.mp4
+

裁剪

+

从左上角开始,复制 x=0px y=0px 的相应窗口来创建 1280x720 大小的输出视频

+
ffmpeg -i input.mp4 -vf "crop=w=1280:h=720:x=0:y=0" output.mp4
+
+

裁剪到宽度 360,高度 640,从坐标 (10, 20) 开始

+
$ ffmpeg -i input.mov -vf 'crop=360:640:10:20' output.mov
 

去除水印

@@ -646,6 +632,58 @@ ffmpeg -i 1.mp4 -b:v 548k -vf delogo=x=10:y=10:w=120:h=45:show=1 output.mp4 +

创建缩略图

+ +

在 10 秒时创建一个缩略图

+
$ ffmpeg -ss 10 -i <input file> -vframes 1 -vcodec png -an thumb.png
+
+ +

例如,要每 n 秒创建一次缩略图,请使用 -vf fps=1/n

+
$ ffmpeg -i <input file> -vf fps=1/60 thumbnails/thumb%03d.png
+
+ +

添加水印

+

在视频左上方 20,20 的位置插入 logo.png 图片

+
# -b:v 548k 可选参数,设置视频比特率,默认 200k 最好设置与原视频一致
+ffmpeg -i 1.mp4 -acodec copy -b:v 548k -vf "movie=logo.png[watermark];[in][watermark]overlay=20:20" output.mp4
+
+ +

视频旋转

+
# 顺时针旋转 90
+$ ffmpeg -i input.avi -vf "rotate=90*PI/180" out.mp4 
+# 顺时针旋转 180,翻转 90
+$ ffmpeg -i input.mp4 -vf "rotate=PI" out.mp4
+
+

更改视频播放速度

+
# 加速 2 倍
+$ ffmpeg -i input.mkv -vf "setpts=0.5*PTS" output.mkv 
+# 减速 2 倍
+$ ffmpeg -i input.mp4 -vf "setpts=2*PTS" output.mp4
+
+

添加背景音乐

+
# -t 10 文件时长,单位为秒,建议取值原始视频总时长
+$ ffmpeg -i 1.mp4 -i test.mp3 \
+  -filter_complex "[1:a]aloop=loop=-1:size=2e+09[out];[out][0:a]amix" \
+  -t 10 out.mp4
+
+

音频过滤器

+

调节音量

+
# 增大音量
+$ ffmpeg -i test.mp4 -af "volumn=1.5" out.mp4
+
+

统一视频的音量

+
$ ffmpeg -i test.mp4 -af "loudnorm=I=-5:LRA=1" out.mp4
+
+

重新映射通道数

+
# 使左右耳的声音同时出现
+$ ffmpeg -i input.mp3 -af "channelmap=1-0|1-1" output.mp3
+
+

更改音频速度

+
$ ffmpeg -i input.wav -af "atempo=0.75" output.wav 
+# 加速 4 倍
+$ ffmpeg -i input.mp3 -af "atempo=2.0,atempo=2.0" ouutput.mp3
+
+

atempo 它只接受 0.5(半速) 到 2 (倍速)之间的值。为了越过这个限制,你可以链式使用这个过滤器

另见