018-python原视频一键自动分离画面、音频并保存本地过程实现

2024-11-13 11:58 018-python原视频一键自动分离画面、音频并保存本地过程实现已关闭评论

每日教程在另一篇文章《python实现原视频自动添加字幕功能,字幕跟随声音自动显示》介绍了如何自动给原视频添加字幕,前提条件是要先生成字幕文件。本篇文章介绍如何分离原视频音频文件,有了音频文件就可以生成字幕文件了。

要将视频的画面(视频流)和音频分离出来,可以使用几种工具和方法,其中最常用的工具是 FFmpeg,它非常强大且支持多种格式。以下是一些方法来实现视频的画面和音频分离。

1. 使用 FFmpeg 分离视频画面和音频

(1)分离视频画面(视频流)

将视频的画面提取出来,只保留视频流(无音频):

ffmpeg -i input_video.mp4 -an -vcodec copy output_video.mp4

解释:
- -i input_video.mp4:输入的视频文件。
- -an:去除音频流,只保留视频。
- -vcodec copy:视频编码方式,表示直接复制视频流,不重新编码。
- output_video.mp4:输出的视频文件(只包含视频流,没有音频)。

(2)分离音频

将视频的音频提取出来,只保留音频流:

ffmpeg -i input_video.mp4 -vn -acodec copy output_audio.mp3

解释:
- -vn:去除视频流,只保留音频。
- -acodec copy:音频编码方式,表示直接复制音频流,不重新编码。
- output_audio.mp3:输出的音频文件。

(3)分离并指定输出格式

如果需要将音频保存为其他格式,比如 WAV,可以这样做:

ffmpeg -i input_video.mp4 -vn -acodec pcm_s16le -ar 44100 -ac 2 output_audio.wav

解释:
- -acodec pcm_s16le:指定音频编码为 PCM(无压缩的音频格式)。
- -ar 44100:音频采样率为 44.1kHz(标准音频采样率)。
- -ac 2:音频声道数为 2(立体声)。

2. 使用 Python 和 moviepy 库分离视频和音频

moviepy 是一个 Python 库,允许简便处理视频文件。可以使用 moviepy 来提取视频和音频流。

(1)分离视频流(仅保留画面)

from moviepy.editor import VideoFileClip

# 读取视频文件
video = VideoFileClip("input_video.mp4")

# 提取视频部分并保存为新文件
video.audio = None  # 去掉音频
video.write_videofile("output_video_without_audio.mp4", codec="libx264")

(2)分离音频流(仅保留音频)

from moviepy.editor import VideoFileClip

# 读取视频文件
video = VideoFileClip("input_video.mp4")

# 提取音频并保存为新文件
audio = video.audio
audio.write_audiofile("output_audio.mp3")

3. 使用 Python 和 ffmpeg-python

ffmpeg-python 是一个 Python 的 FFmpeg 封装库,它使得调用 FFmpeg 更加方便。下面是使用 ffmpeg-python 来分离视频流和音频流的代码示例。

(1)分离视频流(去除音频)

import ffmpeg

def extract_video(input_file, output_file):
    ffmpeg.input(input_file).output(output_file, an=None).run()

input_video = "input_video.mp4"
output_video = "output_video_without_audio.mp4"
extract_video(input_video, output_video)

(2)分离音频流(去除视频)

import ffmpeg

def extract_audio(input_file, output_file):
    ffmpeg.input(input_file).output(output_file, vn=None).run()

input_video = "input_video.mp4"
output_audio = "output_audio.mp3"
extract_audio(input_video, output_audio)

总结:

  1. FFmpeg:最强大的工具,可以通过命令行轻松地提取视频画面和音频流。
  2. MoviePy:适用于 Python 环境中的简单视频编辑操作。
  3. ffmpeg-python:Python 封装的 FFmpeg,可以直接在 Python 中操作,适合自动化脚本。

可以根据自己的需求选择合适的工具来进行视频和音频的分离。如果需要更多的自定义处理,moviepyffmpeg-python 可以提供更多灵活性,而如果只是简单的分离任务,FFmpeg 的命令行方式是最直接且高效的。

funclip api识别音频字幕

FunClip是一款阿里巴巴开源的视频字幕识别工具,支持api调用,当前获取到了原视频和原视频的音频后,直接调用FunClip提供的api,等待一两分钟即可识别完成,具体的代码

def __generate_subtitle(video_path, audio_path):
    audio_path = __read_audio(video_path, audio_path)
    client = Client("http://127.0.0.1:7860/")
    result = client.predict(
        video_input={"video": file(video_path)},
        audio_input=file(audio_path),
        hotwords="",
        output_dir=" ",
        api_name="/mix_recog"
    )
    print(result)
    return result

本地启动FunClip项目

参数说明

  • http://127.0.0.1:7860/,是本地启动FunClip项目的服务器访问地址
  • video_path,表示本地视频的绝对路径、相对路径或网络的视频url地址
  • audio_path,同理,表示音频的绝对路径、相对路径或网络的音频url地址

验证测试的效果,resul返回的是一个tuple数组,第一个参数是文字信息,第二个参数是字幕信息

最后,我们安装上一篇文章《python实现原视频自动添加字幕功能,字幕跟随声音自动显示》介绍的方法就可以给原视频添加字幕了。

当前文章价值9.56元,扫一扫支付后添加微信提供帮助!(如不能解决您的问题,可以申请退款)

你可能感兴趣的文章

来源:每日教程每日一例,深入学习实用技术教程,关注公众号TeachCourse
转载请注明出处: https://teachcourse.cn/3702.html ,谢谢支持!

资源分享

Android开发Service BroadcastReceiver Handler获取当前位置 Android开发Service Broadcas
014-wordpress如何实现配置CORS策略来限制哪些域可以访问你的API 014-wordpress如何实现配置COR
php详细介绍正则表达式实际用法 php详细介绍正则表达式实际用法
007-wordpress防止文章被爬取,编码实现 007-wordpress防止文章被爬取,编

评论已关闭!