ffmpeg下载安装及截取视频帧
1.下载安装ffmpeg
本篇介绍mac版安装方式
下载
- 记录该文件的位置 可以打开终端输入pwd对路径进行复制保存
安装
- 打开终端
- 配置环境变量:
- 打开配置文件 open -e ~/.zshrc
- 将export PATH="/Users/jiangfulai/Downloads/ffmpeg:$PATH"添加至文件中
- 保存关闭
- 执行 source ~/.zshrc
- 验证 ffmpeg -version
可以看到已经安装成功啦。
2. 截取视频帧图片
单个文件
ffmpeg -i input.mp4 -ss 00:00:05 -vframes 1 output.jpg
参数智能解释:
ffmpeg:这是命令行中调用FFmpeg程序的命令。FFmpeg是一个非常强大的开源多媒体处理工具,可以用来录制、转换数字音视频,并能将其转化为流。-i input.mp4:-i参数后面跟的是输入文件的路径和名称。例子中,input.mp4是要处理的视频文件。-ss 00:00:05:这个参数指定了从视频的哪个时间点开始处理。00:00:05表示从视频的第5秒开始。-vframes 1:这个参数指定了要处理的视频帧数。1表示只处理一帧,即从这个视频中提取一张图片。output.jpg:这是输出文件的名称和格式。在这个例子中,输出的是一张JPEG格式的图片,文件名为output.jpg。
当然资源可以是网络资源
ffmpeg -i https://xxxxx/2.mp4 -ss 00:00:05 -frames:v 1 -f image2 output.jpg
批量处理
批量处理的方式很多,我自己遇到的是一个各种嵌套的文件夹下,不一定哪个层次有mp4文件,需要对所有视频进行截取一帧图片并将图片保存在同视频目录下。
不过呢,因为我这个之前处理其他需求已经有一个json文件,记录了各视频的位置, 如下
[
{"path": "/Vxx/public/备份/xx素材/视频2/测试.mp4", "name": "测试"},
{"path": "/Vxx/public/备份/xx素材/视频2/测试2.mp4", "name": "测试2"},
{"path": "/Vxx/public/备份/xx素材/视频1/检验基础课程课件/录像/xxx/第一讲测试.mp4", "name": "第一讲测试"},
{"path": "/Vxx/public/备份/xx素材/视频1/检验基础课程课件/录像/xxx/第一讲测试2.mp4", "name": "第一讲测试2"},
...
]
这样降低了难度,
批量处理脚本:(依赖python环境)
#!/bin/bash
# JSON文件路径
json_file="1.json"
# 使用Python解析JSON并遍历每个元素
python3 -c "
import json
import sys
import os
import subprocess
# 读取JSON文件
with open(sys.argv[1], 'r') as file:
data = json.load(file)
# 遍历JSON数组中的每个元素
for item in data:
video_path = item['path']
video_name = item['name']
video_dir = os.path.dirname(video_path)
output_image = os.path.join(video_dir, f'{video_name}.jpg')
# 检查视频文件是否存在
if not os.path.isfile(video_path):
print(f'Warning: Video file {video_path} does not exist. Skipping.')
continue # 跳过当前循环迭代,继续处理下一个视频
# 使用ffmpeg从视频中截取图片
try:
subprocess.run(['ffmpeg', '-i', video_path, '-ss', '00:00:05', '-vframes', '1', output_image], check=True)
print(f'Successfully extracted image from {video_path} to {output_image}')
except subprocess.CalledProcessError as e:
print(f'Failed to extract image from {video_path}: {e}')
" "$json_file"
至此,单个视频取帧 及批量取帧已经实现啦。
记录一下~