【原创】【Python】二十多行代码,实现MP4文件批量转码成MP3
本帖最后由 为了青春 于 2019-5-11 22:18 编辑需求背景:
最近为了学python爬虫,在论坛里找了不少视频教程,非常棒。但有时看视频不方便,就想着能否把视频批量转码成音频,这样在乘坐地铁公交的时候也能学习了。
解决路径:
有了需求,我首先在论坛里搜了下有没有这样的软件,还真有,我也下了,但体验并不是特别好。
然后我其实知道QQ影音是带有转码的功能的,功能很强大,但有个缺陷就是每次只能添加一个文件夹下的视频,并不能直接转码父文件夹下包括子文件夹内的文件。
功能介绍:
1、批量将父文件夹下及子文件夹内所有的MP4或者avi格式的文件自动转码成MP3音频格式;
2、自动删除MP4格式的文件;(加此段代码的目的是方便直接将转码后的文件夹下的音频文件拷入手机,而不拷视频文件,如不需要自行删除。)
代码关键部分说明:
既然现有的工具并不能解决我的需求,那我就准备自己用python实现个,刚好练练手。说干就干。
1、glob模块 官方文档
主要功能是匹配所有的符合条件的文件,并将其以list的形式返回。通过pip安装即可。
2、pydub模块官方文档
主要功能是处理音频文件,依赖于ffmpeg,所以还需要安装ffmpeg。通过pip安装即可。
3、ffmpeg官方文档
视频转音频就是依靠这个。
从上面的网站下载后,将path添加到环境变量中去,具体操作可以参考链接
下面就是代码了参考链接。
先申明下,我也是个小白,代码写的丑,请轻喷。
import os
import glob
from pydub import AudioSegment
wenjianjia = []
path = input('请输入要转码的父文件夹路径:')
for root, dirs, files in os.walk(path):
wenjianjia.append(root)
wjj = wenjianjia
for dir in wjj:
video_dir = dir
extension_list = ('*.mp4', '*.flv')
i=1
os.chdir(video_dir)
for extension in extension_list:
for video in glob.glob(extension):
mp3_filename = os.path.splitext(os.path.basename(video)) + '.mp3'
AudioSegment.from_file(video).export(mp3_filename, format='mp3')
print('已转码', str(i) ,'个视频!')
i += 1
for infile in glob.glob(os.path.join(video_dir, '*.mp4')):
os.remove(infile)
如果觉得好用的话就给个免费评分吧,谢了!
白晓生 发表于 2019-5-11 22:49
这波分享真的蛮给力的,有些时候真的是心有余而力不足,不方便看MP4想提取音频还得找专门的软件,利益市场 ...
谢谢支持,觉得不错的话希望能得到免费评分。:lol
我看附件下载的人挺多,但评论的还就你一个。{:1_889:} 一颗草zZ 发表于 2019-11-5 22:12
Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work
但是已经在cmd中用pip instal ...
这个帖子可以解决你的问题:https://blog.csdn.net/qq_38161040/article/details/91654183 这波分享真的蛮给力的,有些时候真的是心有余而力不足,不方便看MP4想提取音频还得找专门的软件,利益市场化现在个别权限都需要会员才能操作,感谢楼主分享 支持原创,感谢分享源码,学以致用好棒!
热心值+1 吾爱币+1
今个没分了,先发个帖,明天好找。{:301_1000:} 楼主优秀 向楼主学习了,代码虽然短,但是挺实用! 向楼主学习了,谢谢 感谢楼主分享 这些个库都不知道,看来还要学会多逛论坛多百度啊~!