FFmpeg命令行使用教程
FFmpeg是一种非常强大的开源工具,可以用于处理各种多媒体数据,如音频,视频和图像。它提供了丰富的功能,包括转码,剪辑,转换格式,添加滤镜等。本教程将详细介绍如何使用FFmpeg命令行,给出66个具体的使用案例。
1. 安装FFmpeg
首先,你需要在你的机器上安装FFmpeg。对于大多数操作系统(如Windows,macOS和Linux),你可以从FFmpeg的官方网站下载安装包。在安装完成后,你可以在命令行中输入以下命令来验证FFmpeg是否已经成功安装:
ffmpeg -version
这将显示FFmpeg的版本信息。
2. FFmpeg基本命令
FFmpeg的主要功能通过以下四个命令实现:
- ffmpeg:用于处理视频和音频
- ffprobe:用于查看多媒体信息
- ffplay:是一个简单的播放器,使用SDL和FFmpeg库
- ffserver:用于流媒体服务器(2018年已弃用)
本教程将主要关注ffmpeg命令的使用。
3. 使用案例
录制 RTSP 视频流
- 持续录制 RTSP 视频流并保存为10秒长度的视频片段
如果你想以25fps的速率只录制视频数据(不录制音频)并将其分割为多个片段,你可以使用以下的命令:
ffmpeg -i rtsp://your_rtsp_stream -c:v copy -map 0:v -r 25 -f segment -segment_time 10 -segment_format_options movflags=+faststart output%03d.mp4
在这个命令中:
- rtsp://your_rtsp_stream 是RTSP流的地址。
- -c:v copy 表示复制视频编码,不进行重新编码。
- -map 0:v 表示只复制视频流。0:v表示第一个(也是唯一的)输入文件的所有视频流。
- -r 25 表示设置帧率为25fps。
- -f segment 表示使用 segment 封装器。
- -segment_time 10 表示每个片段的长度应该是10秒。
- -segment_format_options movflags=+faststart 是针对MP4格式的选项,它将“moov atom”移动到文件的前面,这对于在线播放非常有用。
output%03d.mp4 是输出文件的路径,%03d 是一个序号,它会从0开始递增。例如,第一个文件名将是 output000.mp4,第二个文件名将是 output001.mp4,以此类推。
请注意,你需要将 rtsp://your_rtsp_stream 替换为你的RTSP流地址。
同时,这个命令假设RTSP源已经以25fps或更高的帧率提供视频。如果RTSP源的帧率低于25fps,那么-r 25命令无法增加帧率,因为它不能创造不存在的帧。
视频转码
- 将AVI转换为MP4:
ffmpeg -i input.avi output.mp4
- 将MOV转换为MP4:
ffmpeg -i input.mov output.mp4
- 将MKV转换为MP4,保持原始音频和视频质量:
ffmpeg -i input.mkv -c:v copy -c:a copy output.mp4
- 转换视频格式并改变视频质量(CRF值越低,质量越高,通常取值范围为18-28):
ffmpeg -i input.mp4 -vcodec libx264 -crf 20 output.mp4
- 将视频转换为GIF:
ffmpeg -i input.mp4 output.gif
音频转码
- 将MP3转换为WAV:
ffmpeg -i input.mp3 output.wav
- 将WAV转换为MP3:
ffmpeg -i input.wav output.mp3
- 将FLAC转换为MP3:
ffmpeg -i input.flac output.mp3
- 将音频从视频中提取出来:
ffmpeg -i input.mp4 -vn -ar 44100 -ac 2 -b:a 192k output.mp3
- 将音频转换为单声道:
ffmpeg -i input.mp3 -ac 1 output.mp3
视频剪辑
- 截取视频的一部分(从第2分钟开始,持续30秒):
ffmpeg -ss 00:02:00 -i input.mp4 -t 00:00:30 -c:v copy -c:a copy output.mp4
- 截取视频的一部分(从第60秒开始,持续30秒):
ffmpeg -ss 60 -i input.mp4 -t 30 -c:v copy -c:a copy output.mp4
- 截取视频的一部分并转换格式:
ffmpeg -ss 00:02:00 -i input.avi -t 00:00:30 output.mp4
视频和音频合并
- 合并视频和音频:
ffmpeg -i video.mp4 -i audio.wav -c:v copy -c:a aac -strict experimental output.mp4
- 从多个音频文件中创建一个音频文件:
ffmpeg -i "concat:input1.mp3|input2.mp3" -acodec copy output.mp3
图片和音频合并为视频
- 将图片和音频合并为视频:
ffmpeg -loop 1 -i image.jpg -i audio.mp3 -c:v libx264 -c:a aac -strict experimental -b:a 192k -shortest output.mp4
图片序列转换为视频
- 将图片序列(如img001.jpg,img002.jpg,…)转换为视频:
ffmpeg -framerate 24 -i img%03d.jpg output.mp4
视频转换为图片序列
- 将视频转换为图片序列:
ffmpeg -i input.mp4 img%03d.jpg
添加水印
- 在视频中添加水印(水印位置在左上角):
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=10:10" output.mp4
- 在视频中添加水印(水印位置在右下角):
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=W-w-10:H-h-10" output.mp4
改变分辨率
- 将视频的分辨率改为720p:
ffmpeg -i input.mp4 -vf "scale=-1:720" output.mp4
- 将视频的分辨率改为1080p:
ffmpeg -i input.mp4 -vf "scale=-1:1080" output.mp4
旋转视频
- 将视频旋转90度:
ffmpeg -i input.mp4 -vf "transpose=1" output.mp4
- 将视频旋转180度:
ffmpeg -i input.mp4 -vf "transpose=2,transpose=2" output.mp4
调整视频速度
- 将视频速度加倍:
ffmpeg -i input.mp4 -filter:v "setpts=0.5*PTS" output.mp4
- 将视频速度减半:
ffmpeg -i input.mp4 -filter:v "setpts=2.0*PTS" output.mp4
音频淡入淡出
- 添加音频淡入效果:
ffmpeg -i input.mp3 -af "afade=t=in:ss=0:d=5" output.mp3
- 添加音频淡出效果:
ffmpeg -i input.mp3 -af "afade=t=out:st=50:d=5" output.mp3
调整音量
- 将音频音量提高10dB:
ffmpeg -i input.mp3 -af "volume=10dB" output.mp3
- 将音频音量减少10dB:
ffmpeg -i input.mp3 -af "volume=-10dB" output.mp3
调整视频亮度
- 提高视频的亮度:
ffmpeg -i input.mp4 -vf "eq=brightness=0.06" output.mp4
- 降低视频的亮度:
ffmpeg -i input.mp4 -vf "eq=brightness=-0.06" output.mp4
从视频中提取音轨
- 从视频中提取音轨:
ffmpeg -i input.mp4 -map 0:a -c:a copy output.aac
- 从视频中提取多个音轨:
ffmpeg -i input.mp4 -map 0:a -c:a copy output1.aac -map 1:a -c:a copy output2.aac
从视频中提取字幕
- 从视频中提取字幕:
ffmpeg -i input.mp4 -map 0:s:0 output.srt
压缩视频
- 压缩视频文件大小:
ffmpeg -i input.mp4 -vcodec libx265 -crf 28 output.mp4
调整帧率
- 将视频的帧率调整为24 fps:
ffmpeg -i input.mp4 -r 24 output.mp4
- 将视频的帧率调整为60 fps:
ffmpeg -i input.mp4 -r 60 output.mp4
音频转换为不同的采样率
- 将音频转换为44.1 kHz:
ffmpeg -i input.mp3 -ar 44100 output.mp3
- 将音频转换为48 kHz:
ffmpeg -i input.mp3 -ar 48000 output.mp3
音频降噪
- 对音频进行降噪处理:
ffmpeg -i input.mp3 -af "afftdn=nf=4" output.mp3
创建视频缩略图
- 从视频中创建缩略图:
ffmpeg -i input.mp4 -vf "thumbnail" -frames:v 1 output.jpg
- 每隔一秒从视频中创建缩略图:
ffmpeg -i input.mp4 -vf "fps=1" output_%d.jpg
视频镜像翻转
- 将视频进行水平镜像翻转:
ffmpeg -i input.mp4 -vf "hflip" output.mp4
- 将视频进行垂直镜像翻转:
ffmpeg -i input.mp4 -vf "vflip" output.mp4
添加静音音轨
- 在视频中添加一个静音音轨:
ffmpeg -i input.mp4 -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=44100 output.mp4
删除音频或视频轨道
- 从视频中删除音频轨道:
ffmpeg -i input.mp4 -c copy -an output.mp4
- 从视频中删除视频轨道:
ffmpeg -i input.mp4 -c copy -vn output.mp4
为视频添加字幕
- 为视频添加字幕:
ffmpeg -i input.mp4 -vf "subtitles=subtitles.srt" output.mp4
- 将字幕文件烧录到视频中:
ffmpeg -i input.mp4 -vf "ass=subtitles.ass" output.mp4
音频和视频同步
- 音频和视频同步:
ffmpeg -i input.mp4 -itsoffset 0.5 -i input.mp4 -map 0:v -map 1:a -c:v copy -c:a aac output.mp4
提取视频关键帧
- 提取视频关键帧:
ffmpeg -i input.mp4 -vf "select=eq(pict_type\,I)" -vsync vfr output_%03d.png
两个视频拼接
- 横向拼接两个视频:
ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex hstack output.mp4
- 纵向拼接两个视频:
ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex vstack output.mp4
视频裁剪
- 裁剪视频:
ffmpeg -i input.mp4 -filter:v "crop=out_w:out_h:x:y" output.mp4
视频倒播
- 视频倒播:
ffmpeg -i input.mp4 -vf "reverse" -af "areverse" output.mp4
音频和视频混流
- 音频和视频混流:
ffmpeg -i input.mp4 -i input.mp3 -c:v copy -c:a aac -strict experimental output.mp4
调整音频速度
- 将音频速度加倍:
ffmpeg -i input.mp3 -filter:a "atempo=2.0" -vn output.mp3
- 将音频速度减半:
ffmpeg -i input.mp3 -filter:a "atempo=0.5" -vn output.mp3
视频去噪
- 视频去噪:
ffmpeg -i input.mp4 -vf "hqdn3d" output.mp4
录制屏幕
- 录制屏幕:
ffmpeg -f x11grab -r 25 -s 1280x720 -i :0.0 -codec:v libx264 -pre lossless_ultrafast -threads 0 output.mkv
提取视频中的帧
- 提取视频中的帧:
ffmpeg -i input.mp4 -vf "select=eq(pict_type\,I)" -vsync vfr output_%03d.png
视频分割
- 将视频分割为10秒的片段:
ffmpeg -i input.mp4 -c copy -map 0 -segment_time 00:00:10 -f segment output%03d.mp4
添加背景音乐
- 为视频添加背景音乐:
ffmpeg -i input.mp4 -i background.mp3 -c:v copy -c:a aac -strict experimental -map 0:v:0 -map 1:a:0 output.mp4
创建视频幻灯片
- 创建视频幻灯片(每张图片显示5秒):
ffmpeg -framerate 1/5 -i img%03d.png -c:v libx264 -r 30 -pix_fmt yuv420p output.mp4
添加封面图像
- 为音频文件添加封面图像:
ffmpeg -i input.mp3 -i cover.jpg -c copy -map 0 -map 1 -metadata:s:v title="Album cover" -metadata:s:v comment="Cover (Front)" output.mp3
以上就是本篇教程中的全部66个FFmpeg命令行使用案例,希望这些案例能对你在音视频处理方面的工作带来帮助。记住,这只是FFmpeg功能的冰山一角,它还有更多强大的功能等待你去发现和掌握。