📚:FFmpeg 提供了丰富的命令行选项和功能,可以用来处理音视频文件、流媒体等,掌握命令行的使用,可以有效提高工作效率。
目录
[🔵 将视频文件转换为另一种格式](#🔵 将视频文件转换为另一种格式)
[🔵 指定视频编码器和比特率](#🔵 指定视频编码器和比特率)
[🔵 将音频文件转换为另一种格式](#🔵 将音频文件转换为另一种格式)
[🔵 指定音频编码器和比特率](#🔵 指定音频编码器和比特率)
[🔵 合并视频和音频流](#🔵 合并视频和音频流)
[🔵 裁剪视频](#🔵 裁剪视频)
[🔵 截取视频帧](#🔵 截取视频帧)
[六、 屏幕录制和实时流媒体](#六、 屏幕录制和实时流媒体)
以下是一些常见的 FFmpeg 命令行用法和示例:
bash
// 一般的 ffmpeg 命令结构如下:
ffmpeg [全局选项] [输入选项] -i 输入文件 [输出选项] 输出文件
一、视频转换和格式转换
🔵 将视频文件转换为另一种格式
bash
// 将 input.mp4 文件转换为 output.avi 文件
ffmpeg -i input.mp4 output.avi
🔵 指定视频编码器和比特率
bash
// -c:v libx264 指定视频编码器为 H.264,
// -b:v 1000k 指定视频比特率为 1000kbit/s
ffmpeg -i input.mp4 -c:v libx264 -b:v 1000k output.mp4
二、音频转换和格式转换
🔵 将音频文件转换为另一种格式
bash
// 将 input.wav 转换为 output.mp3
ffmpeg -i input.wav output.mp3
🔵 指定音频编码器和比特率
bash
// -c:a libmp3lame 指定音频编码器为 MP3(LAME)
// -b:a 128k 指定音频比特率为 128kbit/s
ffmpeg -i input.wav -c:a libmp3lame -b:a 128k output.mp3
三、合并视频和音频
🔵 合并视频和音频流
bash
// -i video.mp4 -i audio.wav 分别指定视频和音频输入文件。
// -c:v copy 表示视频流直接复制,
// -c:a aac 指定音频编码为 AAC。
// -strict experimental 是为了支持某些 AAC 编码器
ffmpeg -i video.mp4 -i audio.wav -c:v copy -c:a aac -strict experimental output.mp4
四、视频剪切和裁剪
🔵 裁剪视频
bash
// 从原视频中裁剪出5s的视频
// -ss 00:00:05 指定开始裁剪的时间(这里是 5s),
// -to 00:00:10 指定结束时间(这里是 10s)。
// -c:v copy 和 -c:a copy 表示视频和音频流不重新编码,直接复制
ffmpeg -i input.mp4 -ss 00:01:00 -to 00:02:00 -c:v copy -c:a copy output.mp4
五、视频截图和抽取帧
🔵 截取视频帧
bash
// -vf "select='eq(n\,100)'" 表示选择第 100 帧作为输出。
// -vsync vfr 设置为可变帧率输出。
// 输出文件是 frame.png。
ffmpeg -i input.mp4 -vf "select='eq(n\,100)'" -vsync vfr frame.png
六、 屏幕录制和实时流媒体
🔵录制桌面
bash
// 在linux 系统下进行屏幕录制
// -f x11grab 表示使用 X11 桌面录制,
// -framerate 30 设置帧率为 30fps,
// -video_size 1920x1080 设置视频尺寸,
// -i :0.0+0,0 是屏幕位置参数。
ffmpeg -f x11grab -framerate 30 -video_size 1920x1080 -i :0.0+0,0 output.mp4
// 在 Windows 系统上进行屏幕录制
// -f gdigrab:使用 gdigrab 输入设备,这是在 Windows 上进行屏幕捕获的一种方法。
// -framerate 30:指定录制的帧率,可以根据需要进行调整。
// -video_size 1920x1080:指定录制的视频尺寸,这里设置为1920x1080,你也可以根据需要调整。
// -i desktop:指定捕获整个桌面。你也可以指定具体的窗口标题或坐标区域进行捕获。
// 停止 ctrl + c
ffmpeg -f gdigrab -framerate 30 -video_size 1920x1080 -i desktop output.mp4
🔵推送实时流媒体
bash
// -re 表示以实时速率读取输入,
// -i input.mp4 指定输入文件。
// -c:v libx264 和 -c:a aac 分别指定视频和音频编码器。
// rtmp://server/live/streamKey 是推流到的服务器地址和流名
ffmpeg -re -i input.mp4 -c:v libx264 -preset fast -maxrate 3000k -bufsize 6000k -pix_fmt yuv420p -g 50 -c:a aac -b:a 128k -f flv rtmp://server/live/streamKey
七、常用参数集合
bash
// 输入和输出选项:
-i 输入文件:指定输入文件。
-f 格式:指定输入或输出的格式,例如 -f mp4。
-r 帧率:设置帧率,例如 -r 30。
-s 分辨率:设置视频分辨率,例如 -s 1920x1080。
// 视频处理
-c:v 编解码器:指定视频编解码器,如 -c:v libx264。
-b:v 比特率:设置视频比特率,例如 -b:v 2M。
-vf 滤镜:应用视频滤镜,例如 -vf scale=1280:720(调整分辨率)或 -vf crop=w:h:x:y(裁剪)。
// 音频处理
-c:a 编解码器:指定音频编解码器,如 -c:a aac。
-b:a 比特率:设置音频比特率,例如 -b:a 192k。
-ar 采样率:设置音频采样率,如 -ar 44100。
// 其他常用选项
-ss 开始时间:从指定时间开始处理输入文件。
-t 持续时间:设置处理的持续时间。
-map 选项:映射输入流。
-preset 设置:调整编码速度和质量之间的平衡。
总结
这些是常见的 ffmpeg
命令行选项和功能,能够涵盖大多数基本的视频和音频处理需求。根据具体的任务和需求,可以灵活组合这些选项来完成各种复杂的视频处理任务。