在幻灯片视频上使用ffmpeg concat


2

我正在使用ffmpeg从静止图像构建时间流逝动画。 重复第一个图像以创建标题。接下来的步骤是连接标题加上最终视频的时间流逝。标题和时间流逝都很好。创建连接的最终视频不会产生预期的结果。

关于kubuntu 14的ffmpeg版本1.2.6-7。

标题

ffmpeg -framerate 16 -f image2 -i './Header/Sun_20150214_head_%02d.png' -vf "crop=1240:940:40:10" -vf drawtext="fontsize=100:fontcolor=yellow:fontfile=/usr/share/fonts/truetype/freefont/FreeSans.ttf:textfile=./scripts/header_text.txt:x=(w-text_w)/2:y=(h-text_h-line_h)/2" -c:v libx264 -pix_fmt yuv420p -crf 16 -y ./Video/sunspot_20150214_header.mp4

ffmpeg -i ./Video/sunspot_20150214_header.mp4 -vf fade=in:0:30 -crf 24 -y ./Video/sunspot_20150214_header_fade.mp4

它自己的标题可以正常播放并且有很好的淡入淡出效果。

现在为时间流逝:

ffmpeg -r 12 -threads 0 -f image2 -pattern_type glob -i './npy2reg/Sun_20150214_*.png'  -c:v libx264 -crf 16 -vf "crop=1240:940:40:10" -y ./Video/sunspot_20150214_crf16_12fps.mp4

它自己的时间流逝很好。

尝试使用带有指向两个输入文件的指针的concat.txt文件进行concat。 concat.txt文件:

file '/home/gottsch/sunspot_20150214/Video/sunspot_20150214_header_fade.mp4'
file '/home/gottsch/sunspot_20150214/Video/sunspot_20150214_crf16_12fps.mp4'

ffmpeg的命令:

ffmpeg -f concat -i ./scripts/concat.txt -c copy -y  ./Video/sunspot_20150214_crf16_12fps_final.mp4

这给出了我的输出文件 sunspot_20150214_crf16_12fps_final.mp4。 问题:输出文件仅显示标题。

我已经读过ffmpeg concat引擎要求输入视频是相同的格式,我相信当ffmpeg创建它们时。

非常感谢您的帮助。

谢谢, 格特

更新:

我被要求提供以下cmd的控制台输出:

gottsch@ubuntu:~/sunspot_20150214$ ffmpeg -i './Header/Sun_20150214_head_%02d.png' -pattern_type glob -i './npy2reg/Sun_20150214_*.png'
ffmpeg version 1.2.6-7:1.2.6-1~trusty1 Copyright (c) 2000-2014 the FFmpeg developers
  built on Apr 26 2014 18:52:58 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
  configuration: --arch=amd64 --disable-stripping --enable-avresample --enable-pthreads --enable-runtime-cpudetect --extra-version='7:1.2.6-1~trusty1' --libdir=/usr/lib/x86_64-linux-gnu --prefix=/usr --enable-bzlib --enable-libdc1394 --enable-libfreetype --enable-frei0r --enable-gnutls --enable-libgsm --enable-libmp3lame --enable-librtmp --enable-libopencv --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-vaapi --enable-vdpau --enable-libvorbis --enable-libvpx --enable-zlib --enable-gpl --enable-postproc --enable-libcdio --enable-x11grab --enable-libx264 --shlibdir=/usr/lib/x86_64-linux-gnu --enable-shared --disable-static
  libavutil      52. 18.100 / 52. 18.100
  libavcodec     54. 92.100 / 54. 92.100
  libavformat    54. 63.104 / 54. 63.104
  libavdevice    53.  5.103 / 53.  5.103
  libavfilter     3. 42.103 /  3. 42.103
  libswscale      2.  2.100 /  2.  2.100
  libswresample   0. 17.102 /  0. 17.102
  libpostproc    52.  2.100 / 52.  2.100
Input #0, image2, from './Header/Sun_20150214_head_%02d.png':
  Duration: 00:00:02.36, start: 0.000000, bitrate: N/A
Stream #0:0: Video: png, rgb24, 1280x960, 25 fps, 25 tbr, 25 tbn, 25 tbc
Input #1, image2, from './npy2reg/Sun_20150214_*.png':
  Duration: 00:00:01.76, start: 0.000000, bitrate: N/A
Stream #1:0: Video: png, rgb24, 1280x960, 25 fps, 25 tbr, 25 tbn, 25 tbc
At least one output file must be specified
gottsch@ubuntu:~/sunspot_20150214$ 

接下来,在一个cmd中处理这两个部分似乎没问题。我的图像处理脚本以枚举格式创建文件,因此第二部分可以在没有带%符号的glob的情况下编写。

ffmpeg -i './Header/Sun_20150214_head_%02d.png' -i './npy2reg/Sun_20150214_%02d.png'

关于丢失输出文件的cmd行错误没有问题。我关心的是我计划合并的一系列过滤器。 (淡入淡出,文本,作物)。是否有关于过滤器的正确排序和优先级控制的教程?

我也关注创建的mpeg最广泛的兼容性,以便大多数设备/操作系统/浏览器组合可以处理它。

在我的上一次尝试中,我收到的反馈是,它在MAC OS浏览器中失败,缺少插件错误。

谢谢, 格特

UPDATE2

以下行仅生成标题的视频。没有显示时间流逝的帧。

ffmpeg -i './Header/Sun_20150214_head_%02d.png' -i './npy2reg/Sun_20150214_%02d.png' -codec:v libx264 -pix_fmt yuv420p -crf 16 -y ./Video/sunspot_20150214_crf16_12fps_test.mp4

ffmpeg -i './Header/Sun_20150214_head_%02d.png' -pattern_type glob -i './npy2reg/Sun_20150214_*.png' -codec:v libx264 -pix_fmt yuv420p -crf 16 -y ./Video/sunspot_20150214_crf16_12fps_test.mp4

最好, 格特


为什么不在一个命令中完成所有操作,因此避免使用concat?你没有提供你的控制台输出,所以我无法给你一个确切的答案。
llogan

@LordNeckbeard:你的建议很好。我在ffmpeg的能力太有限了,无法执行这个想法。我可以向您描述我的输入数据和期望的结果,并非常感谢帮助实现它。我有约。 50个文件构成了时间流逝。我想创建一个包含以下功能的视频。从黑色渐变到静止图像(序列中的第1张图像),带有描述性标题。然后通过50png文件开始游戏中时光倒流。结束。我想将其嵌入到一个网页中,其目标是可以被大多数设备和浏览器组合使用。 Thx Gert。
Gert Gottschalk

请显示完整的控制台输出: ffmpeg -i './Header/Sun_20150214_head_%02d.png' -pattern_type glob -i './npy2reg/Sun_20150214_*.png'
llogan

你尝试过使用linux cat命令吗?它曾经为我工作过一次,虽然它不是2 mp4文件......
jiggunjer

Answers:


1

从我看到你的视频有不同的帧速率,16fps和12fps。用于连接视频和使用concat 分路 ,视频连接唯一不同的可能是比特率,其他一切,分辨率,fps,编解码器,颜色格式......必须相同。

FFmpeg wiki连接部分

可能的解决方案

  • 均衡视频的所有可能参数(fps,大小......)
  • 在GUI视频编辑器中编写视频 kdenlive
  • FFMpeg对于编辑淡入淡出和文本等任务非常有限。如果你真的想以编程方式创建/撰写视频,我个人就像使用框架一样 AviSynth的 ,它提供了你需要的所有东西 内部过滤器 ImageSourceFadeInSubtitle,...)。但是,它仅适用于Windows。它有一个Linux端口叫它 avxsynth 虽然我从未尝试过那个。使用帧服务器提供了预览结束的可能性 导致您选择的媒体播放器,超级容易改变 参数和一次性编码最终结果。
  • 使用ffmpegs concat 过滤 https://trac.ffmpeg.org/wiki/Concatenate#differentcodec 。我和那个人取得了不同程度的成功。

示例avisynth脚本

我制作了简单的avisynth脚本 sunspot.avs 这可能是你的起点。我在windows中试过这个,但从理论上讲,它也适用于avxsynth ......

# Set the desired parameters for the output video
out_fps = 25
out_width = 800
out_height = 600

# Make a title clip
blank = BlankClip(length=out_fps * 3, width=out_width, height=out_height, fps=out_fps, color=$000000).KillAudio()
blank_subtitle = blank.Subtitle("Your Title", align=5, size=60, text_color=$ffff00)

# Load image sequence, assume 16 input fps 16, convert to output video's 25fps
# NOTE: since the input frame rates differs from the output frame rate, there will be interpolation going on... 
sunspot = ImageReader("Sun_20150214_%02d.png", 1, 62, 16).ChangeFPS(out_fps).ConvertToRGB32()
# Crop & Resize, pay attention not to distort the images to the ratios
sunspot_cropped = sunspot.Crop(8,2,-9,-4).LanczosResize(out_width, out_height)

# Concatenate the clips (which now have the same fps + format + color space)
blank_subtitle.FadeIn(out_fps * 1) ++ sunspot_cropped

您可以使用预览结果 ffplay sunspot.avs 如果满意,将其转换为mp4文件,例如:

ffmpeg -i sunspot.avs -c:v libx264 -crf 19 -preset:v slower -pix_fmt yuv420p -c:a libfdk_aac sunspot.mp4

@phobos。感谢您查看此问题。当我从indiv静止帧创建两者(标题和时间流逝)时,我控制帧速率。我可以将两者的帧速率设置为相同,然后重试。作为一个侧面问题,我想知道如何使标题仍然只有1。我将发布一个新帖子。
Gert Gottschalk
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.