自定义 (DIY) 转码

可以选择执行自己的转码,如果部署了可以通过 Web 流式格式生成图像或影片的渲染流程,这种做法很可取。

DIY 转码提示

注意:此页面上的信息仅供参考。不同版本的 FFmpeg 和/或编解码器将产生不同的结果。
Shotgun 转码使用的是 FFmpeg 自定义内部版本,与公开发行版本不对应。

如果决定选择这种方式,请记住下面这些详细信息:

必须禁用自动转码

如果要执行自己的转码,请确保禁用已上传图像和影片的自动转码功能,否则已上传的媒体文件将继续自动转码,并可能覆盖服务器上自己已经转码的影片。只需向我们发送支持工单,我们将为您的站点取消激活转码。

Shotgun 转码器生成 MP4

(当您在设置自己的转码脚本时,我们可以让这些字段显示在 UI 中;仅需向我们发送支持工单申请此功能。)

使用文件类型扩展名为影片命名

最佳做法是使用适当的扩展名 (.mp4) 命名您创建的影片。如果没有这些特定扩展名,一些浏览器可能无法正确检测影片格式,这可能会导致播放错误。

每秒帧数 (FPS) 的默认值为 24

sg_uploaded_movie_frame_rate 字段的默认值为 24,因此对于并非 24 FPS 的媒体,需要设置正确的 sg_uploaded_movie_frame_rate

DIY 转码的代码

这是我们为生成流媒体影片文件而运行的 FFmpeg 代码。变量替换是 ruby 风格的。

  • vcodec = "-vcodec libx264 -pix_fmt yuv420p -vf 'scale=trunc((a*oh)/2)*2:%{height}' -g 30 -vprofile high -bf 0 -crf 23"
    acodec = "-strict experimental -acodec aac -ab 160k -ac 2"
    ffmpeg -i #{src_file} #{acodec} #{vcodec} -f mp4 #{dest_file_mp4}

上面的高度变量是 1080 和源分辨率之间的最小值(因此我们不会放大)。

如果需要强制帧速率,可以将 -r 标志添加到转码调用。因此,要强制 24 FPS,需要使用以下内容:

  • ffmpeg -r 24 -i #{src_file} #{acodec} #{vcodec} -f mp4 #{dest_file_mp4}
    

请注意,此标志保留在列表首位是非常重要的,否则会看到 FFmpeg 在编码过程中丢帧。

  • 对于图像文件,Shotgun 的转码器生成一个由所有受支持浏览器使用的高分辨率(最大为 2K)图像文件(如果原始图像文件包含透明度,则为 PNG,否则为 JPG)。高分辨率图像文件存储在 UI 的隐藏字段中,但可以通过 API 更新它们。字段名称是 sg_uploaded_movie_image。(当您在设置自己的转码脚本时,我们可以让这些字段显示在 UI 中;仅需通过 support@shotgunsoftware.com 向我们发送电子邮件,即可申请此功能。)

这是我们为生成静态图像文件而运行的 ImageMagick 代码。

  • convert #{src_file} -resize #\{2048\}x\{2048\}\\> #{dest_file}

除了生成流式影片格式外,Shotgun 的内置转码器还可以创建缩略图。如果选择执行自己的转码,很有可能想要在可复制此功能的 API 调用中进行构建。有关详细信息,请参见 API 文档中的 upload_thumbnail()upload_filmstrip_thumbnail()

如果要使用 FFmpeg 创建自己的幻灯影片缩略图,可以使用以下代码从一组独立缩略图图像中生成图像:

ffmpeg -threads #{self.threads_to_use} -i #{src_file} -vf select=\"not(mod((n-#{offset})\\,#{frame_increment}))\",setpts=\"N/(#{fps_f}*TB)\",scale=#{frame_width}:-1 -sws_flags lanczos -qscale:v 2 -pix_fmt yuvj420p -f image2 #{thumb_files}-%02d.jpeg"

自动转码

有关 Shotgun 如何为影片和图像自动转码的详细信息,请参见文章“转码”。

关注