我刚刚开始使用 FFMpeg,并尝试使用带有背景图像的图像创建视频幻灯片。背景不会改变,只有图像会改变。
类似如下:
我有以下内容
"ffmpeg -framerate 1/5 \
-start_number 1 \
-i "C:/test/%03d.jpg" \
-c:v libx264 \
-r 30 "C:/test/video.mp4"
这对于使用图片创建幻灯片非常有效,但是当我尝试使用以下命令(覆盖)为每张图片添加背景图像时。
"ffmpeg -framerate 1/5 \
-start_number 1 \
-i "C:/test/%03d.jpg" \
-vf 'movie=C:/test/bg.jpg [over], [in][over] overlay'
-c:v libx264 \
-r 30 "C:/test/video.mp4"
这是我的错误日志:
ffmpeg version N-69587-g15a8846 Copyright (c) 2000-2015 the FFmpeg developers
built with gcc 4.9.2 (GCC)
configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-
bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-lzma --enable-decklink --enable-zlib
libavutil 54. 18.100 / 54. 18.100
libavcodec 56. 21.102 / 56. 21.102
libavformat 56. 19.100 / 56. 19.100
libavdevice 56. 4.100 / 56. 4.100
libavfilter 5. 9.103 / 5. 9.103
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 1.100 / 1. 1.100
libpostproc 53. 3.100 / 53. 3.100
Trailing options were found on the commandline.
Input #0, image2, from 'C:/test/%03d.jpg':
Duration: 00:00:15.00, start: 0.000000, bitrate: N/A
Stream #0:0: Video: mjpeg, yuvj420p(pc, bt470bg/unknown/unknown), 768x1024 [SAR 1:1 DAR 3:4], 0.20 fps, 0.20 tbr, 0.20 tbn, 0.20 tbc
At least one output file must be specified
答案更新:
<cfscript>
try {
runtime = createObject("java", "java.lang.Runtime").getRuntime();
command = '#ffmpegPath#' &
' -loop 1' &
' -framerate 1' &
' -i "C:/test/bg.jpg"' &
' -framerate 1/5 -start_number 1' &
' -i "C:/test/%03d.jpg"' &
' -filter_complex "overlay=(W-w)/2:(H-h)/2,format=yuv420p"' &
' -c:v libx264' &
' -r 30' &
' -movflags +faststart' &
' -shortest' &
' "C:/test/out.mp4"';
process = runtime.exec(#command#);
results.errorLogSuccess = processStream(process.getErrorStream(), errorLog);
results.resultLogSuccess = processStream(process.getInputStream(), resultLog);
results.exitCode = process.waitFor();
}
catch(exception e) {
results.status = e;
}
</cfscript>
答案1
具有静态图像背景的幻灯片
您不需要使用movie
源过滤器,-filter_complex
而是使用-vf
。
ffmpeg \
-loop 1 \
-framerate 1 \
-i bg.jpg \
-framerate 1/5 \
-i "C:/test/%03d.jpg" \
-filter_complex "overlay=(W-w)/2:(H-h)/2:shortest=1,format=yuv420p" \
-c:v libx264 \
-r 30 \
-movflags +faststart \
output.mp4
format=yuv420p
将确保广泛兼容的“像素格式”或色度子采样方案,这在使用时添加很有用libx264
。-movflags +faststart
编码完成后将重新定位部分数据,这样观众就可以在文件完全下载之前开始播放。例如,如果您自己托管文件并将其放在网站上,这将非常有用。
有音频
ffmpeg \
-loop 1 \
-framerate 1 \
-i bg.jpg \
-framerate 1/5 \
-i "C:/test/%03d.jpg" \
-i audio.mp3 \
-filter_complex "overlay=(W-w)/2:(H-h)/2:shortest=1,format=yuv420p" \
-c:v libx264 \
-r 30 \
-c:a aac -strict experimental \
-b:a 192k \
-movflags +faststart \
-shortest
output.mp4
带有文本
可以使用过滤器添加文本drawtext
。
ffmpeg \
-loop 1 \
-framerate 1 \
-i bg.jpg \
-framerate 1/5 \
-i "C:/test/%03d.jpg" \
-i audio.mp3 \
-filter_complex "overlay=(W-w)/2:(H-h)/2:shortest=1,drawtext=fontsize=30:fontfile=FreeSerif.ttf:text='hello world':x=(w-text_w)/2:y=10,format=yuv420p" \
-c:v libx264 \
-r 30 \
-c:a aac -strict experimental \
-b:a 192k \
-movflags +faststart \
-shortest \
output.mp4
查看drawtext
过滤文档以获得更多选择。
有边框
这drawbox
筛选可用于在叠加图像周围绘制白色边框。请注意,我开始命名每个过滤器的输入和输出,然后使用 引用最终的过滤结果-map
。
ffmpeg \
-loop 1 \
-framerate 1 \
-i bg.jpg \
-framerate 1/5 \
-i "C:/test/%03d.jpg" \
-i audio.mp3 \
-filter_complex "[1:v]drawbox=t=5:c=white[fg];[0:v][fg]overlay=(W-w)/2:(H-h)/2:shortest=1,drawtext=fontsize=30:fontfile=FreeSerif.ttf:text='hello world':x=(w-text_w)/2:y=10,format=yuv420p[v]" \
-map "[v]"
-map 0:a
-c:v libx264 \
-r 30 \
-c:a aac -strict experimental \
-b:a 192k \
-movflags +faststart \
-shortest \
output.mp4