Use PS/FFMPEG To Bulk Rotate Movies
Description:
So I have this certain family member that always seems to record videos 90 degrees clockwise and it drives me crazy when trying to import them into Plex. I tried various software to rotate the videos and nothing could do it in bulk without paying. So I hacked together the following solution using Powershell and FFMPEG.
Example: I want to bulk rotate (90 degrees COUNTERclockwise) the following files c:\temp\vid.mp4
,c:\temp\vid2.mp4
, and c:\temp\vid3.mp4
NOTE: This assumes you have the ffmpeg executable at c:\temp\ffmpeg\bin\ffmpeg.exe.
To Resolve:
-
Get a video file from somewhere and copy it three times to c:\temp where the ffmpeg folder lies. Rename to match above (vid.mp4, vid2.mp4, and vid3.mp4).
-
Create a file called
files.txt
in C:\temp and paste the following:1 2 3
c:\temp\vid.mp4 c:\temp\vid2.mp4 c:\temp\vid3.mp4
-
Create four files in C:\temp called run.bat, run.ps1, run2.bat, and run.ps1. For the .bat files, just copy, paste, save, and close the following:
1 2 3 4 5
pushd "%~dp0" @ECHO OFF PowerShell.exe -NoProfile ^ -Command "& {Start-Process PowerShell.exe -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File ""%~dpn0.ps1""' -Verb RunAs}" popd
-
For run.ps1, copy and paste the following:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
$Log = "$PSScriptroot\FilesToProcess.txt" If (-not(Test-Path $Log)) { New-Item -Itemtype File -Path $Log | Out-Null } $FilesToProcess = Get-Content "$PSScriptroot\files.txt" ForEach ($File in $FilesToProcess) { $FilePath = $File -Split "\\" $FileFullName = $FilePath[-1] $Extension = $Filepath[-1].Split('.')[-1] $Filename = $Filepath[-1].Split('.')[-2] $Command = "$PSScriptroot\ffmpeg\bin\ffmpeg.exe" $Arguments = "-" + "i" + " " + $File + " " + "-vf transpose=2" + " " + $PSScriptroot + "\" + $Filename + "-" + "rotated" + '.' + $Extension $Run = $Command + " " + $Arguments Write-Output $Run | Out-File $Log -Append }
-
For run2.ps1, copy and paste the following:
1 2 3 4 5 6
$Files = Get-Content "$PSScriptRoot\FilesToProcess.txt" ForEach ($F in $Files) { Start-Process PowerShell.exe -ArgumentList "-NoProfile -ExecutionPolicy Bypass -Command $F" -Verb RunAs }
-
That’s it! When you want to bulk rotate movies, you just have to:
-
Edit the original files.txt and put in the full path of the movies you want to rotate.
-
Double click run.bat to launch the first powershell script. It will dump a file to the given directory called
FilesToProcess.txt
. This file is simply a command that will be ran using FFMPEG in the next script for each video file. -
Double click run2.bat and it will launch separate processes to bulk rotate your videos.
-
Comments