この Topic では、スクリプトビデオプロセス中に発生する一般的な質問を紹介します。
<スクリプトビデオ処理ロジック> 関連の質問
グローバルナレーションモードの処理ロジックは何ですか?
入力ビデオが長いビデオクリップの場合、まずセグメントに分割されます。ミキシング中に、分割後のビデオセグメントが合成のために選択されます。分割後の単一ショットの持続時間 = SingleShotDuration
グローバルナレーションスクリプトが提供されている場合、十分なスクリプトがあれば最小限の繰り返しで使用されます。たとえば、3 つのスクリプトが提供されているが 5 つのビデオを生成する必要がある場合、同じスクリプトが 5 つの出力ビデオに表示されますが、3 つのスクリプトすべてが少なくとも 1 回は使用されます。
グループの順序に従い、分割後のビデオセグメントが各グループからランダムに 1 つ選択され、順番に接続されます。グローバルナレーションスクリプトが提供され、合計ビデオ持続時間がナレーションの持続時間よりも短い場合、ビデオの持続時間がナレーションの持続時間と同等になるまで、最初と最後以外のグループからビデオセグメントがランダムに選択されます。
出力ビデオの持続時間ルール:
グローバルナレーションスクリプトが提供されている場合: 出力ビデオの持続時間 = ナレーションスクリプトの持続時間。
グローバルナレーションスクリプトが提供されていない場合:
FixedDuration パラメーターが設定されている場合、出力ビデオの持続時間 = FixedDuration の値。
MaxDuration パラメーターが設定されている場合、出力ビデオの持続時間 = SingleShotDuration × グループ数 (つまり、SpeechTextArray の長さ) ですが、持続時間は MaxDuration の値を超えることはできません。
グループナレーションモードの処理ロジックは何ですか?
「グローバルナレーションモード」と同様に、長いビデオはまずセグメントに分割されます。グローバルナレーションモードと比較して、グループナレーションモードのナレーションスクリプトは MediaGroup 内のグループで設定されます。したがって、SpeechTextArray フィールドが MediaGroup に追加されます。グループナレーションモードを使用する場合、InputConfig.SpeechText または SpeechTextArray を設定する必要はありません。これらを設定するとエラーが発生します。
MediaGroup.SpeechTextArray が空の場合、このメディアグループにはナレーションがないことを意味します。このグループの持続時間は MediaGroup.Duration によって制御され、デフォルトは 5 秒です。
特定の MediaGroup 内のメディアのボリュームを制御したい場合は、MediaGroup.Volume を設定できます。MediaGroup.Volume は EditingConfig.MediaConfig.Volume よりも優先度が高いです。
各グループは複数のナレーションセットをサポートします。すべてのグループが同じ数のナレーションを持つ場合 (ナレーションのないグループを除く)、デフォルトで順番に結合されます。たとえば、すべてのグループが N 番目のナレーションセグメントを使用します。各グループのナレーション数が異なる場合、各グループからランダムなナレーションセグメントが選択され、完全なナレーションにマージされます。
<スクリプトビデオの効果の最適化と改善> 関連の質問
シーンの急な切り替わりや頻繁すぎるシーン変更の問題を解決するにはどうすればよいですか?
DataQ - Smart Tag Service のタスクの インテリジェントショット分析機能 を使用して、素材の AI ベースのショットセグメンテーションを自動的に完了させ、シーンの急な切り替わりや頻繁すぎるシーン変更の問題を解決できます。以下のステップは、単一のビデオ素材に対するインテリジェントショット分析のプロセスのみを説明していることに注意してください。複数のビデオ素材に対してインテリジェントショット分析を実行する必要がある場合は、以下のステップを繰り返してください。
特定のビデオ素材に対して、SubmitSmarttagJob - スマートタグジョブを送信 を呼び出します。このシナリオでは、TemplateId を固定値「S00000103-000003」に設定する必要があることに注意してください。
QuerySmarttagJob - スマートタグジョブクエリ API を呼び出して、ショット分析結果をクエリします。API 応答で type=ClipSplit に対応する data パラメーターを探します。内容の例を以下に示します。StartTime はショットの開始時刻 (秒) を示し、EndTime はショットの終了時刻 (秒) を示します。
[ { "EndTime": 5.4, "ClipType": "opening", "StartTime": 0.0 }, { "EndTime": 9.16, "ClipType": "opening", "StartTime": 5.4 }, { "EndTime": 12.88, "ClipType": "opening", "StartTime": 9.16 }, { "EndTime": 16.0, "ClipType": "opening", "StartTime": 12.88 } ]ステップ 2 のショット情報をスクリプトビデオの素材にマッピングし、EditingConfig.MediaConfig.MediaMetaDataArray.TimeRangeList パラメーターに渡します。例:
{ "MediaConfig": { "MediaMetaDataArray": [ { "Media": "https://******.****.****/public-template/video/movie_apsara_4.mp4", "GroupName": "opening", "TimeRangeList": [ { "In": 0, "Out": 5.4 }, { "In": 5.4, "Out": 9.16 }, { "In": 9.16, "Out": 12.88 }, { "In": 12.88, "Out": 16.0 } ] } ] } }対応する MediaGroup の MediaGroup.SplitMode パラメーターを「NoSplit」に設定します。これにより、入力セグメントの二次的な分割が防止され、シーンの完全性が確保されるだけでなく、シーンの急な切り替わりや頻繁すぎるシーン変更も効果的に回避されます。
シーンの切り替わりが速すぎたり遅すぎたりする問題の解決方法、およびショットの持続時間を設定する方法は?
ImageDuration を使用して、出力ビデオ内のイメージの表示時間を制御します。
SingleShotDuration パラメーターを設定して、ビデオ素材のセグメンテーション後のショットの持続時間を制御します。
出力ビデオにおけるイメージ素材の表示時間を計算する方法は?
イメージとビデオの両方の素材を含むグループでは、イメージが選択される一定の確率があり、その場合、イメージは出力ビデオ全体を塗りつぶします。したがって、次のメソッドを使用してイメージの表示時間を制御できます:
ImageDuration が設定されている場合、出力ビデオ内のイメージの表示時間はこの値に基づきます。
ナレーションがある場合、イメージの持続時間 = ナレーション TTS の持続時間 / MediaGroupArray の長さ。
FixedDuration が設定されているがナレーションが提供されていない場合、イメージの持続時間 = FixedDuration / MediaGroupArray の長さ。
どのようにして ビデオ素材が出力ビデオで完全に再生されるようにしますか?
グループ内で、ビデオ素材を出力ビデオで完全に再生したい場合は、MediaGroup.SplitMode を NoSplit に設定し、MediaGroup.Duration を素材と同じ持続時間に設定することをお勧めします。たとえば、素材が 20 秒の長さで、完全に再生したい場合は、MediaGroup.SplitMode を NoSplit に設定し、MediaGroup.Duration を 20 秒に設定します。
ただし、「グループから選択された素材の持続時間」が「MediaGroup.Duration」よりも短い場合、ランダムに選択された素材は MediaGroup.Duration に基づいてスケーリングされることに注意してください。たとえば、MediaGroup.Duration = 10 秒で、グループから 20 秒のビデオがランダムに選択された場合、ビデオは 2 倍速 (20/10) で再生されます。
元の音声ビデオセグメントとナレーションを交互に再生する具体的な方法は何ですか?
一部のセグメントでビデオの元の音声を再生し、他のセグメントをミュートしてナレーションを追加したい場合は、MediaGroup.Volume を通じてグループ内の素材のボリュームを制御できます。通常、元のボリュームを維持するには、値を 1 に設定します。
たとえば、MediaGroup1、MediaGroup2、MediaGroup3 の 3 つのグループがあるとします。MediaGroup1 には通常のナレーションを付け、MediaGroup2 にはナレーションなしで元の音声ビデオを再生し、MediaGroup3 には通常のナレーションを付けたい場合は、MediaGroupArray を次のように設定できます:
[{
"GroupName": "MediaGroup1",
"MediaArray": ["https://ice-*****-test.oss-cn-*****.aliyuncs.com/0-test-batch-editing-materials/160134%2B9859695-2032aa5c-2803-47cd-bf65-8a40d66598db.png", "https://ice-auto-test.oss-cn-shanghai.aliyuncs.com/0-test-batch-editing-materials/cloud.mp4"],
"SpeechTextArray": ["近くのモールに新しい Hema Fresh ストアがオープンしました。今日が営業初日です", "今日がこの Hema Fresh ストアの営業初日です", "<speak>戦いは <phoneme alphabet=\"py\" ph=\"zheng4 hao3\">激しさを増しています</phoneme>。今日、私たちの主人公である卓球界のレジェンド、馬龍は栄光の頂点に向かって突き進んでいます。準々決勝で強敵の上園駿輔と対戦した馬龍は、恐れることなく、すべてのラリーで全力を尽くします。彼の正確なボール配置と冷静な判断力が、この試合で彼に優位をもたらします。最終的に、馬龍は対戦相手を打ち破り、準決勝に進出しました。</speak>"]
},
{
"GroupName": "MediaGroup2",
"MediaArray": ["https://ice-*****-test.oss-cn-*****.aliyuncs.com/0-test-batch-editing-materials/normal%20video.mp4", "https://ice-auto-test.oss-cn-shanghai.aliyuncs.com/0-test-batch-editing-materials/3.jpeg"],
"Duration": 5,
"SplitMode": "NoSplit",
"Volume": 1
},
{
"GroupName": "MediaGroup3",
"MediaArray": ["https://ice-*****-test.oss-cn-*****.aliyuncs.com/0-test-batch-editing-materials/young_sunset_walk.mp4"],
"SpeechTextArray": ["見に来てください", "今すぐ見に来てください"]
}]