说明:
本文内容经过ChatGPT润色,代码为个人手写,如有不适,请多包涵。
在视频制作中,为视频添加声音和字幕是常见的需求。通过Python结合FFmpeg,我们可以高效地实现这些功能。本文将介绍如何使用Python脚本和FFmpeg命令来处理视频,添加声音和字幕,以提升视频的观赏性和信息传达效果。
环境准备
在开始之前,请确保您已经安装了FFmpeg和Python环境。您可以通过以下方式检查FFmpeg是否安装:
ffmpeg -version
如果没有安装FFmpeg,请访问FFmpeg官网进行下载安装。
接下来,安装Python依赖库。我们将使用subprocess
来运行FFmpeg命令,还会用到loguru
库来进行日志记录。您可以使用以下命令安装loguru
:
pip install loguru
脚本概述
我们将实现两个主要功能:
- 为视频添加背景音乐或声音。
- 为视频添加字幕。
以下是实现这些功能的Python脚本:
import subprocess
import os
from loguru import logger
def video_add_to_voice(video_path, voice_path, save_path, video_time):
"""
视频添加声音或背景音乐
:param video_path:
:param voice_path:
:param save_path:
:param video_time:
:return:
"""
finally_video = voice_path
if voice_path:
try:
def add_background_music_to_video(video_path, music_path, output_path, t=20):
ffmpeg_command = [
'ffmpeg',
'-i', video_path,
'-stream_loop', '-1',
'-i', music_path,
'-filter_complex', "[1:a]aloop=loop=-1",
'-t', f'{t}',
'-c:v', 'copy',
'-preset', 'faster',
'-y',
output_path
]
return ffmpeg_command
# 加音乐后的视频路径和名字
music_local_path = os.path.join(save_path, 'm').replace("\\", '/') + '.mp4'
add_music_command = add_background_music_to_video(video_path, voice_path, music_local_path, video_time)
subprocess.run(add_music_command, check=True, timeout=300)
finally_video = music_local_path
except Exception as e:
print(format(e))
pass
logger.info(f'添加voice后的本地路径:{finally_video}')
return finally_video
def video_add_to_srt(video_path, srt_path, save_path):
"""
视频添加字幕
:param video_path:
:param srt_path:
:param save_path:
:return:
"""
finally_video = video_path
if srt_path:
try:
srt_local_path = os.path.join(save_path, 's').replace("\\", '/') + '.mp4'
command = [
"ffmpeg",
"-i", video_path,
"-vf", f"subtitles={srt_path}:force_style='FontName=Arial,FontSize=14,FontColor=yellow'",
"-c:a", "copy",
'-preset', 'faster',
srt_local_path
]
subprocess.run(command, check=True, timeout=300)
finally_video = srt_local_path
except Exception as e:
logger.info(format(e))
return finally_video
if __name__ == '__main__':
video = 'room.mp4'
srt = 'room.srt'
voice = 'room.mp3'
save_path = './video'
time = 60
voice_video_path = video_add_to_voice(video, voice, save_path, time)
srt_video_path = video_add_to_srt(voice_video_path, srt, save_path)
logger.info(f'添加字幕声音后视频地址:{srt_video_path}')
详细讲解
-
添加声音或背景音乐
函数
video_add_to_voice
实现了将背景音乐添加到视频的功能。首先,它定义了一个内部函数add_background_music_to_video
,该函数通过FFmpeg命令将音乐循环到视频的时长中。'-stream_loop', '-1'
:表示音乐文件将无限循环。'-filter_complex', "[1:a]aloop=loop=-1"
:指定音频的循环过滤器。'-t', f'{t}'
:设置视频的时长为参数t
(单位为秒)。'-c:v', 'copy'
:保持视频编码不变。
音频处理完成后,生成的文件路径会被返回以供后续操作使用。
-
添加字幕
函数
video_add_to_srt
负责将字幕添加到视频中。它利用FFmpeg的-vf
选项来应用字幕文件。'-vf', f"subtitles={srt_path}:force_style='FontName=Arial,FontSize=14,FontColor=yellow'"
:使用subtitles
过滤器,将字幕添加到视频中,并设置字幕样式(字体、大小、颜色等)。'-c:a', "copy"
:保持音频编码不变。
处理完成后,生成的带字幕的视频路径会被返回。
使用示例
在脚本的__main__
部分,我们提供了一个示例如何调用这些函数:
video_add_to_voice
:将指定的音频文件添加到视频中。video_add_to_srt
:将字幕文件添加到处理过的带音乐的视频中。
通过这些步骤,您可以生成带有音频和字幕的视频,以满足不同的需求。这个过程可以应用于各种场景,如制作教育视频、娱乐视频或任何需要多媒体元素的视频项目。
总结
通过结合使用Python和FFmpeg,我们可以有效地为视频添加声音和字幕。这个脚本不仅提高了处理视频的效率,还能通过自定义参数满足不同的需求。希望这篇文章能帮助您理解并应用这些技术,让您的视频处理工作变得更加轻松和高效。如果您对视频处理有更高的要求或其他问题,欢迎继续探索和实践!