使用FFmpeg 做混剪软件的命令解释

2025-07-16 19:31:07 7 分享链接 开发笔记 ffmpeg

ffmpeg -f concat -safe 0 -i videos_to_concat.txt -i D:/XiaoShuo/0007.东宫岁月/start/0007.mp3 -i D:/XiaoShuo/0007.东宫岁月/bgm/001.mp3 -filter_complex [1:a]volume=1.5[a1];[2:a]volume=0,atrim=end=894.816,asetpts=PTS-STARTPTS[a2];[a1][a2]amix=inputs=2:duration=first[aout] -map 0:v -map [aout] -cq 18 -gpu 0 -vf scale=1080:1920,subtitles=D\\:/XiaoShuo/0007.东宫岁月/start/0007.srt:original_size=1080x1920:fontsdir=D\\:/DevPythons/mixedEditor/font:force_style='FontName=HelloFont ID JiangHuTi,FontSize=7,PrimaryColour=&H00FFFFFF,Spacing=1,Outline=0.5,OutlineColour=&H10000000,BorderStyle=0,BackColour=&H80000000,Shadow=0,Alignment=2,MarginV=210' -c:v h264_nvenc -b:v 12M -r 60 -c:a aac -b:a 128k -t 894.816 -preset medium -y D:/XiaoShuo/0007.东宫岁月/start/0007.mp4

以下是对这个 FFmpeg 命令中各个参数的详细解释:

输入相关参数

ffmpeg -f concat -safe 0 -i videos_to_concat.txt -i D:/XiaoShuo/0007.东宫岁月/start/0007.mp3 -i D:/XiaoShuo/0007.东宫岁月/bgm/001.mp3
  • -f concat:指定输入文件的格式为拼接列表。concat 格式允许你通过一个文本文件来指定多个视频文件,以便将它们按顺序拼接在一起。
  • -safe 0:禁用安全模式。在使用 concat 格式时,默认情况下 FFmpeg 会检查文件路径是否为相对路径,以防止潜在的安全风险。设置为 0 则允许使用绝对路径。
  • -i videos_to_concat.txt:指定拼接列表文件的路径。该文件包含了要拼接的视频文件的路径列表。
  • -i D:/XiaoShuo/0007.东宫岁月/start/0007.mp3:指定第一个音频文件的路径,这个音频文件将作为主音频。
  • -i D:/XiaoShuo/0007.东宫岁月/bgm/001.mp3:指定第二个音频文件的路径,这个音频文件将作为背景音乐(BGM)。

音频处理参数

-filter_complex [1:a]volume=1.5[a1];[2:a]volume=0,atrim=end=894.816,asetpts=PTS-STARTPTS[a2];[a1][a2]amix=inputs=2:duration=first[aout]
  • -filter_complex:用于指定复杂的音频和视频滤镜图。这里使用了多个滤镜来处理音频。

    • [1:a]volume=1.5[a1]:对第二个输入文件(索引为 1)的音频流应用 volume 滤镜,将音量放大到原来的 1.5 倍,并将处理后的音频流命名为 [a1]
    • [2:a]volume=0,atrim=end=894.816,asetpts=PTS-STARTPTS[a2]:对第三个输入文件(索引为 2)的音频流进行处理。首先将音量设置为 0,然后使用 atrim 滤镜将音频时长裁剪到 894.816 秒,最后使用 asetpts 滤镜重置时间戳,并将处理后的音频流命名为 [a2]
    • [a1][a2]amix=inputs=2:duration=first[aout]:使用 amix 滤镜将 [a1][a2] 两个音频流混合在一起。inputs=2 表示有两个输入音频流,duration=first 表示以第一个输入音频流(即 [a1])的时长为准,最终输出的音频流命名为 [aout]

映射参数

-map 0:v -map [aout]
  • -map 0:v:将第一个输入文件(索引为 0)的视频流映射到输出文件中。
  • -map [aout]:将之前通过滤镜处理得到的音频流 [aout] 映射到输出文件中。

视频编码器参数

-cq 18 -gpu 0
  • -cq 18:这是 h264_nvenc 编码器的参数,用于控制视频质量。cq 表示恒定质量(Constant Quality),取值范围为 0-51,较低的值表示更高的质量,但文件大小也会更大。这里设置为 18,表示较高的视频质量。
  • -gpu 0:显式指定使用编号为 0 的 GPU 进行编码。

视频滤镜参数

-vf scale=1080:1920,subtitles=D\\:/XiaoShuo/0007.东宫岁月/start/0007.srt:original_size=1080x1920:fontsdir=D\\:/DevPythons/mixedEditor/font:force_style='FontName=HelloFont ID JiangHuTi,FontSize=7,PrimaryColour=&H00FFFFFF,Spacing=1,Outline=0.5,OutlineColour=&H10000000,BorderStyle=0,BackColour=&H80000000,Shadow=0,Alignment=2,MarginV=210'
  • -vf:指定视频滤镜。这里使用了两个滤镜,用逗号分隔。

    • scale=1080:1920:使用 scale 滤镜将视频的分辨率调整为 1080x1920
    • subtitles=...:使用 subtitles 滤镜将字幕文件嵌入到视频中。具体参数解释如下:

      • D\\:/XiaoShuo/0007.东宫岁月/start/0007.srt:指定字幕文件的路径。
      • original_size=1080x1920:指定视频的原始分辨率,用于字幕的定位和布局。
      • fontsdir=D\\:/DevPythons/mixedEditor/font:指定字体文件所在的目录。
      • force_style=...:指定字幕的样式,包括字体名称、字体大小、字体颜色、字符间距、描边像素、描边颜色、字幕背景框、背景框颜色、阴影偏移、字幕对齐方式和字幕垂直偏移量等。

编码参数

-c:v h264_nvenc -b:v 12M -r 60 -c:a aac -b:a 128k
  • -c:v h264_nvenc:指定视频编码器为 h264_nvenc,这是 NVIDIA 的硬件编码器,可利用 GPU 进行加速编码。
  • -b:v 12M:指定视频的比特率为 12M,即每秒 12 兆比特,用于控制视频的质量和文件大小。
  • -r 60:指定视频的帧率为 60 帧每秒。
  • -c:a aac:指定音频编码器为 AAC,这是一种常用的音频编码格式。
  • -b:a 128k:指定音频的比特率为 128k,即每秒 128 千比特。

时长和预设参数

-t 894.816 -preset medium -y
  • -t 894.816:指定输出视频的时长为 894.816 秒,即截取指定时长的视频。
  • -preset medium:指定编码的预设参数,用于控制编码速度与压缩效率的平衡。medium 表示中等速度和压缩效率。
  • -y:覆盖已存在的输出文件,无需用户确认。

输出文件参数

D:/XiaoShuo/0007.东宫岁月/start/0007.mp4

指定输出文件的路径和文件名,这里输出的是一个 MP4 格式的视频文件。

综上所述,这个 FFmpeg 命令的主要功能是将多个视频文件拼接在一起,同时将两个音频文件混合作为输出视频的音频流,并添加字幕和调整视频的分辨率、质量等参数,最终生成一个 MP4 格式的视频文件。

使用FFmpeg 做混剪软件的命令解释