为YouTube创建带音频和静态图像的视频


23

我正在运行以下命令:

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可能只看视频轨道的长度,并且由于图片只有一帧之长或其他原因,也许让它感到烦闷。

Answers:


13

这是起作用的:

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
对我不起作用。我看了一帧电影。
帕维尔·弗拉索夫

我现在为我工作。
molnarg 2014年


2

我采用了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

谢谢。我跑了,ffmpeg -loop 1 -shortest -r 0.1 -i audio.mp3 -i image.jpg output.avi但发现“找不到选项循环”。有任何想法吗?
Panic Panic

@col如果您仍然感兴趣:您需要在输入图像之前而不是在音频之前使用loop选项。
slhck

这对我ffmpeg -i <audio file> -loop 1 -i <image file> -shortest <output video file>
有用

2

与avconv:

avconv -i input.mp3 -loop 1 -f image2 -i logo.png -r 30 -s 640x480 -ab 128k -ar 44100 -ac 1 -ss 00:00:00.000 -t 01:02:03.123 foo.ogv

欢迎使用SuperUser,谢谢您的回答。有关您的建议及其原因的更多详细信息。
布拉德·帕顿

1
响应是因为不建议使用ffmpeg
ZiTAL

2
没有ffmpeg项目正在进行。发生争执导致不赞成使用此消息。参见stackoverflow.com/questions/9477115/…–
布拉德·巴顿

2
使用-shortest输出选项而不是手动声明时间(如果可能,也可以使用ffmpeg代替 avconv)。
llogan's

2
制作了bash脚本,以防万一有人感兴趣
Dallaylaen '16

0

经过大量实验后,我可以使用它:https : //www.youtube.com/watch?v=qjlDT819Q3s

  1. 按照https://trac.ffmpeg.org/wiki/Create%20a%20video%20slideshow%20from%20images将图像转换为视频:

    ffmpeg -framerate 1/20 -i png/img-%03d.png -c:v libx264 -vf "fps=25,format=yuv420p" png.mp4

    在这里,我使用几张图片,每20秒更改一次。

  2. 按照https://trac.ffmpeg.org/wiki/Concatenate连接上述视频的足够多的副本,以跨越音频的持续时间。其他解决方案,例如期望ffmpeg -i wav.wav -i png.mp4 youtube.mp4做正确的事,最终被YouTube拒绝(而且,像VLC这样的播放器也很困惑,无法正确寻找)。我的猜测是,需要调整副本中的时间位置ffmpeg,除非将它们并置,否则不需要这样做:

    ffmpeg -f concat -i pngs.txt -c copy pngs.mp4

    (文件pngs.txt是手工制作的,其中包含所需的副本数:副本=音频长度/视频长度)

  3. 根据https://www.virag.si/2015/06/encoding-videos-for-youtube-with-ffmpeg/将您的音频与2中获得的视频混合:

    ffmpeg -i pngs.mp4 -i wav.wav -shortest -codec:v libx264 -crf 21 -bf 2 -flags +cgop -pix_fmt yuv420p -codec:a aac -strict -2 -b:a 384k -r:a 48000 -movflags faststart youtube.mp4

现在该文件youtube.mp4应被YT接受。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.