FFmpeg命令行详解

摘要

本文描述了FFmpeg命令行接口规范和应用示例。

FFmpeg简介

FFmpeg是一款用于处理音视频的命令行程序,它可以在Linux、Windows和Mac OS等多种操作系统中使用。它支持多种音视频格式的转码、剪辑、合并、分离、混音、屏幕录制等各种操作,可以满足多种音视频处理需求。

FFmpeg命令行参数非常丰富,需要参照文档,反复练习才能熟练运用。

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自描述信息

通过如下参数可以查询到关于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常用基础命令整理

你可能感兴趣的:(音视频,ffmpeg)