FFMPEG命令行典型案例

这是以下内容主要是通过与豆包AI交流生成,生成的命令并未经过验证,是否有效并不确定,仅作为使用时的参考。

此文作为个人在编码转换时的参考,同时送给需要的朋友们。欢迎朋友们留言,指出使用文中的错误之处,发现的问题会随时进行更正。

FFMPEG版本:ffmpeg version 8.0-full_build-www.gyan.dev

一、H264 转 HEVC 无损(软编码)

1、命令行

基础版:仅转换视频流为HEVC无损,复用原音频/字幕

复制代码
ffmpeg -i input.mp4 -c:v libx265 -x265-params lossless=1 -c:a copy -c:s copy output_hevc.mp4

进阶版:强制保持原分辨率/帧率,避免自动缩放

复制代码
ffmpeg -i input.mp4 -c:v libx265 -x265-params lossless=1 -s:v copy -r copy -c:a copy -c:s copy output_hevc.mp4

兼容版:如果基础版报错,使用更明确的参数

复制代码
ffmpeg -i input.mp4 -c:v libx265 -preset ultrafast -x265-params lossless=1 -c:a copy -c:s copy output_hevc.mkv

2、参数详细解释

作用
-i input.mp4 指定输入文件
-c:v libx265 视频编码器使用 libx265(HEVC)
-x265-params lossless=1 开启 x265 的无损编码模式(核心参数)
-preset ultrafast 编码速度预设(无损模式下速度影响小,可选)
-c:a copy 音频流直接复制(不重新编码)
-c:s copy 字幕流直接复制(不重新编码)
-s:v copy 强制复制原视频分辨率
-r copy 强制复制原视频帧率
output_hevc.mp4 输出文件(推荐用.mkv 容器,兼容性更好)

3、注意事项

前置条件: 你的 FFmpeg 必须编译了 libx265 编码器,可通过 ffmpeg -encoders | grep libx265 验证。

文件体积: HEVC 无损编码的文件体积通常比 H.264 无损更小,但仍远大于有损压缩的文件。

容器选择: MP4:兼容性好,但部分设备可能不支持 HEVC + MP4

MKV:对 HEVC 支持更完善,推荐使用

**验证无损:**转换完成后,可通过 ffmpeg -v error -i output_hevc.mkv -f null - 检查是否有编码错误。

4、总结

核心参数是 -x265-params lossless=1,必须指定才能实现 HEVC 无损编码。

转换时建议使用 -c:a copy -c:s copy 避免音频 / 字幕重新编码,保证完整无损。

优先选择 MKV 容器,兼容性优于 MP4,且能更好地支持 HEVC 无损流。

二、H264 转 HEVC 无损(NVIDIA硬编码)

1、核心思路

NVIDIA 的 NVENC HEVC 硬编码器(h265_nvenc)实现 "无损" 和软编逻辑不同,核心是:

(1)使用 NVIDIA 硬编编码器 hevc_nvenc 替代软编的 libx265

(2)通过 cq=0(恒定质量为 0,NVENC 无损核心参数)实现视觉无损 / 近无损;

(3)保留原视频参数(分辨率、帧率),音频 / 字幕直接复制;

(4)需确保显卡支持 NVENC HEVC 编码(Kepler 架构及以上,如 GTX 10 系、RTX 20/30/40 系、TITAN 等)。

2、完整的 NV 硬编无损转换命令

基础版(通用)

复制代码
ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i input.mp4 \
-c:v hevc_nvenc -cq 0 -preset p7 -rc vbr_hq \
-s:v copy -r copy -c:a copy -c:s copy \
output_hevc_nvenc.mp4

进阶版(极致无损 + 兼容)

复制代码
# 强制使用GPU解码+编码,避免CPU介入,速度更快
ffmpeg -hwaccel cuda -hwaccel_device 0 -hwaccel_output_format cuda -i input.mp4 \
-c:v hevc_nvenc -cq 0 -preset p7 -rc vbr -profile:v main10 \
-s:v copy -r copy -c:a copy -c:s copy \
output_hevc_nvenc.mkv

简化版(新手友好)

复制代码
ffmpeg -i input.mp4 -c:v hevc_nvenc -cq 0 -c:a copy -c:s copy output_hevc_nvenc.mp4

3、关键参数解释

参数 作用
-hwaccel cuda 启用 CUDA 硬件加速解码(减少 CPU 占用,提升速度)
-hwaccel_device 0 指定使用第 0 块 NVIDIA 显卡(多显卡时用,如 1、2)
-hwaccel_output_format cuda 解码后的帧直接留在 GPU 显存,避免 CPU/GPU 数据拷贝
-c:v hevc_nvenc 视频编码器使用 NVIDIA NVENC HEVC 硬编
-cq 0 核心无损参数:NVENC 的恒定质量模式,0 为最高质量(视觉无损),数值越大压缩率越高、画质越低
-preset p7 编码预设(p1 最慢质量最好,p7 最快),无损模式下 p7 速度最优,画质无差异
-rc vbr 码率控制模式(高质量可变码率),配合 cq=0 实现无损
-profile:v main10 启用 10 位编码(部分显卡支持),提升色彩精度,更接近 "真无损"
-s:v copy/-r copy 强制复制原分辨率 / 帧率,避免自动调整
-c:a copy/-c:s copy 音频 / 字幕直接复制,不重新编码

4、前置条件与验证

(1)检查 FFmpeg 是否支持 NVENC :运行以下命令,若输出包含 hevc_nvenc 则支持:

复制代码
ffmpeg -encoders | grep nvenc

(2)检查显卡兼容性 :NVIDIA 官网查询显卡是否支持 NVENC HEVC,或运行 nvidia-smi 查看显卡型号;

(3)驱动要求:需安装最新的 NVIDIA 显卡驱动(建议 520.x 以上版本)。

5、注意事项

(1)NVENC 的 "无损" 特性 :NVENC 没有像 libx265 那样的 lossless=1 纯无损参数,cq=0视觉无损(人眼无法分辨差异),而非比特级无损,这是硬编的技术限制;

(2)速度 vs 体积 :硬编速度比软编快 5-10 倍,但 cq=0 生成的文件体积比软编无损略大;

(3)容器选择:优先用 MKV(对 HEVC 硬编流兼容性更好),MP4 也可但部分设备可能不兼容;

(4)常见报错解决:

  • 报错 No NVENC capable devices found:显卡不支持 NVENC,或驱动未安装;

  • 报错 hwaccel cuda not found:FFmpeg 未编译 CUDA 支持,需重新编译或下载带 CUDA 的 FFmpeg 版本(如 B 站编译版、NVIDIA 官方版)。

6、总结

(1)NVIDIA 硬编无损的核心参数是 -c:v hevc_nvenc -cq 0cq=0 替代软编的 lossless=1

(2)加上 -hwaccel cuda 可启用硬件解码,进一步提升整体转换速度;

(3)NVENC 的 "无损" 是视觉无损,而非比特级无损,这是硬编的技术特性,无法完全等同于软编纯无损。

三、RMVB 转 H264(1280*720)(软编码)

要将 1280×720(720P)RMVB 转换为 H.264 编码并实现画质与体积的最优平衡 ,核心思路是用 libx264 编码器的 CRF 恒定质量模式(智能控质)+ 合理的预设与音频参数

1、核心转换命令

推荐平衡版(画质接近原片 + 体积可控)

复制代码
ffmpeg -i input.rmvb \
-c:v libx264 -crf 23 -preset slow \
-s 1280:720 -r copy \
-c:a aac -b:a 128k -ac 2 \
-vf "format=yuv420p" -movflags +faststart \
output_720p_h264.mp4

极致画质版(肉眼无损,体积稍大)

适合对画质要求高的场景,CRF 值降低,预设更慢以提升压缩效率:

复制代码
ffmpeg -i input.rmvb \
-c:v libx264 -crf 18 -preset veryslow \
-s 1280:720 -r copy \
-c:a aac -b:a 160k -ac 2 \
-vf "format=yuv420p" -movflags +faststart \
output_720p_lossless.mp4

极致压缩版(体积最小,画质可接受)

适合存储紧张的场景,轻微牺牲画质:

复制代码
ffmpeg -i input.rmvb \
-c:v libx264 -crf 28 -preset slow \
-s 1280:720 -r copy \
-c:a aac -b:a 96k -ac 2 \
-vf "format=yuv420p" -movflags +faststart \
output_720p_small.mp4

2、关键参数详解

参数 作用 720P 适配说明
-c:v libx264 指定 H.264 软编编码器 画质 / 体积平衡最优,优于硬编
-crf 23 核心控质参数,值越小画质越好 720P 推荐 20-25,18 = 无损观感,28 = 轻度压缩
-preset slow 编码速度预设,越慢压缩率越高 推荐 slow/veryslow,720P 转码耗时可控
-s 1280:720 强制输出 720P 分辨率 避免 FFmpeg 自动缩放导致画质损失
-r copy 复制原视频帧率 防止帧率改变引发的画面卡顿 / 快放
-c:a aac -b:a 128k 音频转 AAC 编码,码率 128k 720P 视频的音频 128k 立体声足够,比 RMVB 原音频更省体积
-vf format=yuv420p 强制色彩格式 兼容所有播放器(手机 / 电视 / 电脑)
-movflags +faststart 优化 MP4 文件结构 支持边下载边播放,适合流媒体分享

3、调优注意事项

(1)编码器验证 :确保 FFmpeg 编译了 libx264,执行 ffmpeg -encoders | grep libx264 验证。

(2)CRF 微调技巧 :若默认 CRF 23 体积仍大,可每次 +1 逐步测试,直到画质可接受;若画质模糊,每次 -1 提升。

(3)容器选择 :优先用 MP4(兼容性最好),若需保留多字幕 / 音轨,可换 MKV 容器(将输出后缀改为 .mkv)。

四、RMVB 转 H264(1280*720)(NVIDIA硬编码)

1、核心思路

NVIDIA NVENC H.264 硬编(h264_nvenc)兼顾速度和画质的关键策略:

(1)用 h264_nvenc 替代软编的 libx264,启用 CUDA 硬件加速解码 + 编码,减少 CPU 占用;

(2)通过 cq(恒定质量)参数控质(核心):720P 场景下cq=18-23是画质 / 体积的黄金区间,数值越小画质越好;

(3)匹配原视频分辨率(1280×720)、帧率,避免缩放损失;

(4)音频转高效 AAC 编码,进一步压缩体积;

(5)需确保显卡支持 NVENC H.264(Kepler 架构及以上,如 GTX 10 系 / RTX 20-40 系 / NVIDIA 显卡)。

2、完整的 NV 硬编转换命令

推荐平衡版(速度 + 画质 + 体积最优)

复制代码
ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i input.rmvb \
-c:v h264_nvenc -cq 20 -preset p6 -rc vbr \
-s 1280:720 -r copy \
-c:a aac -b:a 128k -ac 2 \
-vf "format=yuv420p" -movflags +faststart \
output_720p_h264_nvenc.mp4

极致画质版(视觉无损,体积稍大)

复制代码
ffmpeg -hwaccel cuda -hwaccel_device 0 -hwaccel_output_format cuda -i input.rmvb \
-c:v h264_nvenc -cq 18 -preset p7 -rc vbr -profile:v high \
-s 1280:720 -r copy \
-c:a aac -b:a 160k -ac 2 \
-vf "format=yuv420p" -movflags +faststart \
output_720p_high_nvenc.mp4

极致压缩版(体积最小,画质可接受)

复制代码
ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i input.rmvb \
-c:v h264_nvenc -cq 25 -preset p5 -rc vbr \
-s 1280:720 -r copy \
-c:a aac -b:a 96k -ac 2 \
-vf "format=yuv420p" -movflags +faststart \
output_720p_small_nvenc.mp4

3、关键参数详解(NV 硬编专属)

参数 作用 720P 适配说明
-hwaccel cuda 启用 CUDA 硬件加速解码 解码环节也用 GPU,整体速度提升 5-10 倍
-hwaccel_output_format cuda 解码帧留在 GPU 显存 避免 CPU/GPU 数据拷贝,进一步提速
-c:v h264_nvenc 指定 NVENC H.264 硬编码器 核心硬编参数,替代软编 libx264
-cq 20 硬编核心控质参数(恒定质量) 720P 推荐 18-23:18 = 视觉无损,20 = 平衡,25 = 轻度压缩
-preset p6 硬编速度预设(p1 最慢画质最好,p7 最快) 720P 推荐 p5/p6:速度快,压缩比足够
-rc vbr 码率控制模式 vbr= 高质量可变码率,配合 cq 更省体积
-profile:v high 启用 H.264 High Profile 提升压缩效率,720P 兼容性无压力

4、前置条件与注意事项

(1)验证 NVENC 支持 :运行 ffmpeg -encoders | grep nvenc,输出包含 h264_nvenc 则支持;运行 nvidia-smi 确认显卡驱动正常(建议 520.x 以上版本)。

(2)硬编 vs 软编差异

  • 速度:硬编比软编快 3-10 倍(720P 视频转码仅需数分钟);
  • 画质:同 cq 值下,硬编画质略逊于软编,但肉眼几乎无差异;
  • 体积:硬编体积比软编略大(约 5-10%),但速度优势远大于体积差异。

(3)常见报错解决:

  • No NVENC capable devices found:显卡不支持 NVENC,或驱动未安装;
  • hwaccel cuda not found:FFmpeg 未编译 CUDA 支持,需下载带 CUDA 的版本(如 B 站编译版、NVIDIA 官方版)。

5、总结

(1)NV 硬编核心控质参数是 -cq(720P 推荐 20),替代软编的-crf-rc vbr_hq 可优化体积;

(2)加上 -hwaccel cuda 启用硬件解码,是提升 720P RMVB 转码速度的关键;

(3)硬编画质略逊于软编,但速度提升显著,720P 场景下cq=20可兼顾画质和体积。

相关推荐
冷冷的菜哥2 小时前
go(golang)调用ffmpeg对视频进行截图、截取、增加水印
后端·golang·ffmpeg·go·音视频·水印截取截图
小尧嵌入式1 天前
【基础学习七十】ffmpeg命令
c++·stm32·嵌入式硬件·ffmpeg
烧饼Fighting1 天前
统信UOS操作系统离线安装ffmpeg
开发语言·javascript·ffmpeg
源文雨1 天前
批量递归转换 mp4 为 flac/m4a 的 bash 脚本
开发语言·ffmpeg·bash·转码·mp4·m4a·flac
myjie05272 天前
使用ffmpeg访问FileProvider 提供出去的content uri 问题
ffmpeg
小希smallxi2 天前
Java 程序调用 FFmpeg 教程
java·python·ffmpeg
小希smallxi2 天前
FFmpeg: 免费、开源、跨平台的多媒体处理工具集
ffmpeg·开源
智算菩萨2 天前
FFMpeg全解析:从“万能媒体转换器”到工程化音视频管线的底层逻辑
ffmpeg·音视频·媒体
weixin_462446233 天前
Python + FFmpeg 批量提取视频音频(支持 Windows / macOS / Linux)
python·ffmpeg·音视频