目前我正在尝试为每个图像制作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升级到最新版本.
您的控制台输出显示您正在编写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升级到最新版本.