FHD動画をサクッとYouTubeの#Shorts動画にする
※2022/1/1 コード修正
目的
上下に黒帯が付いてる動画を作りたい。
文字は別の編集ソフトを使用していますが、黒帯入れる+縦長動画にするのは自動で出来ます!
壁
YouTubeのショート動画に対応するには、下記の条件が必須です。
解像度:1080x1920(縦長でないとダメみたい。)
動画時間:60秒以内
動画名:動画名に" #Shorts "と入れる
この形式を毎回手動で作業するのは苦痛なので、なるべく自動化するのが今回の目的です。
セットアップ
前提
Windowsである事
ffmpegのpathを通している事
下記コードをbatファイルにする事
コード
@echo off
rem このバッチファイルをカレントディレクトリにする
cd /d %~dp0
rem 環境変数を遅延展開する
setlocal enabledelayedexpansion
if "%~n1"=="" (
rem このファイルの説明をして終了
call :EXPLANATION
pause
exit
) else (
rem 引数の全体数をカウント
for %%n in (%*) do set /a argumentCount=argumentCount+1
for %%i in (%*) do (
rem 処理済み(現在処理している動画含む)の動画数
set /a EncMovieCount=EncMovieCount+1
rem 出力ファイル名(入力ファイルと同じディレクトリに出力する。フルパス。)
set outputFilePathAndName=%%~dpni_YoutubeShorts.mp4
rem 入力ファイル名(フルパス)
set inputFilePathAndName=%%~dpnxi
rem ffprobeのオプション(-iオプションの前)
set ffprobeStrPre=-hide_banner
rem ffprobeのオプション(-iオプションの後)
set ffprobeStrPost=-show_entries stream=r_frame_rate -show_entries format=bit_rate -unit -of json
rem findstrの正規表現(BitRate)
set findstrBitRegex=bit_rate.*s
rem ffprobeを使用してビットレートを取得し、jsonファイルに書き込む
ffprobe !ffprobeStrPre! -i !inputFilePathAndName! !ffprobeStrPost!>ffprobeResult.json
rem jsonファイルからビットレートが記述されている行を抽出する
for /f "usebackq delims=" %%j in (`findstr /r "!findstrBitRegex!" ffprobeResult.json`) do set bitRateResult=%%j
call :FFMPEG_COMMAND
)
rem 作業用のjsonファイルを削除する
del ffprobeResult.json
endlocal
pause
exit
)
:FFMPEG_COMMAND
echo ----------------------------------------------------------------------
echo !EncMovieCount! / !argumentCount!
echo ドラッグアンドドロップされた動画ファイルを一括で処理しています。
echo 中止する場合は Ctrl + C 次いで Y を押した後、 Enter でバッチを終了してください。
echo ----------------------------------------------------------------------
set /p startTime="開始時間(HH:MM:SSで指定): "
set /p endTime="終了時間(HH:MM:SSで指定): "
ffmpeg ^
-hide_banner ^
-ss !startTime! ^
-to !endTime! ^
-i "!inputFilePathAndName!" ^
-c:v h264_nvenc ^
-b:v !bitRateResult:~21,-7! ^
-vf "scale=1080x1920:flags=lanczos+accurate_rnd" ^
-vf "pad=y=-1:aspect=9/16" ^
-preset slow ^
-c:a aac ^
-b:a 320K ^
-ar 48k ^
-aac_coder twoloop ^
"!outputFilePathAndName!"
exit /b
:EXPLANATION
echo ----------------------------------------------------------------------
echo ■このファイルの目的
echo 動画をYouTubeShortsに投稿できる形式に変換するためのバッチファイル。
echo.
echo ■動作環境
echo FFmpegが動作するWindows
echo.
echo ■使い方
echo 1. 変換したいファイルをこのバッチファイルにドラッグ&ドロップする(複数選択可能)
echo 2. 待つ
echo ----------------------------------------------------------------------
exit /b
NVENCの使用を前提としていますが、グラフィックボードがNVIDIAでない場合は「-c:v h264_nvenc ^」を「-c:v libx264 ^」にすれば動きます。
使い方
上記バッチファイルにFHD(1920x1080)の動画をD&D
元動画の切り抜き開始の時間を指定
切り抜く時間を指定
完成まで待つ
完成した動画をYouTubeに動画投稿する
動画のタイトルの末尾に「 #Shorts 」と入れる(#の前に半角スペースを入れる)
切り抜く時間の指定は、通常「hh:mm:ss」で指定しますが、秒で指定しないと動かない場合があります。(例:54秒→54)
結び
既存のコードの流用だったとは言え、(深夜の)短い時間で作成した割には「完成度たけーなオイ」と思いました。
が、よく考えたら、結局文字入れは動画編集ソフトを通すから、なんだかなぁと思ってます。
既にffmpeg環境がある人には向いてるけれども、この記事みてffmpeg入れようって人には向いてないなと思う今日この頃。
いいなと思ったら応援しよう!
よろしければ応援お願いします! いただいたチップはクリエイターとしての活動費に使わせていただきます!