FFmpeg指定开始结束时间截取原视频命令
"ffmpeg -i $inputVideoPath -ss $beginTime -to ${sentenceInfo.endTime} -c:v libx264 -crf 28 -preset superfast -pix_fmt yuv420p -y $tempVideoPath${index}.mp4"
-i标识输入文件 需要取对应输入文件进行操作根据顺序从零开始[index:v]
-crf 23 参数用于控制 x264 编码器的视频质量。CRF 意为 Constant Rate Factor,是一种基于恒定质量的编码方式,可以在不同的编码场景中实现一定程度的质量和压缩比的平衡。
-crf 参数的取值范围是 0-51,其中 0 表示无损编码,51 表示最低质量。一般情况下,推荐使用 18-28 之间的值,其中 18 表示最高质量,28 表示较高的压缩比和相对较好的质量。
例如,-crf 23 表示使用 CRF 为 23 的编码方式,可以获得相对较好的视频质量和压缩比之间的平衡。如果需要更高的质量,则可以使用更低的 CRF 值,如 -crf 18;如果需要更高的压缩比,则可以使用更高的 CRF 值,如 -crf 28。
-c:v libx264 是 FFmpeg 中用于指定视频编码器为 libx264 的参数。其中 -c:v 表示选择视频编码器,libx264 则是选择 x264 编码器作为视频编码器。
-preset medium 参数用于设置 x264 编码器的预设值,从而控制视频编码的速度和质量之间的平衡。预设值可用于自动设置一系列与编码速度和质量相关的参数,以便更好地适应不同的编码场景。-preset 参数支持以下几个选项:
ultrafast
superfast
veryfast
faster
fast
medium (默认)
slow
slower
veryslow
预设值从 ultrafast 到 veryslow,编码速度逐渐变慢,但视频质量也会逐渐提高。使用 -preset medium 可以获得相对较好的编码速度和视频质量之间的平衡。如果希望优化编码速度,可以考虑使用更快的预设值,如 -preset superfast。如果希望获得更高的视频质量,则可以使用更慢的预设值,如 -preset slow。
FFmpeg缩放输入视频并调整输入视频相对于背景图片位置,并添加指定宽高背景图片,输出视频宽高默认跟背景图片一致
"ffmpeg -i $tempVideoPath${index}.mp4 -i $tempBgDir/background$index.png -filter_complex " +
"[0:v]scale=480:260[video];" +
"[1:v]scale=720:960[bg];" +
"[bg][video]overlay=20:160[v]" +
" -map [v] -map 0:a -c:a copy -y $tempAddVideoPath${index}.mp4"
[0:v]scale=480:260[video] 是一个视频滤镜,用于将输入文件中的视频流进行缩放操作。具体含义如下:
[0:v] 表示选择输入文件中的第一个视频流作为处理对象;
scale=480:260 表示对视频流进行缩放操作,将视频的宽度缩放到 480 像素,高度缩放到 260 像素;
[video] 表示将经过缩放操作后的视频流输出到一个名为 "video" 的输出文件中。
这个滤镜会将输入视频流进行缩放,将视频的分辨率从原来的大小转换为 480x260 像素的大小。通过这种方式可以改变视频的尺寸大小,以满足不同场合下的需求,比如适配不同的屏幕分辨率、减少视频的体积等。
-map 0:a -c:a copy表示原封不动将输入视频音轨直接复制到当前视频使用
[bg][video]overlay=20:160[v] 是 FFmpeg 中的一个视频滤镜,它的作用是将一个背景图片(bg)和一个视频流(video)进行叠加,得到一个新的视频流(v)。具体含义如下:
[bg][video] 表示从 bg 和 video 两个输入流中获取视频帧;
overlay=20:160 表示将 video 中的每一帧都叠加到 bg 上,具体叠加的位置是在 bg 左上角偏移 (20, 160) 的位置处。叠加的过程是逐像素进行的,每个像素的颜色由 bg 和 video 对应位置的像素颜色混合而成;
[v] 表示将叠加后的视频流输出到一个名为 "v" 的输出文件中。
这个滤镜会将输入的视频流和背景图片进行叠加,从而生成一个新的视频流。在生成新的视频流的过程中,视频流的每一帧都会与背景图片进行叠加,以得到最终的合成视频。通过调整 overlay 参数可以实现不同的叠加效果,比如改变视频在背景中的位置、改变叠加的透明度等。
FFmpeg将多个视频拼接合成命令
"ffmpeg -i file1 -i file2 ... -i fileN -filter_complex [0:v][0:a][1:v][1:a]concat=n=${fileSize}:v=1:a=1 -f mp4 -y $outputVideoPath"
[0:v][0:a][1:v][1:a] 表示从两个视频文件中分别获取视频流和音频流;
concat 表示使用 FFmpeg 的拼接滤镜进行拼接操作;
n=${fileSize} 表示拼接的视频文件数量,其中 ${fileSize} 是一个变量,代表需要拼接的视频文件数量;
v=1 表示将拼接后的视频流输出到新文件中;
a=1 表示将拼接后的音频流输出到新文件中。
通过这个滤镜可以将多个视频文件拼接成一个新的视频文件,并且保留原视频文件中的音频流。在拼接过程中,每个视频文件的视频流和音频流都会被提取出来,然后按照顺序进行拼接。如果有多个视频文件,那么可以使用 ${fileSize} 变量来指定拼接的文件数量。注意,在拼接视频文件时,要求各个文件的分辨率、帧率、编码格式等必须相同,否则可能会导致拼接失败或出现画面不同步的问题。
-f mp4标识合成视频格式为MP4