【ffmpeg】使用 FFmpeg 给视频文件添加旁白和字幕
一、视频添加旁白
添加旁白需要将音频文件和视频文件的声音叠加在一起,可以使用 FFmpeg 的 amix 过滤器,以下是一个示例命令
ffmpeg -i a.mp4 -i a.mp3 -filter_complex "[0:a]volume=0.5[a0];[1:a]volume=3[a1];[a0][a1]amix=inputs=2:duration=first[aout]" -map 0:v -map "[aout]" -c:v copy -c:a aac -strict experimental output.mp4
二、视频添加字幕
参数说明:
subtitles:字幕文件
Fontsize:字幕大小
PrimaryColour:字幕颜色
MarginV:具体屏幕下方距离
ffmpeg -i output.mp4 -vf "subtitles=a.srt:force_style='Fontsize=12,PrimaryColour=&H00FF0000,MarginV=50'" -c:a copy output1.mp4
三、nodejs(fluent-ffmpeg)实现同时添加旁白和字幕
// 旁白语音的背景音乐音量降低 let lowAudioTime = ''; lowAudioTime = `:enable='between(t,0,13)'`; ffmpeg() .input(waterFile) .input(audioFile) // 添加音频文件 .complexFilter([ `[0:a]volume=0.2${lowAudioTime}[a0]`, '[1:a]volume=4[a1]', '[a0][a1]amix=inputs=2:duration=first[aout]' ]) .outputOptions([ '-vf', `subtitles=${srtFile}:force_style='Fontsize=10,PrimaryColour=&H00FFFFFF,MarginV=50,MarginR=120,MarginL=120'`, '-map 0:v:0', '-map [aout]' ]) .output(outFile) .on("progress", (progress) => { console.log('视频字幕,进度: ' + progress.percent + '% done'); }) .on("end", () => { console.log("视频视频字幕完成"); resolve(); }) .run();
得意时做事,失意时读书