【问题标题】:Converting several video files into audio with MoviePy使用 MoviePy 将多个视频文件转换为音频
【发布时间】:2021-07-02 17:50:53
【问题描述】:

我一直在尝试创建一个 for 循环,Python 在该循环中遍历文件夹中的所有视频文件,并将每个单独的视频文件转换为新的音频文件
我知道执行此操作的有效代码存在,但仅适用于单个文件。

这是我的代码:

import moviepy
import os
import moviepy.editor 
import tempfile

pathdir = "path/to/dir"

for filename in os.listdir(pathdir):
    filename.endswith(".mkv")
    print(filename)
        
    video = moviepy.editor.VideoFileClip(filename)
    audio = video.audio
    audio.write_audiofile(filename + ".wav")
    
else:
    print("Finished conversion")

这就是出现的情况 - 请注意打印了正确的文件名,从而被识别。

runfile('path/to/dir/convert video to audio script.py', wdir='path/to/dir/')
fg_av_ger_seg0.mkv
Traceback (most recent call last):

OSError: MoviePy error: the file fg_av_ger_seg0.mkv could not be found!
Please check that you entered the correct path.

供您参考,这是它所基于的代码,它可以正常工作,但仅适用于单个文件:

import moviepy.editor

video = moviepy.editor.VideoFileClip('sample.mp4')
audio = video.audio
audio.write_audiofile('audio.mp3')

感谢您的帮助。我是初学者,所以如果错误是基本的,我提前道歉! :)

【问题讨论】:

  • 什么是path/to/dir?这是一条真实的路径,还是你隐藏了真实的路径?你为什么使用runfile?尝试使用 PyCharm 或 Spyder 等 IDE 调试代码。
  • 你好,我被隐藏了真实路径!我以为这不是必需的,也许我错了哈哈?第二组信息是返回的错误!从运行文件到请检查的所有内容。我实际上正在使用 Spyder!

标签: python audio video moviepy video-conversion


【解决方案1】:

看起来是路径问题...

  • filename.endswith(".mkv") 的行应该是 if filename.endswith(".mkv"):
    您还应该将路径与文件名连接起来:

     filename = os.path.join(pathdir, filename)  # Prints: path/to/dir/fg_av_ger_seg0.mkv
    
  • 您可以使用glob.glob提前过滤列表,而不是列出所有文件并查找以.mkv结尾的文件:

     mkv_filenames_list = glob.glob(os.path.join(pathdir, "*.mkv"))
    
  • 建议将.mkv 扩展名替换为.wav 扩展名(不仅仅是添加.wav):

     wav_file_name = filename.replace('.mkv', '.wav')
    
  • 确保 MKV 文件位于正确的路径中,并且您具有文件的读取权限和文件夹的写入权限。


这是一个完整的代码示例(更改pathdir,或将 Python 脚本与 MKV 文件放在同一文件夹中):

import moviepy
import os
import glob
import moviepy.editor 

pathdir = "."

# Get a list of all the files with .mkv extension in pathdir folder.
mkv_filenames_list = glob.glob(os.path.join(pathdir, "*.mkv"))

for filename in mkv_filenames_list:
    print(filename)
        
    video = moviepy.editor.VideoFileClip(filename)
    audio = video.audio

    # Some of my MKV files are without audio.
    if audio is not None:
        wav_file_name = filename.replace('.mkv', '.wav')  # Replace .mkv with .wav
        audio.write_audiofile(wav_file_name)
else:
    print("Finished conversion")

【讨论】:

  • 您好Rotem,非常感谢您的指正!效果很好,感谢您的时间和帮助!万事如意
猜你喜欢
  • 2021-06-29
  • 1970-01-01
  • 2023-01-26
  • 2021-08-17
  • 2020-08-25
  • 2016-01-31
  • 2018-05-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多