尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

ffmpeg核心操作

ffmpeg核心操作 FFmpeg 是一个功能极其强大的开源多媒体框架能够录制、转换和流式传输音频和视频。1. 基础信息查看在开始处理之前通常需要查看媒体文件的详细信息编码格式、分辨率、时长、码率等。命令-i(Input)解释指定输入文件。如果不加其他参数直接运行FFmpeg 会尝试将输入转换为默认格式通常失败或生成无意义文件主要用于获取流信息。样例查看video.mp4的详细信息。ffmpeg-ivideo.mp4输出解读Duration: 视频总时长。Stream #0:0: 视频流信息编码h264, 分辨率1920x1080, 帧率30 fps。Stream #0:1: 音频流信息编码aac, 采样率44100 Hz。2. 格式转换 (Transcoding)这是最常用的功能将一个格式的文件转换为另一个格式。2.1 视频格式转换解释将输入文件转码为目标格式。FFmpeg 会根据输出文件的后缀名自动选择编码器。样例将.mov转换为.mp4(H.264 编码)。ffmpeg-iinput.mov output.mp42.2 音频格式转换解释提取音频并转换格式例如转为 MP3。样例从视频中提取音频并转为高音质 MP3 (320k)。ffmpeg-ivideo.mp4-vn-b:a320k audio.mp4参数详解-vn: Video None禁用视频记录只保留音频。-b:a: 设置音频比特率 (bitrate)。2.3 无损转换 (Remuxing)解释不重新编码音视频流仅改变容器格式。速度极快瞬间完成画质/音质无损失。样例将.mkv快速封装为.mp4。ffmpeg-iinput.mkv-ccopy output.mp4参数详解-c copy: Copy codec直接复制流数据不进行重编码。3. 视频剪辑与截取 (Trimming Cutting)用于截取视频的某一段。3.1 基于时间点的剪切 (推荐)解释使用-ss(start) 和-t(duration) 或-to(end time)。关键技巧将-ss放在-i之前可以进行快速搜索关键帧剪切速度快但可能不精确放在-i之后进行精确搜索逐帧解码速度慢但精确。样例从第 10 秒开始截取 5 秒长的片段精确模式。ffmpeg-iinput.mp4-ss00:00:10-t00:00:05-ccopy cut_video.mp4注意如果使用-c copy剪切点必须是关键帧否则可能导致播放问题。若需精确到非关键帧去掉-c copy让 FFmpeg 重新编码。3.2 精确剪切并重新编码ffmpeg-iinput.mp4-ss00:00:10.500-t5-c:vlibx264-c:aaac precise_cut.mp4参数解析-ss 00:00:10.500(Start Time)位置关键这里放在-i之后。原理FFmpeg 会先解码输入文件丢弃前 10.5 秒的数据从第 10.500 秒这一帧开始正式处理。这保证了起点的绝对精确。代价因为需要解码前面的所有帧来定位所以处理速度比“快速搜索”-ss在-i前要慢尤其是对于长视频的前段剪切。-t 5(Duration)表示截取时长为 5 秒。也可以使用-to 00:00:15.500指定结束时间点。-c:v libx264(Video Codec)含义强制使用 H.264 编码器进行视频重编码。必要性因为进行了剪切和可能的参数调整必须生成新的视频流数据。如果不指定FFmpeg 可能会尝试沿用原编码但在某些容器或剪切场景下可能失败。-crf 23(Constant Rate Factor)含义控制画质与文件大小的平衡因子。数值范围0-51。0: 无损文件极大。18: 视觉上几乎无损高质量。23:默认值平衡点。28: 画质明显下降文件很小。建议如果原片画质很好建议设为18或20以尽量减少重编码带来的画质损失代际损失。-preset fast含义编码速度预设。选项ultrafast,superfast,veryfast,faster,fast,medium(默认),slow,slower,veryslow.权衡越慢的预设如slow压缩效率越高同画质下文件更小但耗时越长。为了剪辑操作通常选择fast或medium以节省时间。-c:a aac -b:a 128k音频部分同样需要重编码设置为常用的 AAC 格式码率 128kbps。-copy- 简述在之前的基础介绍中提到使用-c copy流复制进行剪切速度极快但有一个致命缺陷它只能在“关键帧”I-frame处切断。什么是关键帧视频压缩中关键帧是包含完整图像信息的帧而普通帧P帧/B帧只记录相对于前一帧的变化。问题所在如果你想在第 10.5 秒切断但该位置最近的关键帧在第 10.0 秒使用-c copy会导致切出来的视频实际上是从 10.0 秒开始的或者在播放时前几帧出现花屏/卡顿。4. 画面处理 (Video Filters)使用-vf(video filter) 参数进行复杂的画面操作。4.1 调整分辨率 (Scale)解释改变视频尺寸。-1表示根据宽高比自动计算。样例将视频宽度调整为 1280高度自动适配。ffmpeg-iinput.mp4-vfscale1280:-1output_720p.mp44.2 裁剪画面 (Crop)解释切除画面边缘。语法crop宽:高:x起始点:y起始点。样例裁剪出中间 640x480 的区域。ffmpeg-iinput.mp4-vfcrop640:480:320:240cropped.mp44.3 添加水印 (Overlay)解释将图片叠加在视频上。样例在视频右下角添加logo.png水印距离边缘 10 像素。ffmpeg-iinput.mp4-ilogo.png-filter_complexoverlayW-w-10:H-h-10watermarked.mp4变量W/H是主视频宽高w/h是水印图片宽高。4.4 旋转视频样例顺时针旋转 90 度。ffmpeg-iinput.mp4-vftranspose1rotated.mp4transpose 值0: 顺时针 90 度 垂直翻转 (少见)1: 顺时针 90 度 (常用)2: 逆时针 90 度3: 逆时针 90 度 垂直翻转 (少见)5. 音频处理 (Audio Filters)使用-af(audio filter) 参数。5.1 调节音量样例将音量提高一倍 (2.0) 或降低一半 (0.5)。ffmpeg-iinput.mp4-afvolume2.0loud_output.mp45.2 淡入淡出 (Fade)样例音频前 3 秒淡入最后 3 秒淡出。ffmpeg-iinput.mp4-afafadetin:st0:d3,afadetout:st10:d3fade_audio.mp4参数st(start time),d(duration)。假设视频总长 13 秒结尾从第 10 秒开始淡出。5.3 提取特定声道样例只保留左声道 (FL) 并复制到双声道。ffmpeg-iinput.mp4-afpanstereo|c0c0|c1c0left_channel_only.mp4PS FL(左), FR(右), FC(中), LFE(低音), BL(左后), BR(右后)6. 高级编码控制 (Encoding Control)控制输出文件的质量和大小。6.1 控制视频质量 (CRF)解释使用恒定速率因子 (Constant Rate Factor)。数值越小质量越高文件越大。范围0 (无损) - 51 (最差)。推荐值18-28 (18 视觉上几乎无损23 是默认值)。样例高质量压缩 (CRF 18)慢速预设以获得更好压缩率。ffmpeg-iinput.mp4-c:vlibx264-crf18-presetslow high_quality.mp4preset 选项ultrafast,fast,medium(默认),slow,veryslow。越慢压缩效率越高。6.2 限制文件大小 (2-Pass Encoding)解释如果必须严格控制文件大小如限制在 50MB需要使用两次编码2-pass。样例目标文件大小 50MB时长 60 秒。计算目标码率( 50 × 8 × 1024 ) / 60 ≈ 6826 (50 \times 8 \times 1024) / 60 \approx 6826(50×8×1024)/60≈6826kbps。减去音频码率 (假设 128k)视频码率约为 6700k。第一遍(生成日志不输出视频):ffmpeg-y-iinput.mp4-c:vlibx264-b:v6700k-pass1-an-fnull /dev/null第二遍(正式编码):ffmpeg-iinput.mp4-c:vlibx264-b:v6700k-pass2-c:aaac-b:a128k output_50mb.mp47. 截图与动图 (Screenshots GIF)7.1 截取单张图片样例在第 5 秒截取一张高清图。ffmpeg-iinput.mp4-ss00:00:05-vframes1screenshot.jpg参数-vframes 1表示只输出 1 帧视频。7.2 制作 GIF解释先建立调色板 (Palette) 以保证颜色准确再生成 GIF。样例将第 2 秒到第 5 秒的视频转为 GIF宽 320 像素。步骤 1: 生成调色板ffmpeg-iinput.mp4-ss2-t3-vffps10,scale320:-1:flagslanczos,palettegenpalette.png步骤 2: 使用调色板生成 GIFffmpeg-iinput.mp4-ipalette.png-ss2-t3-filter_complexfps10,scale320:-1:flagslanczos[x];[x][1:v]paletteuseoutput.gif8. 合并与拼接 (Concatenation)8.1 合并同格式视频 (Demuxer Concat)前提所有视频必须具有相同的编码参数、分辨率、帧率等。步骤创建list.txt文件file part1.mp4 file part2.mp4 file part3.mp4运行命令ffmpeg-fconcat-safe0-ilist.txt-ccopy merged.mp49. 推流与直播 (Streaming)将本地文件或摄像头画面推送到流媒体服务器 (如 YouTube, Twitch, RTMP 服务器)。样例推流到 RTMP 服务器。ffmpeg-re-iinput.mp4-c:vlibx264-presetveryfast-maxrate3000k-bufsize6000k-pix_fmtyuv420p-g60-c:aaac-b:a128k-ar44100-fflv rtmp://server_url/live/stream_key关键参数-re: 按原始帧率读取输入模拟直播防止推流过快。-f flv: 强制输出格式为 FLV (RTMP 常用)。-g 60: 关键帧间隔 (GOP)通常设为帧率的 2 倍 (如 30fps * 2 60)。常用快捷键 (在 FFmpeg 运行过程中)当 FFmpeg 正在终端运行时你可以按下以下键进行交互q: 立即停止并退出。: 增加日志详细程度。-: 减少日志详细程度。c: 打印当前帧的压缩信息。p: 暂停/继续 (部分构建版本支持)。总结建议先试-c copy如果不需要改变编码格式永远优先使用-c copy速度最快且无损。善用-ss位置做快速预览剪辑放-i前做精确剪辑放-i后。画质平衡日常使用-crf 23是质量和体积的最佳平衡点。帮助文档遇到不懂的参数随时使用ffmpeg -h full或ffmpeg -h filtername查看官方详细说明。想法永远是行动的基石请按需求合理搭配
返回列表