見出し画像

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 ^」にすれば動きます。

使い方

  1. 上記バッチファイルにFHD(1920x1080)の動画をD&D

  2. 元動画の切り抜き開始の時間を指定

  3. 切り抜く時間を指定

  4. 完成まで待つ

  5. 完成した動画をYouTubeに動画投稿する

  6. 動画のタイトルの末尾に「 #Shorts 」と入れる(#の前に半角スペースを入れる)

切り抜く時間の指定は、通常「hh:mm:ss」で指定しますが、秒で指定しないと動かない場合があります。(例:54秒→54)

結び

既存のコードの流用だったとは言え、(深夜の)短い時間で作成した割には「完成度たけーなオイ」と思いました。

が、よく考えたら、結局文字入れは動画編集ソフトを通すから、なんだかなぁと思ってます。

既にffmpeg環境がある人には向いてるけれども、この記事みてffmpeg入れようって人には向いてないなと思う今日この頃。

ここから先は

0字

¥ 300

期間限定 PayPay支払いすると抽選でお得に!

この記事が気に入ったらサポートをしてみませんか?