静止画・ボーカル曲・歌詞からFFmpeg等で動画作成

5か月かけてDTMで声楽曲(ボーカル曲)の処女作「異世界へ行きたい feat. 重音テト」を完成させたので、動画にしてYouTubeニコニコ動画及びOneDriveへアップロードしようと思う。それには動画は静止画、字幕(歌詞)及び音声(ボーカル曲)で構成するとして、以下のものを揃えた。

  • 静止画は、Adobe FireflyというAIのウェブサービス(無償プランでも商用利用可)で生成
  • 字幕用のフォントはパブリックライセンスのものが望ましく、このためRocknRoll Oneという和文フォントをダウンロードし、Windows機へインストール

下準備した各ファイルを確認。なお、音声ファイルを2種類用意した理由は後述。

  • ボーカル曲の音声ファイルは、AudacityからマスタリングしたWAV形式ファイル(サンプリングレートは48000Hz、ビット深度は32ビット浮動小数点、ファイル名は異世界へ行きたい.wav)及びFLAC形式ファイル(サンプリングレートは48000Hz、ビット深度は24ビット、ファイル名は異世界へ行きたい.flac)を出力したもの
  • 動画は720pにしたいので、Adobe Fireflyで生成した静止画を1280x720の大きさのBMP形式ファイル(ファイル名は異世界へ行きたい.bmp)に加工
  • 歌詞はテキストエディターで以下のとおりSRT形式ファイルの字幕ファイル(ファイル名は異世界へ行きたい.srt)をUTF-8形式で作成
1
00:00:00,000 --> 00:00:15,000
異世界へ行きたい

2
00:00:15,000 --> 00:00:22,000
(前奏)

3
00:00:22,000 --> 00:00:25,500
新人向きの敵

【以下略】

これはOneDriveのエクセルで作成し、テキストエディターへコピペすると簡単。では動画作成を開始。コマンドプロンプトから以下のとおりSRT形式ファイルからASS形式ファイルを作成。こちらの形式だとテキストファイル内にフォント等を設定できるので便利。

ffmpeg -i 異世界へ行きたい.srt 異世界へ行きたい.ass

テキストエディターで、出力されたASS形式ファイルを以下のとおり書き換えて表示フォントをRocknRoll Oneの24ピクセルに指定(下線部が書換箇所)。表示フォントを除く設定は書き換えなかった。

[Script Info]
; Script generated by FFmpeg/Lavc60.36.100
ScriptType: v4.00+
PlayResX: 384
PlayResY: 288
ScaledBorderAndShadow: yes
YCbCr Matrix: None

[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,RocknRoll One,24,&Hffffff,&Hffffff,&H0,&H0,0,0,0,0,100,100,0,0,1,1,0,2,10,10,10,1

[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:00.00,0:00:15.00,Default,,0,0,0,,異世界へ行きたい
Dialogue: 0,0:00:15.00,0:00:22.00,Default,,0,0,0,,(前奏)
Dialogue: 0,0:00:22.00,0:00:25.50,Default,,0,0,0,,新人向きの敵

【以下略】

以下のとおりコンテナはMP4形式、動画コーデックはH.264形式、音声コーデックはFLAC形式(エンコード済)でエンコード。もちろん同時に動画へASS形式ファイルを埋め込む。

ffmpeg -loop 1 -i 異世界へ行きたい.bmp -i 異世界へ行きたい.flac -movflags +faststart -c:v libx264 -profile:v high -level:v 4.0 -b_strategy 2 -bf 2 -flags cgop -coder ac -pix_fmt yuv420p -crf 23 -maxrate 5M -bufsize 10M -vf ass=異世界へ行きたい.ass -c:a copy -shortest -strict -2 異世界へ行きたい.mp4

うーん、OneDriveへ出力された動画をアップロードし、共有URLを発行して様々なウェブブラウザー環境で再生してみたけど、一部の環境で動画だけ再生され、音声が再生されない。どうやらMP4コンテナがFLACコーデックを格納できる規格は比較的新しいため、その規格に対応していない環境ではダメっぽい。やむを得ず作成したMP4形式ファイルから以下のとおり動画だけ抜き出す。なお、便宜上MP4コンテナのM4V形式ファイルで出力しているが、規格上は正しくないっぽい。

ffmpeg -i 異世界へ行きたい.mp4 -c:v copy -an -f mp4 異世界へ行きたい.m4v
del 異世界へ行きたい.mp4

FLAC形式がダメなら、以下のとおりWAV形式ファイルから伝統的なAAC形式ファイル(M4A形式ファイル)を作成。こんなこともあろうかとWAV形式ファイルを準備しておいた。このエンコードにはプロプライエタリだがこれまた伝統的なNero AAC Codec(neroAacEnc)を使用。ちなみに理由は、インストールしてあるFFmpegとAudacityのFFmpegがFraunhofer FDK AAClibfdk_aac)やFAAClibfaac)といったエンコーダーを内蔵しておらず、twoloop(TLS)だとしてもしょっぱいネイティブAACエンコーダーしか利用できなかったから。

neroAacEnc -cbr 384000 -if 異世界へ行きたい.wav -of 異世界へ行きたい.m4a

改めて以下のとおりコンテナはMP4形式、動画コーデックはH.264形式(エンコード済)、音声コーデックはAAC形式(エンコード済)で多重化(コンテナ化)。

ffmpeg -i 異世界へ行きたい.m4v -i 異世界へ行きたい.m4a -c copy 異世界へ行きたい.mp4

よしよし、いずれの環境でも問題なく再生できる。今日はここまで。

音楽 | comments (0) | trackbacks (0)
楽天たすけ愛

Comments

Comment Form


Icons:
[icon]

Trackbacks