通过 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.jpgimage001.jpgimage002.jpg 等的文件。

如果您的文件名为image0.jpgimage1.jpgimage2.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 [重复]

使用 FFMPEG 将所有视频帧提取为图像

通过FFMpeg将MOV视频转为黑白通道的mp4(可设置上下/左右)

ffmpeg - 将 MOV 文件转换为 MP4 [关闭]

使用 ffmpeg 实现 MP4 与 GIF 的互转