如何使用FFmpeg对视频转码使其更易于CDN加速

在Jellyfin或其他相关媒体库中,若影片源文件的字幕及音频有多条轨道,在播放时,服务器会更倾向实时转码,即将字幕与音频轨道烧录进视频文件,再发送给客户端进行播放,在多人使用时,服务器将难以承受多条客户端的转码请求,出现卡顿等现象,且服务器上传带宽不充足的情况下,同样不支持多人使用。

因此,需要使用FFmpeg工具对视频文件提前进行转码,使其在客户端播放时,使用“直接播放”方式,缓解服务器计算压力。再用CDN内容分发网络对站点进行加速,使转码后的视频文件在CDN服务商的各个节点中分布缓存,用户播放时,将从CDN节点中获取资源,缓解服务器带宽压力。

以下是我常用的FFmpeg转码命令,兼顾视频质量与兼容性。

ffmpeg \
-i "文件名" \  
# 输入文件

-filter_complex \  
# 使用复杂滤镜
"[0:s:0]scale=iw*0.8:-1[sub]; \  
# 取第1个输入的第1条字幕流,若是第二条字幕,则是[0:s:1],宽度缩放到80%,可在测试后自行调整,高度按比例自动计算,结果命名为[sub]
[0:v][sub]overlay=x='(W-w)/2':y='H-h':shortest=1[outv]" \  
# 将[sub]叠加到视频[0:v]上,水平居中,垂直贴底,任一输入结束则停止,输出命名为[outv]

-map "[outv]" \  
# 输出滤镜处理后的视频
-map 0:a:0 \  
# 输出第1个输入中的第1条音频流,格式要求与字幕相同

-c:v libx264 \  
# 视频编码器使用 H.264/x264
-crf 20 \  
# 视频质量参数,数值越小质量越高、体积越大,(18-28)
-preset medium \  
# 编码速度与压缩率平衡预设(ultrafast superfast veryfast faster fast medium slow slower veryslow)
-threads 0 \  
# 自动使用合适的线程数

-c:a aac \  
# 音频转码为 AAC

-map_metadata 0 \  
# 复制输入文件的元数据到输出文件
-map_chapters 0 \  
# 复制章节信息

-t 60 \  
# 只输出前 60 秒,可预先测试字幕选择是否正确及大小是否合适,最终转码时删除此行即可

"输出文件"  
# 输出文件名,不可与原文件名相同,文件后缀建议与源文件相同

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇