python - 从mp4中提取wav
问题描述
我有这段代码,我希望它从我文件夹中的所有 .mp4 生成 .wav 文件
import os
import ffmpy
inputdir = '/Users/x/y/videos'
outputdir = '/Users/x/y/video_audio'
for filename in os.listdir(inputdir):
actual_filename = filename[:-4]
if(filename.endswith(".mp4")):
os.system('ffmpeg -i {} -acodec pcm_s16le -ar 16000 {}/{}.wav'.format(filename, outdir, actual_filename))
else:
continue
但我得到这个错误:
ffmpeg version 4.1.4 Copyright (c) 2000-2019 the FFmpeg developers
built with Apple LLVM version 10.0.1 (clang-1001.0.46.4)
configuration: --prefix=/usr/local/Cellar/ffmpeg/4.1.4_2 --enable-shared --enable-pthreads --enable-version3 --enable-avresample --cc=clang --host-cflags='-I/Library/Java/JavaVirtualMachines/adoptopenjdk-12.0.1.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/adoptopenjdk-12.0.1.jdk/Contents/Home/include/darwin' --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libmp3lame --enable-libopus --enable-librubberband --enable-libsnappy --enable-libtesseract --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-videotoolbox --disable-libjack --disable-indev=jack --enable-libaom --enable-libsoxr
libavutil 56. 22.100 / 56. 22.100
libavcodec 58. 35.100 / 58. 35.100
libavformat 58. 20.100 / 58. 20.100
libavdevice 58. 5.100 / 58. 5.100
libavfilter 7. 40.101 / 7. 40.101
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 3.100 / 5. 3.100
libswresample 3. 3.100 / 3. 3.100
libpostproc 55. 3.100 / 55. 3.100
Avengers_Endgame.mp4: No such file or directory
我不确定如何解决这个问题,因为文件夹和文件存在。
解决方案
当您向 ffmpeg 提供输入文件时,除了在将输出写入目录(outputdir)时指定的名称之外,您还应该指定文件的路径。所以你的代码应该像
import os
import ffmpy
inputdir = '/Users/x/y/videos'
outputdir = '/Users/x/y/video_audio'
for filename in os.listdir(inputdir):
actual_filename = filename[:-4]
if(filename.endswith(".mp4")):
os.system('ffmpeg -i {}/{} -acodec pcm_s16le -ar 16000 {}/{}.wav'.format(inputdir, filename, outputdir, actual_filename))
else:
continue
推荐阅读
- tensorflow - 张量的值正在发生变化
- php - mpdf unicode 以白色输出文本(不可见)
- c++ - 如何从 txt 文件 c++ 中提取括号之间的数字?
- android - RecyclerView SnapHelper 找到被捕捉项目的确切位置
- java - (Java) 判断一个特定数字是否在 ArrayList 中出现两次
- circleci - 提交不会触发circleci中的构建
- assembly - x86 汇编器对存储在寄存器中的布尔值进行分支
- linux - 如何在 Linux 上部署使用 Create-react-app 构建的 ReactJS 应用程序?
- css - 无法使用 css 更改背景颜色
- java - itext7 - 如何在写入期间过滤渲染事件