我是 ffmpeg 的初学者。
我想将几个图像转换为幻灯片并想出了这个命令:
ffmpeg -y -r 1/5 -i *.jpg -r 25 output.mp4
Run Code Online (Sandbox Code Playgroud)
很直接。然而,视频似乎只有一帧长(我识别得太快了)
这是上述命令的输出:
ffmpeg version 0.8.9-4:0.8.9-0ubuntu0.12.04.1, Copyright (c) 2000-2013 the Libav developers
built on Nov 9 2013 19:12:07 with gcc 4.6.3
*** THIS PROGRAM IS DEPRECATED ***
This program is only provided for compatibility and will be removed in a future release. Please use avconv instead.
Input #0, image2, from 'swirl3777.jpg':
Duration: 00:00:05.00, start: 0.000000, bitrate: N/A
Stream #0.0: Video: mjpeg, yuvj444p, 1600x1200 [PAR 72:72 DAR 4:3], 0.20 tbr, 0.20 tbn, 0.20 tbc
Incompatible pixel format 'yuvj444p' for codec 'mjpeg', auto-selecting format 'yuvj420p'
[buffer @ 0x86e2040] w:1600 h:1200 pixfmt:yuvj444p
[avsink @ 0x86e8920] auto-inserting filter 'auto-inserted scaler 0' between the filter 'src' and the filter 'out'
[scale @ 0x86e8d80] w:1600 h:1200 fmt:yuvj444p -> w:1600 h:1200 fmt:yuvj420p flags:0x4
Incompatible pixel format 'yuvj444p' for codec 'mjpeg', auto-selecting format 'yuvj420p'
[buffer @ 0x86e8c00] w:1600 h:1200 pixfmt:yuvj444p
[avsink @ 0x87159a0] auto-inserting filter 'auto-inserted scaler 0' between the filter 'src' and the filter 'out'
[scale @ 0x86f1860] w:1600 h:1200 fmt:yuvj444p -> w:1600 h:1200 fmt:yuvj420p flags:0x4
Incompatible pixel format 'yuvj444p' for codec 'mpeg4', auto-selecting format 'yuv420p'
[buffer @ 0x86f17c0] w:1600 h:1200 pixfmt:yuvj444p
[avsink @ 0x870f4a0] auto-inserting filter 'auto-inserted scaler 0' between the filter 'src' and the filter 'out'
[scale @ 0x8737e60] w:1600 h:1200 fmt:yuvj444p -> w:1600 h:1200 fmt:yuv420p flags:0x4
Output #0, image2, to 'swirl3786.jpg':
Metadata:
encoder : Lavf53.21.1
Stream #0.0: Video: mjpeg, yuvj420p, 1600x1200 [PAR 1:1 DAR 4:3], q=2-31, 200 kb/s, 90k tbn, 0.20 tbc
Output #1, image2, to 'swirl3787.jpg':
Metadata:
encoder : Lavf53.21.1
Stream #1.0: Video: mjpeg, yuvj420p, 1600x1200 [PAR 1:1 DAR 4:3], q=2-31, 200 kb/s, 90k tbn, 0.20 tbc
Output #2, mp4, to 'output.mp4':
Metadata:
encoder : Lavf53.21.1
Stream #2.0: Video: mpeg4, yuv420p, 1600x1200 [PAR 1:1 DAR 4:3], q=2-31, 200 kb/s, 25 tbn, 25 tbc
Stream mapping:
Stream #0.0 -> #0.0
Stream #0.0 -> #1.0
Stream #0.0 -> #2.0
Press ctrl-c to stop encoding
frame= 1 fps= 0 q=10.2 Lq=10.2 q=9.5 size= -0kB time=0.04 bitrate= -4.4kbits/s
video:584kB audio:0kB global headers:0kB muxing overhead -100.003680%
Run Code Online (Sandbox Code Playgroud)
我也试过 avconv 但它的输出是一样的,甚至是一样的文件大小。如果我将 -r 值更改为像 3434321 这样可笑的值,它仍然会获得相同的文件大小。如果我添加 -b 512k oder -b 1024 它仍然会再次获得相同的文件大小......似乎,这些选项在某种程度上被忽略了。
正确检测文件夹中的三张图片。
不兼容的像素格式是否有任何问题?
我在 Ubuntu 12.04 ffmpeg 版本 0.8.9-4:0.8.9-0ubuntu0.12.04.1
任何猜测,我可能在这里做错了什么?TIA
ffmpegfrom FFmpeg 支持glob patterns,因此您的输入文件几乎可以命名为任何名称,只要它们按您想要的顺序排列即可:
ffmpeg -framerate 1/5 -pattern_type glob -i "*.jpg" -vf "fps=25,format=yuv420p" out.mp4
Run Code Online (Sandbox Code Playgroud)
Ubuntu 使用来自 Libav 的有问题的avconv假“ ffmpeg”,它是 FFmpeg 的一个分支,并且这些不支持 glob 模式。看谁能告诉我ffmpeg、libav和avconv的区别和关系?
ffmpeg为了得到ffmpeg,你可以简单地下载一个Linux构建的ffmpeg或遵循一步一步的指导,编译ffmpeg。
有一些未解决的问题或-r与fps视频过滤器相关的不一致。有时,第一个输入图像似乎被跳过或仅显示一帧。您可以使用fps过滤器来避免跳过问题,如我上面的示例所示。有关更多信息,请参阅票证#1578和#3164。
可能会出现最后一张图像被跳过或显示一帧的情况。我没有找到解决此行为的优雅解决方案,但您可以简单地复制最后一个图像文件以进行补偿。
如果您的输入图像不是完全相同的像素格式和/或帧大小,则ffmpeg可能会跳过不确定数量的帧。确保所有输入图像都相似以避免这种情况。您可以看到控制台输出,其中将提及任何输入文件差异。
使用不那么糟糕的播放器,或使用format我的示例中所示的过滤器,或使用-pix_fmt yuv420p输出选项。否则ffmpeg将尝试避免或最小化色度子采样(取决于您的输入、您使用的编码器、您的ffmpeg版本和您使用的编码选项),尽管这在技术意义上可能是好的,但它可以创建一个输出非基于 FFmpeg 的播放器无法播放。
| 归档时间: |
|
| 查看次数: |
9624 次 |
| 最近记录: |