gpt4 book ai didi

Python 将 mp3 转换为带有静态图像的 mp4

转载 作者:行者123 更新时间:2023-12-04 22:45:26 26 4
gpt4 key购买 nike

我确实有 x 文件,其中包含 mp3 文件列表,我想将每个 mp3 文件转换为 mp4 文件,包含一张 static .png 照片。

似乎这里唯一的方法是使用 ffmpeg 但不知道如何实现它。

我编写了脚本来输入 mp3 文件夹和一张 .png 照片`。

然后它将创建新文件夹 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()

最佳答案

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_delta 100M output.mp4
  • -loop 1 使 input.png 无限循环。
  • -framerate 1input.png 输入帧速率设置为 1 fps。
  • -map 0 -map 1:aimage.png 中选择视频,仅从 audio.mp3 中选择音频。如果 image.png 小于附加到 MP3 的任何专辑/封面艺术,则需要这样做。否则它可能会选择专辑/封面。参见 FFmpeg Wiki: Map了解更多信息。
  • -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)' 使用 scale filter确保输出宽度和高度都可以被 2 整除,这是某些编码器的要求。这允许您使用任意大小的图像作为输入。否则你会得到错误:宽度不能被 2 整除
  • format=yuv420p format filter使输出使用 YUV 4:2:0 色度子采样以实现播放兼容性。
  • -movflags +faststart 使视频开始播放更快。
  • -shortest 使输出与 audio.mp3 一样长。这是必需的,因为使用了 -loop 1
  • -fflags +shortest -max_interleave_delta 100M-shortest 相关,并且在某些情况下由于 ffmpeg 的奇怪行为而需要。参见 My ffmpeg output always add extra 30s of silence at the end寻求解释。

关于Python 将 mp3 转换为带有静态图像的 mp4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64375367/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com