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αη参见更新的答案(最后一点)。顺便说一句,视频不错。