Python使用静态图像将mp3转换为mp4

Python使用静态图像将mp3转换为mp4,python,unix,ffmpeg,Python,Unix,Ffmpeg,我确实有x文件,其中包含mp3文件列表,我希望将每个mp3文件转换为mp4文件,并带有静态.png照片 似乎这里唯一的方法是使用ffmpeg,但idk如何实现它 我制作了一个脚本来输入mp3文件夹和一个.pngphoto` 然后它将创建一个新的文件夹x-converted,在那里我想将每个mp3转换成mp4,使用静态png和相同的名称,例如file1.mp3变成file1.mp4 这是我的密码: import os import sys from pathlib import Path impo

我确实有
x
文件,其中包含
mp3
文件列表,我希望将每个
mp3
文件转换为
mp4
文件,并带有
静态
.png
照片

似乎这里唯一的方法是使用
ffmpeg
,但idk如何实现它

我制作了一个脚本来输入
mp3
文件夹和一个
.png
photo`

然后它将创建一个新的文件夹
x-converted
,在那里我想将每个
mp3
转换成
mp4
,使用静态
png
和相同的名称,例如
file1.mp3
变成
file1.mp4

这是我的密码:

import os
import sys
from pathlib import Path
import shutil

if len(sys.argv) != 3 or not sys.argv[2].endswith("png"):
    print("Make sure to provide two arguments only\nSecond arugment should be .png")
    exit()


def CheckFile():
    try:
        files = []
        for path in os.listdir(sys.argv[1]):
            full_path = os.path.join(sys.argv[1], path)
            if os.path.isfile(full_path):
                files.append(full_path)
        mp3 = [x for x in files if x.endswith(".mp3")]
        if len(mp3) >= 1:
            return mp3, sys.argv[2], sys.argv[1]
        else:
            print(
                "Make Sure That You've at least 1 Mp3 file")
            exit()
    except FileNotFoundError:
        print("Sorry, This File Is Not Exist!")
        exit()


def Convert():
    mp3, jpg, name = CheckFile()
    name = f"{Path(name).name}-converted"
    shutil.rmtree(name, ignore_errors=True)
    os.mkdir(name)
    os.chdir(name)
    # from here i don't know how to use `ffmpeg`


Convert()

某些库,如
ffmpy
&
ffmpeg-python
可以使您使用python操作ffmpeg,请尝试这些库。(我很久以前就使用了ffmpeg python,它工作得很好)

ffmpeg-loop 1-framerate 1-I image.png-I audio.mp3-map 0:v-map 1:a-r 10-vf“scale='iw-mod(iw,2):'ih-mod(ih,2)',format=yuv420p'-movflags+faststart-shortest-fflags+shortest-max_interleave\u delta 100M output.mp4
  • -loop 1
    使
    input.png
    无限循环
  • -framerate 1
    input.png
    输入帧速率设置为1 fps
  • -map 0-map 1:a
    image.png
    选择视频,仅从
    audio.mp3
    选择音频。如果
    image.png
    比MP3附带的任何相册/封面艺术都小,则需要使用此选项。否则,它可能会选择相册/封面艺术。有关更多信息,请参阅
  • -r 10
    将输出帧速率设置为10 fps。将输入设置为1 fps,将输出设置为10 fps有两个原因:
    • 与最初将输入设置为10 fps相比,输入为1 fps并将帧复制为10 fps的速度更快。它使编码速度更快
    • 大多数玩家不能在~6 fps左右的速度下玩任何游戏。10是一个安全值
  • scale='iw-mod(iw,2)':'ih-mod(ih,2)
    用于确保输出宽度和高度都可以被2整除,这是某些编码器的要求。这允许您使用任意大小的图像作为输入。否则会出现错误:
    宽度不能被2整除
  • format=yuv420p
    使输出使用YUV 4:2:0色度子采样以实现播放兼容性
  • -movflags+faststart
    使视频开始播放得更快
  • -shortest
    使输出与
    audio.mp3
    一样长。这是必需的,因为使用了
    -loop 1
  • -fflags+shortest-max_interleave_delta 100M
    -shortest
    相关,在某些情况下由于ffmpeg的怪异行为而需要。请参阅以获取解释

@llogan只是
ffmpeg
部分。@llogan我已经查看了您的个人资料,似乎您对
ffmpeg
非常了解。希望你能帮助我。提前谢谢。非常感谢。这样的答案真的应该在文档中。这是我找到的最好的解释,如果你不介意检查的话,因为我注意到视频的长度变长了。这是最重要的,也是最重要的。我使用了与您所解释的相同的命令,没有进行任何编辑。@aԋɱҽԃαМєιcαη参见更新的答案(最后一点)。顺便说一句,视频不错。