前回の続きです。
成果物は以下です。
やり方(設計部)
前回の設計部分から、省略できそうなところを削りました。
- 画像と音声ファイルのマッピング用のCSVファイルを作成する。
フォーマットは[ 音楽ファイル名 ,歌手名,曲名, 画像ファイルパス] - 1.のCSVファイルを読み込んで、画像と音声を紐づけるコマンドを作成する。
- 2.で作成したコマンドを実行して音声付動画を作成。
- 2.3.を繰り返して、すべての音楽ファイル分の動画を作成する。
- 作成した動画ファイルを全て結合し、1つのファイルにする。
- 5.をYouTubeへアップロード。
苦労した事
- イメージ画像ファイルの探索に一番時間がかかってしまいました。良いサイトがあったら、記録していきたいと思います。
- YouTubeへのアップロードで、最初にアップロードした30曲分は著作権の問題でアップロード後に日本での公開を制限されてしまいました。次回から気を付けたいと思います。
◆手順
画像と音声ファイルのマッピング用のCSVファイルを作成する。
手作業で行いました。
画像ファイルがスクレイピングでダウンロードできれば、完全自動化も可能だと考えます。
2.~4.CSVファイルを読み込んで、すべての音楽ファイルを動画化
python で実装します。ソースコードは以下です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# 1.readCsvFile # 2.createCommand # 1.getPictureFile # 2.getSingerAndTitleText # 3.createMovieName # 4.createCommandSentence # 3.donnCommand import csv import subprocess # CONST CSV_FILE_NAME='[CSVファイルパス]' MUSIC_FOLDER_NAME='[音楽フォルダパス]' OUT_FOLDER_NAME='[出力物フォルダパス]' OUT_FILE_EXT='.mp4' UNDER_BAR='_' FFMPEG_HEADER='ffmpeg -loop 1 -r 30 -i ' FFMPEG_MIDDLE1=' -i ' FFMPEG_MIDDLE2=' -vcodec libx264 -acodec aac -strict experimental -ab 320k -ac 2 -ar 48000 -pix_fmt yuv420p -shortest ' # 1.readCsvFile with open(CSV_FILE_NAME) as csvFile: # print(csvFile.read()) # allReadMothod reader = csv.reader(csvFile) for row in reader: # 2.createCommand # 1.getPictureFile # 2.getSingerAndTitleText # 3.createMovieName # 4.createCommandSentence imagePath = row[3] fileName = row[0] outFileName = row[1] + UNDER_BAR + row[2] cmd = FFMPEG_HEADER + imagePath + FFMPEG_MIDDLE1 + MUSIC_FOLDER_NAME + fileName + FFMPEG_MIDDLE2 + OUT_FOLDER_NAME + outFileName + OUT_FILE_EXT # 3.donnCommand subprocess.call(cmd.split()) |
作成した動画ファイルを全て結合し、1つのファイルにする。
FFMPEGで実行します。コマンドの解説は前回の記事をご参照下さい。
1 |
ffmpeg -safe 0 -f concat -i [定義ファイル名] -c:v copy -c:a copy -map 0:v -map 0:a [出力ファイル名] |
所感
これまでFFmpegでいくつかのCUIコマンドを作成してきましたが、ファイルパスの指定などが、都度都度手間に感じました。
折を見て、GUIでファイル選択したものに対して特定の処理を実行させる仕組みを作成しようと思います。
(追記)作成しました。
コメント