私はFFmpegに不慣れで、これを理解しようとしています。 バッチ処理 でこれを見つけ、 ビデオの回転 でこの答えを見つけましたが、それらをまとめる必要があります。
誰かがWindowsでこのアクションのスクリプトを作成する方法を説明できますか?
基本的には、ファイルを検索して(変数に格納し)、検索したファイルをFFmpegにフィードするだけです。
もちろん、 Windowsのバッチ言語で十分です 。しかし、私はそれについてまったく習熟していないので、PowerShellスクリプトを次に示します。
_# Searching for files with the Get-ChildItem cmdlet and saving their relevant properties in an array:
# NOTE: -File will only work with PowerShell-versions >= 3.
[array]$FilesToRotate = Get-ChildItem -Path "C:\PATH_TO_FILES" ((-Filter *.mp4)) ((-Recurse)) -File | ForEach-Object {
# NOTE: This part is a bit tricky - I just added it so I'm able to save the parent-path of each file in an object.
# NOTE: One could also omit the whole ForEach-Object and use the Split-Path cmdlet inside the output-file's specification in FFmpeg's code.
[PSCustomObject]@{
InFullName = $_.FullName
# Will put the output-file in the same folder as the input-file and add "_ROTATION" as suffix in its name.
OutFullName = "$(Split-Path -Parent -Path $($_.FullName))\$($_.BaseName)_ROTATE$($_.Extension)"
}
}
# Processing the files with FFmpeg using PowerShell's Start-Process cmdlet:
for($i=0; $i -lt $FilesToRotate.Length; $i++){
Start-Process -FilePath "C:\PATH_TO_FFMPEG\ffmpeg.exe" -Argumentlist " -i `"$($FilesToRotate[$i].InFullName)`" -c copy -metadata:s:v:0 rotate=<x> `"$($FilesToRotate[$i].OutFullName )`" " ((-Wait)) ((-NoNewWindow))
}
_
このスクリプトはFFmpegを 指定したコード (チェックしませんでしたが、とにかく簡単に置き換えることができます)で実行し、結果のファイルを同じフォルダーに名前サフィックス「_ROTATE」で保存します-したがって、「MyMovie2017.mov」は「MyMovie2017_ROTATE.mov」になります。 (それらをまったく新しいフォルダーにレンダリングする場合は、$($FilesToRotate[$i].ParentPath)
を任意のパスに置き換えます。)
注:二重括弧_(( ))
_内のものはオプションです:
-Filter
_は、特定の種類のファイル(1つ)のみを処理します。 * .mp4はMP4ファイルのみを検索します。複数のファイルタイプがあるが、変換する必要のないファイル(テキストファイルなど)が多い場合は、変換したくないすべての形式を_-Exclude
_するか、_-Include
_のみにすることができます。変換する必要があるもの(_-Include
_は_-Filter
_に似ています-速度は遅くなりますが、複数の形式を含めることができます。)-Recurse
_はサブフォルダーも調べます。 PowerShell v 5以降では_-Depth
_を使用することもできます。-Wait
_は一度に1つのffmpegインスタンスを開きます-それがないと、すべてのインスタンスが並行して開かれます。-NoNewWindow
_は、PowerShellコンソールでのffmpegインスタンスの出力を表示しますが、それがないと、ffmpegのすべてのインスタンスが新しいコンソールウィンドウで開きます。 _-Wait
_でのみ意味があります。スクリプトを開始する前に、すべての二重括弧(および不要な場合はその内容)を削除する必要があります。
また、これらのことを適応させる必要があります。
C:\PATH_TO_FILES
_明らかに、ファイルへのパス。C:\PATH_TO_FFMPEG\ffmpeg.exe
_明らかに、ffmpeg.exeへのパス。rotate=<x>
_-_<x>
_を_90
_、_180
_、または_270
_のいずれかに置き換える必要があります。 (コードのソースで説明されているように)さらに説明が必要な場合は、喜んでお手伝いさせていただきます。