Skip to content

FFmpeg

视频分割、合并

bash
# 将一个视频分割为 两个视频
ffmpeg -i input_video.mp4 -t 00:02:30 -c copy output_part1.mp4
ffmpeg -i input_video.mp4 -ss 00:02:30 -c copy output_part2.mp4
ffmpeg -ss 01:30:00 -t 00:30:00 -i input.mp4 -c copy output.mp4
# 将四个视频合并为 一个视频 注意添加线程数 防止电脑死机
ffmpeg -i 1.mp4 -i 2.mp4 -i 3.mp4 -i 4.mp4 -filter_complex "concat=n=4:v=1:a=1" -threads 4 output.mp4

实测 AMD R7-3800X 8Core16Thread 在不加 threads 的情况下,会直接死机

提取图片

为了使用FFmpeg从视频中提取照片,你需要首先确保你的系统上安装了FFmpeg。以下是如何使用FFmpeg从视频中提取单帧为图像的基本命令:

bash
ffmpeg -i input_video.mp4 -ss 00:00:10 -frames:v 1 output_image.png

这里是命令参数的简要解释:

  • -i input_video.mp4: 指定输入文件,这里是你的视频文件。
  • -ss 00:00:10: 指定从视频的具体时间码开始抓取帧。这个例子中是从视频开始的第10秒处获取。
  • -frames:v 1: 表示你要从这个时间码开始提取的视频帧的数量,这里我们设置为 1,即提取单一的帧作为图像。
  • output_image.png: 是输出文件的名字和格式。

如果你想要从视频中提取多个图片,改变 -frames:v 参数的值或使用其他方法如指定一个频率 -vf "fps=1" 来每秒提取一帧。

请注意,这个命令提取的单帧将会根据你提供的准确时间戳来选择,并且输出文件的格式可以是你选择的任何FFmpeg支持的图片格式,如 JPG, PNG 等。

确保替换 input_video.mp4output_image.png 为你自己的视频文件名和希望保存的图像文件名。

提取所有图片

要使用FFmpeg将视频中的全部帧提取为图片,你可以使用FFmpeg的命令行工具。以下是一个基本的命令示例,它会把视频中的每一帧都保存为一张图片(通常是JPEG或PNG格式)。

提取为JPEG图片

bash
ffmpeg -i input.mp4 -vf fps=1 output%d.jpg

但上面的命令实际上并不总是按照视频的实际帧率来提取每一帧(除非你设置的fps值与视频的实际帧率相匹配)。如果你想要确保提取视频中的每一帧,应该省略-vf fps=1部分,因为这会限制FFmpeg输出的帧率。

正确的命令(提取视频中的每一帧为JPEG图片):

bash
ffmpeg -i input.mp4 -qscale:v 2 output%d.jpg

这里,-qscale:v 2是用来设置输出JPEG图片的质量的(范围从1(最好)到31(最差),但并非所有编解码器都遵循这个范围)。注意,这个参数可能会根据你的FFmpeg版本和编译选项有所不同。对于新版本的FFmpeg,你可能需要使用-q:v代替-qscale:v

提取为PNG图片

PNG是一种无损格式,适合需要高质量图像的场景。

bash
ffmpeg -i input.mp4 -vf fps=1 output%d.png

但同样,如果你想要提取每一帧,应省略-vf fps=1

bash
ffmpeg -i input.mp4 output%d.png

注意

  • %d是一个占位符,FFmpeg会自动用帧的序号替换它。
  • 根据你的视频长度和分辨率,这将生成大量的图片文件,可能会占用大量磁盘空间。
  • 如果你的视频有音频轨道,FFmpeg会忽略它,因为只关注视频帧。
  • 提取的帧速率(FPS)和视频的实际帧率可能不同,除非你特别指定了-vf fps=原视频帧率(但通常很难知道确切的帧率,除非你已经知道了)。
  • 某些编解码器或视频格式可能不支持直接提取每一帧,但大多数情况下,上述命令应该工作得很好。

查看视频详细信息

bash
ffmpeg -i your_video.mp4

吃好喝好 快乐地活下去