Separarea audio de video cu ffmpeg și Powershell

  • 1 minute de citit
  • 4 exemple de cod
  • 1 imagine

Disponibil și în English

Pe această pagină

Salut 👋,

Acum ceva timp am scris un articol despre cum se separă audio de video cu ffmpeg pe Linux, folosind bash. Articolul poate fi citit aici:

Separarea audio de video (cu ffmpeg) Acum vreau să te introduc în versiunea pentru Windows, cu câteva funcții mici în Powershell pe care le-am scris.

Dar de ce?

Dacă ești creator de conținut și nu folosești programul gratuit Audacity pentru editarea fișierelor audio, cred că ratezi niște funcționalități excelente. În opinia mea, funcția noise gate este foarte utilă pentru eliminarea sunetelor de fundal și a respirației din audio. Ventilatorul PC-ului meu și apăsările de taste sunt destul de puternice, iar eu le pot elimina ușor cu aceste setări:

Am testat funcția de izolare a vocii din Final Cut Pro și din Davinci Resolve și am constatat că Noise Gate din Audacity funcționează cel mai bine pentru mine.

Fluxul meu de lucru

Am un video brut și needitat, pe care îl înregistrez cu OBS, apoi separ audio rulând:

 Split-Video .\InstallDockerAndDockerCompose.mkv

Apoi deschid fișierul audio InstallPythonAndPycharmTemp.aup3 în Audacity, aplic efectele dorite și salvez fișierul în același director, cu numele InstallDockerAndDockerComposeTemp.wav.

Apoi rulez:

Join-Video .\InstallDockerAndDockerCompose.mkv

Și va rezulta videoclipul final numit InstallDockerAndDockerComposeFinal.mp4, cu audio editat în Audacity! 😄

Funcții Powershell

Poți adăuga aceste funcții în profilul tău PowerShell tastând code $PROFILE. Ar trebui să deschidă o instanță de Visual Studio Code și fișierul tău de profil PS.

Apoi lipește următoarele funcții în fișier:

function global:Split-Video {  [CmdletBinding()]  [Alias('vsplit')]  param (    [Parameter(Mandatory=$True,Position=0,ValueFromRemainingArguments=$False)]    [String] $VideoPath  )  begin {    $filename = Get-ChildItem -Path $VideoPath    $filename_wo_extension = $filename.basename  }  process {    ffmpeg -i "$VideoPath" -vn -c:a copy "${filename_wo_extension}Temp.m4a"    ffmpeg -i "$VideoPath" -an -c:v copy "${filename_wo_extension}Temp.mp4"  }}function global:Join-Video {  [CmdletBinding()]  [Alias('vjoin')]  param (    [Parameter(Mandatory=$True,Position=0,ValueFromRemainingArguments=$False)]    [String] $VideoPath,    [Parameter(Mandatory=$False,Position=1,ValueFromRemainingArguments=$False)]    [String] $AudioPath  )  begin {    $filename = Get-ChildItem -Path $VideoPath    $filename_wo_extension = $filename.basename    # Verifică dacă AudioPath este gol    if ($AudioPath -notmatch '\S') {      $audio_file = "./${filename_wo_extension}Temp.wav"    } else {      $audio_file = $AudioPath    }  }  process {    ffmpeg -i "./${filename_wo_extension}Temp.mp4" -i "$audio_file" -c:v copy -c:a aac "./${filename_wo_extension}AudioFix.mp4"    Remove-Item -Force "./${filename_wo_extension}Temp.mp4"    Remove-Item -Force "./${filename_wo_extension}Temp.m4a"  }}

Asigură-te că ai ffmpeg instalat. Eu l-am instalat cu:

choco install ffmpeg

Concluzie

Mulțumesc că ai citit!

Ce părere ai despre acest flux de lucru, ai idei despre cum ar putea fi îmbunătățit?

Denis