安装教程 https://blog.csdn.net/yuanmomoya/article/details/141992114
ffmpeg转换操作视频十分的占用cpu,会把cpu打满,线上使用的话需要注意下
命令行操作
一、视频转码
将视频从一种格式转换为另一种格式:
bash
ffmpeg -i input_video.mp4 output_video.avi
这将把输入的 MP4 视频文件input_video.mp4
转换为 AVI 格式的视频文件output_video.avi
。
指定视频编码格式
bash
ffmpeg -i input.mp4 -c:v libx264 output.mp4
这里将输入视频用 H.264 编码格式进行转码输出。
二、提取音频
从视频中提取音频
bash
ffmpeg -i video_with_audio.mp4 -vn output_audio.mp3
-vn
表示不处理视频流,只提取音频流输出为 MP3 文件。
三、裁剪视频
按时间裁剪视频:
bash
ffmpeg -i input_video.mp4 -ss 00:00:10 -to 00:00:20 output_video.mp4
从输入视频中从第 10 秒开始到第 20 秒结束裁剪出一段视频输出。
按尺寸裁剪视频:
bash
ffmpeg -i input_video.mp4 -filter:v "crop=width:height:x:y" output_video.mp4
例如crop=640:480:100:100
表示裁剪出一个宽 640、高 480,从坐标 (100,100) 开始的视频区域。
四、合并视频
多个视频文件按顺序合并
首先创建一个文本文件list.txt
,内容为要合并的视频文件路径,每行一个路径,例如:
plain
file 'video1.mp4'
file 'video2.mp4'
file 'video3.mp4'
然后执行以下命令:
bash
ffmpeg -f concat -safe 0 -i list.txt -c copy output_video.mp4
五、调整视频参数
改变视频分辨率:
bash
ffmpeg -i input_video.mp4 -vf scale=width:height output_video.mp4
例如scale=640:480
将视频分辨率调整为 640x480。
调整视频帧率:
bash
ffmpeg -i input_video.mp4 -r new_framerate output_video.mp4
例如-r 30
将视频帧率调整为 30 帧 / 秒。
六、截图
从视频中截取一帧图像:
bash
ffmpeg -i input_video.mp4 -ss 00:00:10 -vframes 1 output_image.jpg
从视频的第 10 秒处截取一帧图像输出为 JPEG 格式。
七、添加水印
为视频添加图片水印:
bash
ffmpeg -i input_video.mp4 -i watermark.png -filter_complex "overlay=x=10:y=10" output_video.mp4
在输入视频的坐标 (10,10) 处添加一个图片水印。
为视频添加文字水印:
bash
ffmpeg -i input_video.mp4 -vf "drawtext=text='Watermark Text':fontfile=/path/to/font.ttf:fontsize=50:x=100:y=100:fontcolor=white:shadowy=2" output_video.mp4
在视频的坐标 (100,100) 处添加文字水印,设置字体、字号、颜色和阴影等参数。
Python操作
给出一个简单的示例,将视频转为720p
主要是用subprocess来执行拼接构建的ffmpeg命令
python
import subprocess
def convert_video(input_file, output_file, target_width=720, target_height=1280):
# 构建 FFmpeg 命令
ffmpeg_cmd = [
'ffmpeg',
'-i', input_file,
'-y', # 添加此行来自动覆盖现有文件
'-vf',
f"scale='{target_width}':'{target_height}':force_original_aspect_ratio=increase,crop='{target_width}':'{target_height}'",
output_file
]
# 执行 FFmpeg 命令
subprocess.run(ffmpeg_cmd, check=True)