Скрипт написан по следам вот этой заметки.
Данный скрипт предполагает, что внешняя аудиодорожка должна быть в формате 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 для выхода..."