我是 FFMpeg 的新用户。
我想要一个命令行,可以从 JPG 和/或 PNG 图像文件夹中创建基本的幻灯片 MP4 视频。图像来源于数码相机/智能手机或扫描照片(通常为 600 dpi)。
到目前为止,我已经部分成功了,通过创建一个输入文本文件,其中包含来自文件夹中的图像文件名列表,并在每个“文件”语句后使用“duration 2”命令来在每个图像之间引入 2 秒的延迟。
ffmpeg -hide_banner -f concat -safe 0 -i MQSS_test-ffmpeg.Txt -c:v libx264 -r 30 -pix_fmt yuv420p MQSS_test-ffmpeg.mp4
我注意到两种奇怪的行为。
行为#1:方向不正确
MP4 输出文件中的所有图像都以纵向或横向呈现,具体取决于第一张图像的方向。由于文件夹中混合了纵向和横向图像,因此以错误方向呈现的图像会被拉伸或挤压。因此,如果第一张图像是纵向的,则所有图像都会呈现为纵向。如果第一张图像是横向的,则所有图像都会呈现为横向。
有没有办法让图像以正确的方向呈现?
行为 #2:无法混合图像格式
我无法在同一个输入文件中混合使用 JPG 和 PNG 图像文件。我收到几个错误:
处理输入时发现无效数据,无法在 SOF 之前处理 SOS,跳过不支持的编码类型(ca)
但是,如果我将 JPG 和 PNG 文件分成单独的 JPG 和 PNG 输入文件并分别运行,则两种图像类型都可以正确呈现。
有任何想法吗?
答案1
有没有办法让图像以正确的方向呈现?
示例改编自使用 ffmpeg 调整视频大小以适应特定尺寸:
ffmpeg -framerate 1/2 -i %04d.jpg -filter_complex "scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:-1:-1:color=black,format=yuv420p" -r 30 -movflags +faststart output.mp4
另请参阅图像解复用器文档。
我无法在同一个输入文件中混合 JPG 和 PNG 图像文件。
制作视频之前将它们全部转换为一种文件类型。
或者单独输入每幅图像并使用连接过滤器将它们连接起来。这种方法会很繁琐。
答案2
据我所知,ffmpeg
无法使用 EXIF Orientation 标签相应地旋转图像。因此,在使用 ffmpeg 将它们组合成幻灯片之前,您需要先旋转图像。
要无损旋转 JPEG 图像(无需重新压缩),可以使用多种工具,例如Xnview 的nconvert
,exiftran
,可能还有很多其他的。
例如,要根据 Exif 标签旋转当前目录中的所有“*.jpg”图像,使用以下命令exiftran
:
exiftran -a -i -b *.jpg
所用标志的含义:
-a Automatic (using exif orientation tag). -i Enable in-place editing of the images. -b Create a backup file when doing in-place editing
此后,您可以使用ffmpeg
所需的选项。