常時撮影型のドライブレコーダーで旅の記録を残している方もいらっしゃるかと思いますが、Google Photo の無料枠が廃止されたこともあって、保存に頭を悩ませている方もいらっしゃるかと思います。
最近のドラレコは、HD はもはや当たり前、WQHD や 4K のものもどんどん増えていて、録画された動画のクオリティが向上する一方で、当然ながらファイルサイズもどんどん大きくなっています。この動画を、クオリティをそれほど下げずにサイズを縮小しよう……というのがこの記事の狙いです。
必要なもの
ffmpeg(パスの通ったところに配置してください。コマンド プロンプトの初期ディレクトリである %USERPROFILE% にコピーする形でも良いかと思います)
Windows 10
手順
- ドライブレコーダーが作成したファイルを C:\Drive_Recorder_Work\Source\ にコピーする
- 以下のバッチファイルを実行する
バッチファイルの実行が終了すると、C:\Drive_Recorder_Work\Output\ に再エンコードした動画ファイルが作成されている……筈です。
バッチファイル
※ 表示環境によっては、予期しない位置で改行されてしまう場合があります。
c:mkdir "C:\Drive_Recorder_Work\" > nul 2>&1mkdir "C:\Drive_Recorder_Work\Source\" > nul 2>&1mkdir "C:\Drive_Recorder_Work\Output\" > nul 2>&1cd "C:\Drive_Recorder_Work\Source"for %%i in (*) do (ffmpeg -copyts -i "C:\Drive_Recorder_Work\Source\%%i" -c:v libx265 -r 18 "C:\Drive_Recorder_Work\Output\%%i" -n)
ただ、これだとファイルの「作成日時」と「更新日時」が ffmpeg で再エンコードした日付になってしまいます。実害はないのですが、なんとなく元の日時に合わせたい……という場合は、以下の PowerShell スクリプトを実行すると良いです(あ、たぶん動くと思いますが、ものすごく汚いスクリプトなので、その点はご容赦ください)。
PowerShell スクリプト(change_timestamp.ps1)
※ 表示環境によっては、予期しない位置で改行されてしまう場合があります。
$location = Get-Location$SourcePath = 'C:\Drive_Recorder_Work\Source'$TargetPath = 'C:\Drive_Recorder_Work\Output'Set-Location $SourcePath$filelist = Get-ChildItem -Recurse | Select FullName, CreationTime, LastWriteTimeforeach( $item in $filelist )$FileName = $Item.FullName$FileName = $FileName.Replace( $SourcePath, $TargetPath )$CreationTime = $Item.CreationTime$LastWriteTime = $Item.LastWriteTimeWrite-Output $FileNameSet-ItemProperty "$FileName" -name CreationTime -value $CreationTimeSet-ItemProperty "$FileName" -name LastWriteTime -value $LastWriteTime}Set-Location $location
先程のバッチファイルの最後に、以下の行を追加しても良いかもですね。
※ 表示環境によっては、予期しない位置で改行されてしまう場合があります。
powershell -NoProfile -ExecutionPolicy Unrestricted C:\Users\username\change_timestamp.ps1