Python+FFmpeg音视频格式转换

写在前面

其实这个不全是python的实现的,主要实现由一款名为 FFmpeg 的软件工具实现,单用FFmpeg这款工具软件是可以实现视频格式的,但是这个工具只能在命令行下使用,所以使用起来会给人以 挺麻烦 的感觉。python中有一个os的模块,利用这个模块,可以在python程序中执行命令行中的命令。这样用python可以编写比较人性化的交互页面,这样只需要传入视频文件的原地址,做一些选择,就可以轻松的按自己的需求实现格式转换。

本文基于Windows下,用Pycharm进行程序编写。

FFmpeg工具软件

FFmpeg官网地址 https://www.ffmpeg.org/

FFmpeg下载地址 https://www.ffmpeg.org/download.html

这个工具好像可以实现各种音视频格式的转换,甚至可以从视频中提取音频。据说FFmpeg是很多视频播放器和转码工具的内核。( https://www.jianshu.com/p/7ed3be01228b )

使用方式,调用cmd命令行(可以通过Win+R搜索cmd,也可以通过Win+s搜索cmd),操作命令如下

ffmpeg -i 输入文件全路径 输出文件全路径

for example

ffmpeg -i C:\Users\Administrator\Desktop\wk.mp4 C:\Users\Administrator\Desktop\wk.mp3

没毛病,这是可以实现的,这样既可从.mp4视频文件中提取出音频,当然不同格式的视频转换也是可以实现。而且,FFmpeg的强大远不止于此,它可以从视频中截图、截取部分视频、合并视频、设置音频的码率……具体可以参考 https://www.ffmpeg.org/ffmpeg.html (英文的。。。)

python编程调用FFmpeg

使用python编程电泳FFmpeg实现格式转换。

# 导入os模块
import os

# 定义输入文件路径(其中r是转义字符,为了让 \ 不起作用)
path_in = r'C:\Users\Administrator\Desktop\wk.mp4'
# 定义输出文件路径
path_out = r'C:\Users\Administrator\Desktop\wk.mp3'
# 拼接cmd下的命令
cmd = 'ffmpeg -i '+path_in+' '+path_out
# 执行cmd命令
os.system(cmd)

程序的执行需要时间,但是这个过程不会在pycharm的控制台显示,当看到

就说明程序结束了。

python调用FFmpeg进阶

这里说的进阶是做个页面出来,调用“选择文件”的功能直接选择要转格式的文件,并指定要输出的目标地址。输出文件名默认是输入文件的名称,提交之后可以自动完成转换。效果大概是这样:

输入文件直接输入要转格式的文件,输出位置选择格式转换后的存放文件夹,目标格式通过键入的方式输入。

首先把转换格式的功能封装成函数,传入三个参数,输入文件、输出位置、和目标格式,在函数内拼接并执行命令。编写convert.py,代码如下

import os

def convert(pin, pout, aim):
    # 获得文件名
    fname = pin.split('/')[-1].split('.')[0]
    # 拼接命令
    cmd = 'ffmpeg -i ' + pin + ' ' + pout+'/'+fname+'.'+aim
    # 执行命令
    os.system(cmd)

编写窗口文件windows.py,代码如下

import tkinter as tk
from tkinter.filedialog import *	# tkinter下的文件处理模块
from video_format_convert.convert import convert

# 点击“选择文件”按钮调用该功能
def selectFilePath():
    path_ = askopenfilename(title='选择文件')	# 选择文件的功能
    pathin.set(path_)

# 点击“选择文件夹”调用该功能
def selectDirecPath():
    path_ = askdirectory(title='选择文件夹')		# 选择文件夹的功能
    pathout.set(path_)

# 点击提交执行的功能
def executeit():
    hint.set('converting . . .')
    convert(pathin.get(), pathout.get(), aimf.get())
    hint.set('convert finished')

# 生成窗口
window = tk.Tk()
window.title('格式转换')
window.geometry('450x300')

# 格式转换label
tk.Label(window, text='格式转换').place(x=200, y=10)  # x是从左向右的偏移,y是从上向下的偏移

# 输入文件一行
pathin = tk.StringVar()     # 定义变量
tk.Label(window, text='输入文件:').place(x=50, y=50)
entry_pathin = tk.Entry(window, textvariable=pathin).place(x=160, y=50)     # 输入框
btn_pathin = tk.Button(window, text='选择文件', command=selectFilePath).place(x=340, y=45)  # 按钮

# 输出文件的一行
pathout = tk.StringVar()
tk.Label(window, text='输出位置:').place(x=50, y=100)  # 从左偏,从上偏
tk.Entry(window, textvariable=pathout).place(x=160, y=100)
tk.Button(window, text='选择文件夹', command=selectDirecPath).place(x=335, y=95)

# 目标格式的一行
aimf = tk.StringVar()
tk.Label(window, text='目标格式:').place(x=50, y=150)  # 从左偏,从上偏
tk.Entry(window, textvariable=aimf).place(x=160, y=150)

# 提交按钮
tk.Button(window, text='  提 交  ', command=executeit).place(x=200, y=190)

# 提示区域
hint = tk.StringVar()
hint.set('')
tk.Label(window, textvariable=hint).place(x=190, y=240)

# 不停的刷新显示
window.mainloop()

其实这里面还有很多有待提升的,比如“目标格式”的输入框可以做成下拉式的,把可选的格式提前写进程序里,通过选择而不是键入的方式会更加的便捷;在提交执行阶段因为执行需要时间,在执行期间画面会卡死,直到执行完成才会回复;画面卡死的问题倒是可以用 os.popen(‘命令’)替代,用这个函数会把格式转换的执行移到后台,这样从画面上显示程序已经完成了,实际上还在运行,能力有待加强 /手动尴尬

这里只是简单的写了一下,希望能抛砖引玉。

tkinter教程参考 https://morvanzhou.github.io/tutorials/python-basic/tkinter/

python调用FFmpeg再进阶

这个就看你自己发挥了,such as做一个做成一个后端系统,部署在你的机器上(或者你的服务器上)通过web页面进行访问。如果你还有其他的工具程序也可以放在这个后台上,通过选择调用自己写的不同工具,这样就做到了一劳永逸的效果。后来我把它封装成.exe可执行文件,参见 使用pyinstaller将Python程序封装成可执行文件

  • 8
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
使用PythonFFmpeg可以将视频换为音频。你可以使用ffmpy3库来实现这个功能。下面是一个示例代码,可以将指定文件夹下的所有MP4视频文件换为WAV音频文件: ```python import os from ffmpy3 import FFmpeg filepath = r"D:\data" # 视频文件夹路径 os.chdir(filepath) filename = os.listdir() # 获取文件夹下的所有文件名称 outputpath = r"D:\output" # 输出文件夹路径 os.chdir(outputpath) for i in range(len(filename)): changefile = filepath + "\\" + filename\[i\] outputfile = outputpath + "\\" + filename\[i\].replace('mp4', 'wav') ff = FFmpeg( inputs={changefile: None}, outputs={outputfile: '-vn -ar 44100 -ac 2 -ab 192 -f wav'} ) ff.cmd ff.run() ``` 这段代码会将指定文件夹下的所有MP4视频文件换为WAV音频文件,并保存到指定的输出文件夹中。你可以根据自己的需求修改文件夹路径和输出文件格式。 #### 引用[.reference_title] - *1* *2* [Python使用ffmpeg合成视频音频](https://blog.csdn.net/weixin_46281427/article/details/124228056)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Python 采用ffmpeg视频文件音频文件](https://blog.csdn.net/qq_34140940/article/details/87934016)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BBJG_001

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值