我正在运行以下命令:
ffmpeg -i audio.mp3 -ar 44100 -f image2 -i logo.jpg -r 15 -b 1800 -s 640x480 foo.mov
它成功输出了包含我录制的音频和图像的视频。
当我尝试将其上传到 YouTube 时,无论我尝试哪种格式,它都无法处理:.mov、.avi、.flv、.mp4
上面的设置中是否遗漏了某些可以生成 Youtube 可以接受的格式的设置?我尝试查看 ffmpeg 文档,但还是无法理解。
我做了一个实验,将一段 2 秒的视频与一段 30 秒的 mp3 放在一起。当我上传到 YouTube 时,生成的视频只有 2 秒长。因此,YouTube 可能只根据视频轨道来确定长度,而由于图片只有一帧长或其他原因,这也许会让它变得糟糕。
答案1
以下是有效的方法:
ffmpeg -i audio.mp3 -f image2 -loop 1 -i logo.jpg
-r 15 -s 640x480 \
-c:v libx264 -crf 18 -tune stillimage -preset medium \
-shortest foo.mov
具体来说,该loop
选项会将图像复制为帧。它还需要一个shortest
选项来阻止文件不断增长(这样它会将其截断为最短流的长度 - 此处为音频文件)。
该r
选项可更改帧速率并crf 18
设置质量(此处使用较高的值可降低视频质量)。有关更多详细信息,请参阅此处:FFmpeg:终极视频和音频处理工具
答案2
来自另一个论坛的一段对我有用的代码:
ffmpeg -loop 1 -r ntsc -i image.jpg -i song.mp3 -c:a copy -c:v libx264 -preset fast -threads 0 -shortest output.mkv
答案3
我采用了 Pavel 的代码,它也适用于我,并通过修剪不必要的选项来缩短它:
ffmpeg -loop 1 -shortest -i <audio file> -i <image file> <output video file>
这是一种通用形式,可以使用任何图像和音频文件作为输入并生成视频文件作为输出。
也就是说,由于您的视频流将由无限重复的单个图片组成,因此您可以使用 设置较低的帧速率(即一秒钟内出现的图像数量)-r
。请注意,并非所有输出容器都允许低帧速率。一个允许低帧速率的是avi
,因此您可以这样做:
ffmpeg -loop 1 -shortest -r 0.1 -i <audio file> -i <image file> output.avi
这将创建一个帧率为 0.1(即每 10 秒一个图像)的视频文件,而不是默认的 25。这会影响文件大小,但不会影响视频质量。最后,您可以使用设置音频比特率以获得更好的音频质量-ab
。这是我实际用于为 YouTube 制作此类视频的命令:
ffmpeg -loop 1 -shortest -r 0.1 -i <audio file> -i <image file> -ab 128k output.avi
答案4
为了添加一些简短的内容,这对我有用:
ffmpeg -i audio.wav -loop 1 -i image.png -shortest foo.flv
选项的顺序很重要。