📅  最后修改于: 2023-12-03 15:10:33.909000             🧑  作者: Mango
本文将介绍如何使用 Shell-Bash 编写脚本,来将 mp4 视频文件中原有的声音替换成自定义的声音。使用这种方式可以实现批量处理,并且无需使用第三方软件或网站。
在编写脚本之前,我们需要确保在系统中安装了以下命令行工具和依赖:
可以使用以下命令检查是否已安装:
$ ffmpeg -version
$ ffprobe -version
$ mp4box -version
如果已经安装,则会显示相应的版本信息。如果没有安装,则需要先安装它们才能继续执行后续步骤。
下面是一个完整的脚本,它可以将 mp4 视频文件中的原有声音替换成自定义的声音:
#!/bin/bash
#----------- 输入参数 -----------
video_file=$1
audio_file=$2
out_file=$3
#-------- 默认值设置 ----------
if [ -z "$video_file" ] || [ -z "$audio_file" ] || [ -z "$out_file" ]
then
echo "Usage: $0 <video_file> <audio_file> <out_file>"
exit 1;
fi
if [ ! -f "$video_file" ]
then
echo "Error: '$video_file' not exist."
exit 1;
fi
if [ ! -f "$audio_file" ]
then
echo "Error: '$audio_file' not exist."
exit 1;
fi
#---------- 提取出视频和音频 -----------
ffmpeg -i "$video_file" -vn -acodec copy "$video_file.aac"
ffmpeg -i "$video_file" -an -vcodec copy "$video_file.h264"
#---------- 检查音视频长度是否匹配 -----------
v_duration=$(ffprobe -i "$video_file.h264" -show_entries format=duration -v quiet -of csv="p=0")
a_duration=$(ffprobe -i "$audio_file" -show_entries format=duration -v quiet -of csv="p=0")
if (( $(echo "$v_duration != $a_duration" | bc -l) ))
then
echo "Error: video and audio length not match."
exit 1;
fi
#---------- 转换音频格式 -----------
ffmpeg -i "$audio_file" -acodec aac -strict -2 "$audio_file.m4a"
#-------- 合并音视频 -----------
mp4box -add "$video_file.h264" -add "$audio_file.m4a" -new "$out_file"
#-------- 删除中间文件 -----------
rm -f "$video_file.h264" "$video_file.aac" "$audio_file.m4a"
上述代码段使用 Shell-Bash 语言编写的脚本实现,包含以下几个步骤:
使用该脚本的方法很简单,只需在终端中输入以下命令:
$ bash replace_audio.sh <video_file> <audio_file> <out_file>
其中 <video_file>
是原 mp4 视频文件路径,<audio_file>
是自定义声音文件路径,<out_file>
是替换声音后的新视频文件路径。
假设我们有一个名为 test.mp4
的视频文件,我们想要将它的声音替换成一个名为 myaudio.mp3
的声音文件,输出为 test_new.mp4
,那么我们只需输入以下命令:
$ bash replace_audio.sh test.mp4 myaudio.mp3 test_new.mp4
程序会根据上述说明对视频文件进行处理,并将新文件保存为 test_new.mp4
。