ワンラインソリューション

ワンラインソリューション

私はFFmpegを初めて使い、これを理解しようとしています。バッチ処理そしてこの答えはビデオの回転しかし、それらをまとめる必要があります。

Windows 上でこのアクションのスクリプトを作成する方法を教えていただけませんか?

答え1

基本的には、ファイルを検索し (変数に保存し)、検索したファイルを 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は特定の種類のファイルのみを対象とします。たとえば、*.mp4 は MP4 ファイルのみを検索します。ファイルの種類が複数あるが、変換する必要のないファイル (テキスト ファイルなど) が多数ある場合は、-Exclude変換したくないすべての形式を選択するか、-Include変換する必要がある形式のみを選択することができます (-Include-Filter、速度は遅いですが、複数の形式を含めることができます)。
  • -Recurseサブフォルダーも検索します。PowerShell -Depthv 5+ でも使用できます。
  • -Wait一度に 1 つの ffmpeg インスタンスが開きます。これがない場合は、すべてのインスタンスが並行して開かれます。
  • -NoNewWindowは、ffmpeg インスタンスの出力を PowerShell コンソールに表示します。これがない場合は、ffmpeg のすべてのインスタンスが新しいコンソール ウィンドウで開きます。 がある場合にのみ意味があります-Wait

スクリプトを開始する前に、すべての二重括弧 (および不要な場合はその内容) を削除する必要があります。

また、以下の点も適応する必要があります。

  • C:\PATH_TO_FILES当然ですが、ファイルへのパスです。
  • C:\PATH_TO_FFMPEG\ffmpeg.exe当然ですが、ffmpeg.exe へのパスです。
  • rotate=<x>- を、、または のいずれ<x>かに置き換える必要があります。(コードのソースで説明されているとおり)90180270

さらに説明が必要な場合は、喜んでお手伝いいたします。

答え2

ワンラインソリューション

npx rotate-video --source=source_path --destination=destination_path --extension=MP4 --angel=270

注記:FFMPEGまずCLIをインストールする必要がありますインストール

関連情報