本文描述了FFmpeg命令行接口规范和应用示例。
FFmpeg是一款用于处理音视频的命令行程序,它可以在Linux、Windows和Mac OS等多种操作系统中使用。它支持多种音视频格式的转码、剪辑、合并、分离、混音、屏幕录制等各种操作,可以满足多种音视频处理需求。
FFmpeg命令行参数非常丰富,需要参照文档,反复练习才能熟练运用。
“-”开头的字符串是FFmpeg内定的参数名,形如${value}的字符串是由用户指定的参数值。
FFmpeg 命令的典型语法是:
#URL可以是本地文件路径或网络串流地址
#省略号“...”表示可能存在多个输入或输出参数集。
#在多个输入URL的情况下,“输入选项列表”仅描述紧跟其后的“输入URL”,多输出URL的情况类似。
ffmpeg [全局选项] [[输入URL选项列表] -i 输入URL]... [[输出URL选项列表] 输出URL]...
#“全局选项”示例
ffmpeg -h #查看帮助信息
ffmpeg -version #查看版本信息
#“输入URL”示例
#查看本地媒体文件信息
ffmpeg -i video.mp4
#查看网络串流信息
ffmpeg -i http://127.0.0.1/videofiles/test.flv
#“输出URL”示例
#复制视频流,禁用音频流。
ffmpeg -i test.mp4 -vcodec copy -an video_only.mp4
#复制音频流,禁用视频流。
ffmpeg -i test.mp4 -acodec copy -vn audio_only.mp4
通过如下参数可以查询到关于FFmpeg程序的内部信息。
-version 显示版本
-buildconf 显示编译配置
-protocols 显示可用的协议
-formats 显示可用格式(muxers+demuxers)
-filters 显示可用的过滤器
-muxers 显示可用复用器
-demuxers 显示可用解复用器
-codecs 显示可用编解码器 (decoders+encoders)}
-decoders 显示可用解码器
-encoders 显示可用编码器
-layouts 显示标准声道名称
-pix_fmts 显示可用的像素格式
-sample_fmts 显示可用的音频采样格式
-bsfs 显示可用比特流filter
-colors 显示可用的颜色名称
全局选项作用于所有的输入和输出文件,非全局选项仅作用于特定的输入或者输出文件。
-loglevel ${level} 日志级别。
-v loglevel 日志级别。
-report 生成报告。
-max_alloc ${bytes} 单个分配块的最大尺寸。
-y 是否覆盖输出文件。
-n 从不覆盖输出文件。
-ignore_unknown 忽略未知流类型。
-filter_threads 非复杂滤镜线程数量。
-filter_complex_threads 复杂滤镜线程数量。
-stats 编码过程中打印进度报告
-max_error_rate ${rate} 最大解码错误率(取值范围[0.0, 1.0]),超出此阈值将返回错误。
-vol ${volume} 改变音量(256=正常音量)
-i ${input_file} 输入文件路径或URL。
-f ${format} 强制输入或输出文件格式。输入文件的格式通常是自动检测的,并根据输出文件的文件扩展名进行猜测,因此在大多数情况下不需要此选项。
-ss ${position} 录制或转码的起始时间。
-t ${duration} 录制或转码的持续时长。
-to ${time_stop} 录制或转码的截止时间。
-re 用一倍帧率读取输入文件,等价于-readrate 1。
-stream_loop ${loop_count} 输入流的循环次数,-1可表示无限次。
-vcodec ${codec} 指定视频编解码器。
-b:v ${bitrate} 指定视频比特率。
-r ${framerate} 指定视频帧率。
-s ${size} 指定视频分辨率。
-crf ${value} 设置视频质量(Constant Rate Factor)。
-acodec ${codec} 指定音频编解码器。
-b:a ${bitrate} 指定音频比特率。
-ar ${samplerate} 指定音频采样率。
-ac ${channels} 指定音频通道数。
-s ${size} 设置视频帧尺寸(WxH 或 缩写)
-sn 禁用字幕
-scodec ${codec} 强制字幕使用编码器${codec} ('copy' to copy stream)
-stag ${fourcc/tag} 强制字幕fourcc/tag
-fix_sub_duration 修正字幕时长duration
-canvas_size ${size} 设置画布大小(WxH 或 缩写)
-spre ${preset} 用指定的preset(预设置文件)作为字幕选项
-movflags ${faststart} 针对MP4格式的文件,优化其播放过程。
-fpre ${preset_file} 指定预设文件,包含了一系列的编码参数设置。
-metadata ${key}=${value} 设置媒体文件的元数据。
-vf ${filter}:应用视频滤镜效果。
-af ${filter}:应用音频滤镜效果。
#网络串流录制成mp4
ffmpeg -i "http://127.0.0.1/live/stream.m3u8" -c copy output.mp4
#网络串流录制,视频用x264编码,音频用aac编码,视频码率为1Mbps,编码算法配置为medium
ffmpeg -i "http://127.0.0.1/live/stream.m3u8" -c:v libx264 -c:a aac -b:v 1M -preset medium -f mp4 output.mp4
#将mp4文件推流到RTMP地址。
#参数“-re”表示模拟实际播放的速度进行推流。
ffmpeg -re -i input.mp4 -c copy -f flv rtmp://127.0.0.1/live/streamkey
#将mp4文件推流到RTP地址。
#参数“-stream_loop -l”表示无限循环(负1代表无穷次)播放input.mp4。
ffmpeg -re -stream_loop -1 -i "input.mp4" -vcodec h264 -acodec libopus -f rtp_mpegts rtp://127.0.0.1:10000
#参数“-bf 0”表示视频编码时,BFrame数量为0,即禁止使用B帧,避免WebRTC播放时卡顿。
ffmpeg -re -stream_loop -1 -i "input.mp4" -bf 0 -vcodec h264 -acodec libopus -f rtsp -rtsp_transport tcp rtsp://127.0.0.1/live/test
给新手的20多个FFmpeg命令示例
FFmpeg命令行,从小白入门到收藏吃灰
音视频学习之ffmpeg常用基础命令整理