0%

FFmpeg拼接视频 并设置帧率、分辨率、编码器

获取视频参数:

  • 安装cv2库:
pip3 install opencv-python==4.4.0.46  # 指定版本 4.4.0.46
  • 分辨率获取:
import cv2
video = cv2.VideoCapture(f"{video_path}/v1.mp4")
resolution = (int(video.get(cv2.CAP_PROP_FRAME_WIDTH)), int(video.get(cv2.CAP_PROP_FRAME_HEIGHT)))
print(resolution)

# 输出:(1920, 1080)
  • 获取fps值(帧率):
import cv2
video = cv2.VideoCapture(f"{video_path}/v1.mp4")
fps = video.get(cv2.CAP_PROP_FPS) # 这里可能取到的值是 29.xxx 59.xxx 所以我们需要向上取整
# 向上取整
fps_a = math.ceil(fps)
print(f"fps值:{fps_a}")

# 输出:fps值:60
  • 获取编码器名称
# ffprobe 是FFmpeg工具集中的一个命令行工具
file_path = "v1.mp4"
command = f"ffprobe -v quiet -select_streams v:0 -show_entries stream=codec_name -of default '{file_path}'"
result = subprocess.run(command, shell=True, stdout=subprocess.PIPE)
encoder = result.stdout.decode().strip()
# 通过指定 -select_streams v:0 参数选择视频流的第一个视屏流,然后使用 -show_entries stream=codec_name 参数来获取该视频流的编码器名称。最后,我们使用 subprocess.run() 函数来执行命令并获取输出。

# 这里返回的并非我们想要的纯的内容,而是添加了其他东西,所以我们需要在提取一次
new_encoder = re.search("codec_name=(?P<codec_name>.*?)\n", encoder)
print(f"Video Encoder: {new_encoder.group('codec_name')}")

FFmpeg拼接视频 并设置帧率、分辨率、编码器

是的,FFmpeg提供了一种方法来拼接视频。您可以使用concat过滤器来实现这个目的。

首先,您需要创建一个文本文件,其中包含要拼接的视频文件的列表。每个文件应在一行上,并按照它们应该出现的顺序排列。

例如,假设您有三个视频文件,名为video1.mp4video2.mp4video3.mp4,您可以在一个名为input.txt的文本文件中按如下方式列出它们:

file 'video1.mp4'
file 'video2.mp4'
file 'video3.mp4'

然后,您可以使用以下命令来拼接这些视频文件:

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

这里,-f concat指定了使用concat过滤器,-i input.txt指定了输入文件为input.txt-c copy表示将输入流的编码直接复制到输出流中,而不需要重新编码。最后,您指定了输出文件名称为output.mp4

请注意,这种方法要求输入的视频文件具有相同的分辨率、帧率和编码器。如果这些参数不同,您可能需要进行一些额外的处理来确保拼接后的视频质量。




FFmpeg 指定编码器:

使用FFmpeg编码器进行音频或视频编码时,可以通过指定-acodec-vcodec参数来设置编码器。例如,使用AAC音频编码器可以设置-acodec aac,使用H.264视频编码器可以设置`-vcodec h2641。

同时,在编码的过程中也可以设置音频或视频的参数,例如码率、通道数、采样率等1。

具体使用FFmpeg进行编码器设置的命令和参数可以参考FFmpeg官方文档或相关教程