通过 ffmpeg 将 jpg 转换为 mp4
Posted
技术标签:
【中文标题】通过 ffmpeg 将 jpg 转换为 mp4【英文标题】:convert from jpg to mp4 by ffmpeg 【发布时间】:2014-05-22 20:00:10 【问题描述】:我有 320 张 jpg(320x574) 图像,我以 2004 fps 的速度记录了它们。我想为他们制作一个 .mp4 视频。我在cmd(win7)中运行了下面的代码,它只是制作了一个jpg编号320的视频,如果我选择这个('*.jpg')320它不起作用。非常感谢任何帮助。
ffmpeg -r 1/5 -i C:\data-Sam\320.jpg -c:v libx264 -r 30 -pix_fmt yuv420p C:\data-Sam\out.mp4
【问题讨论】:
2004 fps 使您的视频长度为 80/501 秒(小于 0.2 秒)! 【参考方案1】:取决于你想要的文件名:
ffmpeg -f image2 -i /path/to/file/image%3d.jpg test.avi
image%3d
将用于名为:image000.jpg
、image001.jpg
、image002.jpg
等的文件。
如果您的文件名为image0.jpg
、image1.jpg
、image2.jpg
等,那么您将使用/path/to/file/image%d.jpg
。
见FFmpeg image2 demuxer examples
【讨论】:
我的文件名从 1.jpg 到 320.jpg 排序。我必须更改它们,否则我仍然可以按原样使用它们。 当我运行你留下的代码时,在 cmd 中会弹出一条注意提示,即 Frame rate very high for a muxer not effective support it。 当我运行你留下的代码时,这个注意提示会在 cmd 中弹出,即帧速率非常高,对于不能有效支持它的多路复用器。并要求我使用其他 muxer 或 -vsync 2。事实上,我已经录制了 320 jpg 和 2000 fps 的图像。我用这个代码:ffmpeg -f image2 -i Path/To/File/filename%d.jpg -r 2000 -pix_fmt yuv420p path\to\result\test.mp4 你怎么看? 我在 Windows 上使用 ffmpeg 二进制文件,它不需要 %d 选项。 尝试在 Windows 上执行此操作,据我所知,它不起作用。我只得到第一帧。【参考方案2】:其中的主文件夹是ffmpeg.exe、Your_files文件夹和Result文件夹。 在 Your_files 文件夹中,上传一系列图片。 Bat 文件将按名称按队列顺序对它们进行排序。 完成的视频将在 Result 文件夹中。
echo off
color a
set a="Your_files\*.jpg"
set b="Result\video.mp4"
set c=ffmpeg
set f=-c:v libx264 -pix_fmt yuv420p -r 30 -crf 20
set tmp="Result\list.tmp"
for %%f in (%a%) do (@echo file 'file:%cd%\%%f' >> %tmp%)
%c% -y -f concat -safe 0 -i %tmp% %f% %b%
cd /d Result
del /f /q list.tmp
exit
-c:v libx264 - 我们将使用 x264 编解码器以 MP4 格式进行编码。-loglevel 16 - 显示所有错误,包括那些可以-r 30 – FPS 帧速率。它在所有过滤后,但在编码视频流之前生效。-crf 20 – 恒定速率因子 (CRF) 是一种质量设置(和速率控制)。值从 0 到 51,其中较低的值会以较高的文件大小为代价获得更好的质量。较高的值意味着更多的压缩,但在某些时候您会注意到质量下降。默认值为 23。
【讨论】:
很好的答案和解释!【参考方案3】:我可以在这里给你举个例子,
ffmpeg -f image2 -r 60 -i path/filename%03d.jpg -vcodec libx264 -crf 18 -pix_fmt yuv420p test.mp4
f:强制格式
r:帧速率
i:假设您的文件是filename001.jpg
, filename002.jpg
, ...
vcodec:视频编解码器
crf:恒定速率因子(0-51)。 17-18(几乎)在视觉上是无损的。见Encode/H.264
pix_fmt:像素格式
【讨论】:
【参考方案4】:您还有其他选择,例如:
帧率 = 设置视频流的帧率。默认为 25-r = 设置帧率
ffmpeg -framerate 10 -i Path/To/File/filename%3d.jpg -r 5 -y Path/To/File/test.mp4
【讨论】:
【参考方案5】:我在 Windows 上使用 ffmpeg 二进制文件,它不需要 %d 选项。
您使用的是cmd.exe
,对吗?然后这样做:
"file%d.jpg"
cmd.exe
使用%PATH%
来模仿$PATH
在真实的shell 中使用,所以会与file%d.jpg
混淆。
【讨论】:
以上是关于通过 ffmpeg 将 jpg 转换为 mp4的主要内容,如果未能解决你的问题,请参考以下文章
PHP FFMPEG - 将.mov转换为.mp4(H264)
使用ffmpeg将文件夹中的所有mp4音频文件转换为mp3 [重复]