【问题标题】:How to successfully use ffmpeg to convert images into videos如何成功使用ffmpeg将图片转成视频
【发布时间】:2014-03-03 01:10:26
【问题描述】:

目前我正在尝试为每张图像制作 5 秒的视频,然后使用 concat 将它们组合起来,但这样做有很多问题。

这是我的代码:

ffmpeg -loop 1 -i 000.jpg -t 5 000.mp4 ffmpeg -loop 1 -i 001.jpg -t 5 001.mp4 ffmpeg -f concat -i inputs.txt -codec 复制 output.mp4

inputs.txt 列出以下内容 文件“000.mp4” 文件'001.mp4'

现在,当我尝试所有这些时,我运行输出 mp4 文件并且它的第一部分工作正常,但是一旦它开始显示视频的 001 部分,它就会切换到灰色屏幕。它甚至没有在独立文件 001.mp4 中这样做。

关于发生了什么或我可以做些什么来解决这个问题的任何建议?

我也尝试了很多其他的东西。就像将所有文件切换到 png 一样,这给出了同样的问题。我还尝试使用不同的输出文件类型,如 wmv、avi 等。不过我还是很新,所以我不知道还能尝试什么。

这是运行命令后我的命令提示符中显示的内容。

C:\xampp\htdocs\images>ffmpeg -f concat -i inputs.txt -codec copy output.mp4
ffmpeg version N-50911-g9efcfbe Copyright (c) 2000-2013 the FFmpeg developers
  built on Mar 13 2013 21:26:48 with gcc 4.7.2 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-av
isynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enab
le-libass --enable-libbluray --enable-libcaca --enable-libfreetype --enable-libg
sm --enable-libilbc --enable-libmp3lame --enable-libopencore-amrnb --enable-libo
pencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-li
bschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-lib
twolame --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enabl
e-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
  libavutil      52. 19.100 / 52. 19.100
  libavcodec     55.  0.100 / 55.  0.100
  libavformat    55.  0.100 / 55.  0.100
  libavdevice    54.  4.100 / 54.  4.100
  libavfilter     3. 45.103 /  3. 45.103
  libswscale      2.  2.100 /  2.  2.100
  libswresample   0. 17.102 /  0. 17.102
  libpostproc    52.  2.100 / 52.  2.100
[concat @ 003b9660] Estimating duration from bitrate, this may be inaccurate
Input #0, concat, from 'inputs.txt':
  Duration: 00:00:00.01, start: 0.000000, bitrate: 28 kb/s
    Stream #0:0: Video: h264 (High 4:4:4 Predictive) (avc1 / 0x31637661), yuv444
p, 800x600 [SAR 1:1 DAR 4:3], 28 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc
Output #0, mp4, to 'output.mp4':
  Metadata:
    encoder         : Lavf55.0.100
    Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv444p, 800x600 [SAR 1:1
 DAR 4:3], q=2-31, 28 kb/s, 25 fps, 12800 tbn, 12800 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
Press [q] to stop, [?] for help
frame=  250 fps=0.0 q=-1.0 Lsize=      31kB time=00:00:09.88 bitrate=  26.1kbits
/s
video:28kB audio:0kB subtitle:0 global headers:0kB muxing overhead 13.534948%

C:\xampp\htdocs\images>

【问题讨论】:

  • 您是否一次拥有所有图像?

标签: ffmpeg


【解决方案1】:

您的控制台输出显示您正在编写 4:4:4 H.264 输出,很少有玩家支持。 (较新版本的 FFmpeg 对此发出警告。)在输出文件之前添加 -pix_fmt yuv420p 以转换为广泛支持的 4:2:0 像素格式。您还可以添加-profile:v baseline 以使其适用于更多玩家。 (这些选项适用于编码,因此不要在指定-codec copy 的命令中使用它们。)您也可以尝试使用ffplay 播放输出文件,这是少数支持4:4:4 的播放器之一mp4 文件中的 H.264。

如果您希望每个图像的持续时间相同并且它们是连续编号的,您只需要一个命令,例如:

ffmpeg -framerate 0.2 -i %3d.jpg -vf fps=10 -pix_fmt yuv420p output.mp4

-framerate 0.2 将输入帧速率设置为每秒 0.2 帧(每 5 秒 1 帧)。 %3d 替换为每帧 3 位数字 000001 等。 -vf fps=10 将帧速率更改为每秒 10 帧,在这种情况下通过复制输入帧;这不是绝对必要的,但可以在低帧速率下有助于使搜索更平滑并确保第一张和最后一张图像的完整持续时间,并且不应过多增加输出大小,因为可以对与前一帧相同的帧进行编码体积小。

如果您想继续使用concat 解复用器,或者希望每个图像具有不同的文件名或持续时间,您可以直接在inputs.txt 中为每个图像指定持续时间。无需为每个图像创建单独的电影文件。例如:

file 000.jpg
duration 5
file 001.jpg
duration 5
...

然后使用concat demuxer将它们串联起来,同时进行编码:

ffmpeg -f concat -i inputs.txt -vf fps=10 -pix_fmt yuv420p output.mp4

如果其中任何一个不起作用,请将您的 FFmpeg 升级到最新版本。

【讨论】:

  • 非常感谢您的精彩回答。不幸的是,我仍然遇到问题。我尝试运行“ffmpeg -f concat -i inputs.txt -vf fps=10 -pix_fmt yuv420p output.mp4”,输入文件的结构与您列出的一样(不包括点)。奇怪的是,输出现在显示的是之前变灰的图像。但是现在第一张图已经看不到了。我会尝试升级到最新版本,如果仍然无法正常工作,我会回复您。我以为它已经是最新版本了,但我会仔细检查。
  • 显然我使用的版本是 N-50911-g9efcfbe。考虑到他们的网站被格式化为小数,这有点令人困惑,我认为最后一个是 2.1。虽然我没有完全安装 ffmpeg。我安装了显然附带的 imagemagick。另外我想我使用 Windows Vista 和使用 xampp 也无济于事。
  • 仍然没有任何运气:(我卸载了imagemagick,然后安装了最新的Zeranoe FFmpeg Build Version“git-9c978f2”,但它仍然无法正常工作。不知所措:(一直在搜索在过去的 48 小时里到处都在尝试解决这个问题。尝试我能找到的一切。我唯一能做的就是合并两个视频,但它们是“我的视频”中显示在每个窗口上的默认 wmv 视频计算机。从图像创建视频并尝试合并它们不起作用。
  • 您只是没有看到第一张图片吗?您是否尝试过复制inputs.txt 中的第一张图片?
  • 你做到了@mark4o - 通过在inputs.txt文件中复制第一个图像一次,它现在成功地播放了两个图像5秒,没有任何类型的灰屏。我不明白为什么我必须这样做:P 但无论如何,谢谢你的帮助。我会一直坚持下去!
猜你喜欢
  • 1970-01-01
  • 2019-12-08
  • 2017-05-25
  • 2021-01-16
  • 1970-01-01
  • 2023-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多