我的网站上有很多 MP3 文件,我决定将它们上传到 Youtube,但不幸的是,YouTube 不允许我这样做。它只要求视频格式。
我如何将这些 MP3 转换为视频,并将同一组图像(一张或多张图像)添加到生成的视频格式中。
我需要批量执行此操作,而不是单独执行,我有数百个 MP3 文件。
它可以是基于 Windows 或基于 Linux 的应用程序。
答案1
有一些关于使用 FFmpeg 为 YouTube 编码带有静态图像的音频的信息,这里以及在 Windows 中进行批量转换的一些建议,这里。
至于编码,我发现这是有效的:
ffmpeg -loop 1 -r 1 -i pic.jpg -i audio.mp3 -c:a copy -shortest -c:v libx264 output.mp4
编码-c:v libx264
大大减少了输出文件的大小,如下所述:https://superuser.com/a/1472572/128124
答案2
您还可以考虑使用简单的 bash oneliner 代替 python 脚本 -
for i in *.mp3; do ffmpeg -v quiet -i "picture.jpg" -i "$i" -shortest -acodec copy "`sed 's/mp3/mp4/g'<<<$i`"; done
这会将当前目录中的所有 mp3 文件转换为带有 picture.jpg 的 mp4 视频。
将 flac 转换为 mp3 需要
for i in *.flac; do ffmpeg -v quiet -i "$i" -ab 320k -ac 2 -ar 48000 "`sed 's/flac/mp3/g'<<<$i`"; done
注意“-v 安静”,这会堵住 ffmpeg 的大嘴巴,并且在 $i 和sed
- 周围加上双引号,这将确保它不会因包含空格的文件名而失败。
提示:转换为视频需要相当长的时间(至少对我来说)。尝试使用-线程 4(当然也可以是其他值。在单核 CPU 上这没有任何意义)
编辑:我发现“-loop 1”(其他人建议的)会创建循环(真令人惊讶!),而循环实际上是无限的。在我的 gentoo 上,这意味着它会吃掉你所有美味的食物。如果没有“-loop 1”,它也能正常工作,所以我建议你使用它。
答案3
Ubuntu 和其他 Linux 系统的一些解决方案位于http://ubuntuforums.org/showthread.php?t=1686664。大多数是 shell 命令或其他一些快速脚本语言,可以循环播放所有 MP3,输出视频文件。然后,您只需将视频文件排队上传到 YouTube 即可。页面上列出的解决方案包括:
FFmpeg,然后将所有 mp3 文件相应地上传到 YouTube
ffmpeg -loop 1 -i picture.jpg -i music.mp3 -shortest -acodec copy video.mp4
Loop,然后上传所有生成的视频文件。Python,转换为 mp4,然后将文件上传到 YouTube
#! /usr/bin/env python
import sys, os
inputOne = sys.argv[1]
inputTwo = sys.argv[2]
for i in sys.argv[1:]:
if '.mp3' in i:
output = i.replace('mp3','mp4')
cmd = 'ffmpeg -loop_input -i "'+inputOne+'" -i "'+inputTwo+'" -shortest -acodec copy "'+output+'"'
os.system(cmd)
它还使用 ffmpeg,并接受音乐和图片作为参数。
答案4
将你的 mp3 文件(或任何你想编码的文件,相应地更改音频格式)复制到一个文件夹中。同时将 ffmpeg 的一个实例放入其中,封面图片标题为herringbone.jpg
。
然后转到 CMD 并导航到该文件夹。
复制此内容:
for %a in (*.mp3) do "ffmpeg" -loop 1 -r 1 -i "Herringbone.jpg" -vcodec mpeg4 -i %a -acodec copy -shortest %a".mp4"
(要粘贴到 CMD 窗口,请单击左上角的命令行窗口。选择编辑/粘贴。)
按回车键。
适用于最新版本的 ffmpeg 编码器(4.1.1)
我想你也可以更改视频格式。只需将 mp4 更改为你想要的格式以及 ffmpeg 支持的任何格式即可。
-shortest
我在另一个论坛上发现了这一点,但直到我切换了脚本中的位置后它才起作用。