静止画・ボーカル曲・歌詞から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 AAC(libfdk_aac
)やFAAC(libfaac
)といったエンコーダーを内蔵しておらず、twoloop
(TLS)だとしてもしょっぱいネイティブAACエンコーダーしか利用できなかったから。
neroAacEnc -cbr 384000 -if 異世界へ行きたい.wav -of 異世界へ行きたい.m4a
改めて以下のとおりコンテナはMP4
形式、動画コーデックはH.264
形式(エンコード済)、音声コーデックはAAC
形式(エンコード済)で多重化(コンテナ化)。
ffmpeg -i 異世界へ行きたい.m4v -i 異世界へ行きたい.m4a -c copy 異世界へ行きたい.mp4
よしよし、いずれの環境でも問題なく再生できる。今日はここまで。
Comments