编码功能
本节介绍 mpv 的视频转码和编码功能。
基本编码
输出到文件
bash
# 编码到文件
mpv input.mp4 --o=output.mp4
# 指定编码器
mpv input.mp4 --o=output.mp4 --ovc=libx264编码选项
bash
# 视频编码器
--ovc=libx264
--ovc=libx265
--ovc=libvpx-vp9
# 音频编码器
--oac=libmp3lame
--oac=aac
--oac=libopus
# 输出格式
--of=mp4
--of=mkv
--of=webm视频编码
H.264 编码
bash
# H.264 编码
mpv input.mp4 --o=output.mp4 --ovc=libx264 --ovcopts=preset=medium,crf=23
# 预设选项
--ovcopts=preset=ultrafast
--ovcopts=preset=superfast
--ovcopts=preset=veryfast
--ovcopts=preset=faster
--ovcopts=preset=fast
--ovcopts=preset=medium
--ovcopts=preset=slow
--ovcopts=preset=slower
--ovcopts=preset=veryslow
# CRF 值 (质量)
--ovcopts=crf=18 # 高质量
--ovcopts=crf=23 # 默认
--ovcopts=crf=28 # 低质量H.265 编码
bash
# H.265 编码
mpv input.mp4 --o=output.mp4 --ovc=libx265 --ovcopts=preset=medium,crf=28
# H.265 选项
--ovcopts=preset=medium
--ovcopts=crf=28
--ovcopts=x265-params=log-level=errorVP9 编码
bash
# VP9 编码
mpv input.mp4 --o=output.webm --ovc=libvpx-vp9 --ovcopts=crf=31,b=0
# VP9 选项
--ovcopts=crf=31
--ovcopts=b=0
--ovcopts=threads=4AV1 编码
bash
# AV1 编码
mpv input.mp4 --o=output.mp4 --ovc=libsvtav1 --ovcopts=crf=30
# AV1 选项
--ovcopts=crf=30
--ovcopts=preset=6音频编码
MP3 编码
bash
# MP3 编码
mpv input.mp4 --o=output.mp3 --oac=libmp3lame --oacopts=b=192k
# MP3 选项
--oacopts=b=128k
--oacopts=b=192k
--oacopts=b=320kAAC 编码
bash
# AAC 编码
mpv input.mp4 --o=output.mp4 --oac=aac --oacopts=b=192k
# AAC 选项
--oacopts=b=128k
--oacopts=b=192k
--oacopts=b=256kOpus 编码
bash
# Opus 编码
mpv input.mp4 --o=output.opus --oac=libopus --oacopts=b=128k
# Opus 选项
--oacopts=b=64k
--oacopts=b=128k
--oacopts=b=192k编码滤镜
视频滤镜
bash
# 缩放
mpv input.mp4 --o=output.mp4 --vf=lavfi=[scale=1280:720]
# 裁剪
mpv input.mp4 --o=output.mp4 --vf=lavfi=[crop=1280:720:0:0]
# 去噪
mpv input.mp4 --o=output.mp4 --vf=lavfi=[hqdn3d]
# 锐化
mpv input.mp4 --o=output.mp4 --vf=lavfi=[unsharp]音频滤镜
bash
# 音量调整
mpv input.mp4 --o=output.mp4 --af=lavfi=[volume=0.5]
# 均衡器
mpv input.mp4 --o=output.mp4 --af=lavfi=[equalizer=f=1000:width_type=h:width=200:g=-10]
# 压缩器
mpv input.mp4 --o=output.mp4 --af=lavfi=[acompressor]编码预设
预设配置
bash
# 高质量编码
profile=high-quality
ovc=libx264
ovcopts=preset=slow,crf=18
# 快速编码
profile=fast
ovc=libx264
ovcopts=preset=fast,crf=23
# 低文件大小
profile=small-file
ovc=libx265
ovcopts=preset=slow,crf=28自定义预设
bash
# 创建预设文件
# ~/.config/mpv/encoding.conf
[high-quality]
ovc=libx264
ovcopts=preset=slow,crf=18
oac=aac
oacopts=b=192k
[fast]
ovc=libx264
ovcopts=preset=fast,crf=23
oac=aac
oacopts=b=128k编码脚本
Lua 脚本示例
lua
-- 批量编码脚本
local mp = require 'mp'
local function encode_file(input, output, profile)
mp.command(string.format(
'mpv "%s" --o="%s" --profile="%s"',
input, output, profile
))
end
-- 编码当前文件
mp.add_key_binding('ctrl+e', 'encode-current', function()
local input = mp.get_property('path')
local output = input:gsub('%..+$', '_encoded.mp4')
encode_file(input, output, 'high-quality')
mp.osd_message('编码完成: ' .. output)
end)JavaScript 脚本示例
javascript
// 批量编码脚本
mp.add_key_binding('ctrl+e', 'encode-current', function() {
const input = mp.get_property('path');
const output = input.replace(/\.[^.]+$/, '_encoded.mp4');
// 注意:JavaScript 中无法直接执行命令
mp.osd_message('编码功能需要 Lua 脚本');
});编码调试
编码信息
bash
# 显示编码信息
mpv --msg-level=all=v input.mp4 --o=output.mp4
# 显示编码统计
mpv --stats input.mp4 --o=output.mp4编码测试
bash
# 测试编码
mpv --start=0 --end=10 input.mp4 --o=test.mp4
# 测试编码质量
mpv --start=0 --end=10 input.mp4 --o=test.mp4 --ovcopts=preset=slow,crf=18编码故障排除
常见问题
编码失败
- 检查编码器是否可用:
mpv --ovc=help - 检查输出格式:
mpv --of=help
- 检查编码器是否可用:
编码速度慢
- 使用快速预设:
--ovcopts=preset=fast - 减少线程数:
--ovcopts=threads=4
- 使用快速预设:
编码质量差
- 降低 CRF 值:
--ovcopts=crf=18 - 使用慢速预设:
--ovcopts=preset=slow
- 降低 CRF 值:
调试命令
bash
# 显示编码信息
mpv --msg-level=all=v input.mp4 --o=output.mp4
# 显示编码统计
mpv --stats input.mp4 --o=output.mp4