この動画では、前回使ったバッチファイルの作り方を解説しています。
「テキストファイルにコードを書く」→「フォルダを作成して連結したい動画を入れる」→「フォルダのパスをテキストファイルにコピペする」→「テキストファイルをバッチファイルに変更する」→「バッチファイルをダブルクリックする」という大まかな流れになっています。
テキストファイルのコードは下記の「補足」からコピペしてください。
コピペ用コード↓
@echo off
setlocal enabledelayedexpansion
rem 動画フォルダに移動
cd /d [パスをコピー]
rem 連結動画用のフォルダを作成(存在しない場合のみ作成)
if not exist "連結動画" (
mkdir "連結動画"
)
rem mp4ファイル名を配列に格納
set i=0
for %%f in (*.mp4) do (
set /a i+=1
set "file[!i!]=%%f"
)
rem ファイル数の確認
if %i% lss 2 (
echo mp4 ファイルが2つ以上ありません。終了します。
pause
exit /b
)
rem 順列を生成し、テキストファイルを作成
call :generate_permutations 0
rem 生成したテキストファイルをffmpegで結合し、「連結動画」フォルダに移動後、テキストファイルを削除
for %%f in (*.txt) do (
rem テキストファイルの拡張子なしのファイル名を取得
set "filename=%%~nf"
rem ffmpegでファイルを結合し、「連結動画」フォルダ内にファイルを出力
ffmpeg -f concat -safe 0 -i "%%f" -c copy "連結動画\!filename!.mp4"
rem 結合後にテキストファイルを削除
del "%%f"
)
echo 動画連結が終わりました。
pause
exit /b
rem 順列を生成するサブルーチン
:generate_permutations
setlocal
set idx=%1
set /a idx+=1
rem 順列が全て生成されるまで処理を繰り返す
if %idx% lss %i% (
for /L %%j in (%idx%,1,%i%) do (
set "temp=!file[%idx%]!"
set "file[%idx%]=!file[%%j]!"
set "file[%%j]=!temp!"
rem まだ順列の続きがある場合、再帰的に呼び出す
call :generate_permutations %idx%
rem ファイルの順番を戻す
set "temp=!file[%idx%]!"
set "file[%idx%]=!file[%%j]!"
set "file[%%j]=!temp!"
)
) else (
rem 順列を出力する
set "filename="
for /L %%k in (1,1,%i%) do (
set "filename=!filename!!file[%%k]!"
)
rem 各ファイルをffmpeg用の形式でテキストファイルに出力 (UTF-8 BOMなし)
set "output="
for /L %%k in (1,1,%i%) do (
set "output=!output!file '[パスをコピー]\!file[%%k]!'`r`n"
)
rem PowerShellでBOMなしUTF-8でファイルを出力
powershell -Command "$Output = [System.Text.Encoding]::UTF8.GetBytes(\"!output!\"); [System.IO.File]::WriteAllBytes('%cd%\!filename!.txt', $Output)"
)
endlocal
goto :eof