トランスコーディングを独自に行うことができます。これは、イメージやムービーが Web ストリーミングが可能なフォーマットで生成されるレンダリング プロセスが既にある場合に適している可能性があります。
DIY トランスコーディングのヒント
ここでは、DIY のトランスコーディングを行うことに決めた場合に、留意する必要があるいくつかの詳細について説明します。
自動トランスコーディングは無効にする必要がある
独自のトランスコーディングを行っている場合は、アップロードされたイメージやムービーに対する自動トランスコーディングを確実に無効にしてください。無効にしないと、アップロードされたメディア ファイルのトランスコーディングが自動的に継続されて、サーバ上の独自のトランスコーディング済みムービーが上書きされる可能性があります。サポート チケットを送信して、サイトのトランスコーディングを無効化するようにリクエストしてください。
Shotgun のトランスコーダで MP4 を生成する
(トランスコーディング スクリプトのセットアップ中に UI にこれらのフィールドが表示されるようにできます。サポート チケットを送信してリクエストしてください。)
ムービーの名前にこれらのファイル タイプの拡張子を付ける
ベスト プラクティスは、作成したムービーには適切な拡張子(.mp4)と共に名前を付けることです。一部のブラウザでは、これらの特定の拡張子がないとムービー フォーマットが正しく検出されない場合があり、これによって再生エラーが発生することがあります。
1 秒あたりのフレーム数(FPS)の既定値は 24
フィールド sg_uploaded_movie_frame_rate
の既定値は 24 です。このため、24 FPS ではないメディアでは、適切な sg_uploaded_movie_frame_rate
の設定が必要です。
DIY のトランスコーディング コード
これは、ストリーミング可能なムービー ファイルを生成するために実行する FFFmpeg コードです。変数置換は 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 のトランスコーダにより、1 つの高解像度の(最大 2 K)イメージ ファイルが生成されます(元のイメージに透過性が含まれる場合は PNG で、それ以外の場合は JPG)。このファイルは、サポートされるすべてのブラウザで使用されます。高解像度のイメージファイルは、UI の非表示フィールドに格納されていますが、API を使用してそれらを更新することができます。フィールド名は sg_uploaded_movie_image です。(トランスコーディング スクリプトのセットアップ中に UI にこれらのフィールドが表示されるようにできます。support@shotgunsoftware.com 宛てに電子メールを送信してリクエストしてください。)
次に、静止イメージ ファイルを生成するために実行する ImageMagick コードを示します。
-
convert #{src_file} -resize #\{2048\}x\{2048\}\\> #{dest_file}
Shotgun のビルトイン トランスコーダは、ストリーミング可能なムービー フォーマットを生成するだけでなく、サムネイルも作成します。独自のトランスコーディングを行う場合は、この機能を複製する API 呼び出しの作成が必要になります。詳細については、upload_thumbnail() と upload_filmstrip_thumbnail() の API のドキュメントを参照してください。
FFmpeg を使用して独自の Filmstrip サムネイルを作成する場合に、個別のサムネイル イメージのセットからイメージを生成するために使用するコードを次に示します。
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 でムービーやイメージが自動的にトランスコーディングされる方法に関する詳細は、記事「Transcoding」を参照してください。