PowerShell · 15.05.2022

Заменяем звук в видеофайле

Скрипт написан по следам вот этой заметки.

Данный скрипт предполагает, что внешняя аудиодорожка должна быть в формате mp3, а целевой и итоговый видеофайлы в формате mp4.

Писать условия на проверку обозначенных в скрипте файлов не стал, так как ffmpeg сам всё расскажет — что и почему его не устраивает.

Сразу после запуска скрипт предупреждает о необходимости переименования целевых файлов.

После успешного завершения работы скрипта — удаляется временный видеофайл. Исходные файлы не затрагиваются.

### Шапка скрипта ###
[System.Console]::Title = "Замена звука в видеофайле"

### Предупреждение пользователя ###
Write-Host "Данным скриптом поддерживается только видеоконтейнер mp4 и звук в формате mp3!" -ForegroundColor Red
Write-Host "Переименуйте целевой видеофайл в video.mp4, а аудиофайл в sound.mp3!" -ForegroundColor Red
Write-Host "При успешной отработке скрипта в папке будет создан файл final.mp4" -ForegroundColor Red
Write-Host

### Блок переменных ###
$video = "video.mp4"
$sound = "sound.mp3"
$mute  = "video_mute.mp4"
$file  = "final.mp4"

### Вырезаем звук из видеофайла ###
$audiotrim = "-i $video -c:v copy -an $mute"   
Start-Process -FilePath ffmpeg.exe -ArgumentList $audiotrim -Wait -NoNewWindow

### Присоединяем звук к видеофайлу без звука ###
$audioreplace = "-i $mute -i $sound -c:v copy $file"   
Start-Process -FilePath ffmpeg.exe -ArgumentList $audioreplace -Wait -NoNewWindow

### Удаляем файл без звука ###
Remove-Item $mute -Force -ErrorAction Ignore

### Завершение работы скрипта ###
Write-Host
Write-Host "Работа скрипта завершена!" -ForegroundColor Cyan
Read-Host "Нажмите Enter для выхода..."