如何成功使用ffmpeg将图像转换为视频

 互联网控军 发布于 2023-01-29 08:45

目前我正在尝试为每个图像制作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 copy 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>

mark4o.. 10

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

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

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

-framerate 0.2将输入帧速率为每秒0.2帧(每5秒1帧). %3d由3位数字代替000,001等.对于每个帧. -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升级到最新版本.

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

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

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

    -framerate 0.2将输入帧速率为每秒0.2帧(每5秒1帧). %3d由3位数字代替000,001等.对于每个帧. -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升级到最新版本.

    2023-01-29 08:51 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有