-pattern_type glob
在许多情况下,此出色的选项使选择图像更加容易。
每秒一幅图像的幻灯片视频
ffmpeg -framerate 1 -pattern_type glob -i '*.png' \
-c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
向其中添加一些音乐,当图像结束时可能会更长的音频时,将中断播放:
ffmpeg -framerate 1 -pattern_type glob -i '*.png' -i audio.ogg \
-c:a copy -shortest -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
这是YouTube上的两个演示:
成为嬉皮士,并使用Theora专利保护的视频格式:
ffmpeg -framerate 1 -pattern_type glob -i '*.png' -i audio.ogg \
-c:a copy -shortest -c:v libtheora -r 30 -pix_fmt yuv420p out.ogg
您的图片当然应该按字母顺序排序,通常为:
0001-first-thing.jpg
0002-second-thing.jpg
0003-and-third.jpg
等等。
我还要首先确保所有要使用的图像具有相同的纵横比,可能与裁剪他们imagemagick
或nomacs提前,这样的ffmpeg将不必作出艰难的决定。特别是,宽度必须被2整除,否则转换失败并显示:“宽度不能被2整除”。
以30 FPS每帧一幅图像的标准速度视频
ffmpeg -framerate 30 -pattern_type glob -i '*.png' \
-c:v libx264 -pix_fmt yuv420p out.mp4
看起来是这样的:
生成的GIF:https://askubuntu.com/questions/648603/how-to-create-an-animated-gif-from-mp4-video-via-command-line/837574#837574
向其中添加一些音频:
ffmpeg -framerate 30 -pattern_type glob -i '*.png' \
-i audio.ogg -c:a copy -shortest -c:v libx264 -pix_fmt yuv420p out.mp4
结果:https : //www.youtube.com/watch?v=HG7c7lldhM4
这些是我使用的测试媒体:
wget -O opengl-rotating-triangle.zip https://github.com/cirosantilli/media/blob/master/opengl-rotating-triangle.zip?raw=true
unzip opengl-rotating-triangle.zip
cd opengl-rotating-triangle
wget -O audio.ogg https://upload.wikimedia.org/wikipedia/commons/7/74/Alnitaque_%26_Moon_Shot_-_EURO_%28Extended_Mix%29.ogg
使用以下方法生成的图像:如何使用GLUT / OpenGL渲染到文件?
观察视频对图像序列的压缩方式要好于ZIP,这是很酷的,因为它可以使用特殊算法对帧进行压缩:
opengl-rotating-triangle.mp4
:34万
opengl-rotating-triangle.zip
:730万
将一个音乐文件转换为带有固定图像的视频,以便YouTube上传
在以下位置回答:https : //superuser.com/questions/700419/how-to-convert-mp3-to-youtube-allowed-video-format/1472572#1472572
逐步进行完整的逼真的幻灯片案例研究设置
除了运行单个ffmpeg命令之外,创建幻灯片还需要做更多的工作,因此这里有一个受时间轴启发的更有趣的详细示例。
获取输入媒体:
mkdir -p orig
cd orig
wget -O 1.png https://upload.wikimedia.org/wikipedia/commons/2/22/Australopithecus_afarensis.png
wget -O 2.jpg https://upload.wikimedia.org/wikipedia/commons/6/61/Homo_habilis-2.JPG
wget -O 3.jpg https://upload.wikimedia.org/wikipedia/commons/c/cb/Homo_erectus_new.JPG
wget -O 4.png https://upload.wikimedia.org/wikipedia/commons/1/1f/Homo_heidelbergensis_-_forensic_facial_reconstruction-crop.png
wget -O 5.jpg https://upload.wikimedia.org/wikipedia/commons/thumb/5/5a/Sabaa_Nissan_Militiaman.jpg/450px-Sabaa_Nissan_Militiaman.jpg
wget -O audio.ogg https://upload.wikimedia.org/wikipedia/commons/7/74/Alnitaque_%26_Moon_Shot_-_EURO_%28Extended_Mix%29.ogg
cd ..
# Convert all to PNG for consistency.
# /unix/29869/converting-multiple-image-files-from-jpeg-to-pdf-format
# Hardlink the ones that are already PNG.
mkdir -p png
mogrify -format png -path png orig/*.jpg
ln -P orig/*.png png
现在,我们快速浏览所有图像尺寸,以决定最终的宽高比:
identify png/*
输出:
png/1.png PNG 557x495 557x495+0+0 8-bit sRGB 653KB 0.000u 0:00.000
png/2.png PNG 664x800 664x800+0+0 8-bit sRGB 853KB 0.000u 0:00.000
png/3.png PNG 544x680 544x680+0+0 8-bit sRGB 442KB 0.000u 0:00.000
png/4.png PNG 207x238 207x238+0+0 8-bit sRGB 76.8KB 0.000u 0:00.000
png/5.png PNG 450x600 450x600+0+0 8-bit sRGB 627KB 0.000u 0:00.000
因此经典的480p(640x480 == 4/3)长宽比似乎合适。
进行一次转换,以最小的调整大小来使宽度均匀(TODO可以自动调整任何宽度,这里我只是手动查看identify
输出,并将宽度和高度减少一):
mkdir -p raw
convert png/1.png -resize 556x494 raw/1.png
ln -P png/2.png png/3.png png/4.png png/5.png raw
ffmpeg -framerate 1 -pattern_type glob -i 'raw/*.png' -i orig/audio.ogg -c:v libx264 -c:a copy -shortest -r 30 -pix_fmt yuv420p raw.mp4
这会产生可怕的输出,因为从以下位置可以看到:
ffprobe raw.mp4
ffmpeg仅采用第一个图像的大小556x494,然后将所有其他图像转换为该确切大小,从而破坏了它们的长宽比。
现在,让我们根据ImageMagick进行裁剪,将图像自动转换为目标480p宽高比:如何最小化图像到特定的宽高比?
mkdir -p auto
mogrify -path auto -geometry 640x480^ -gravity center -crop 640x480+0+0 png/*.png
ffmpeg -framerate 1 -pattern_type glob -i 'auto/*.png' -i orig/audio.ogg -c:v libx264 -c:a copy -shortest -r 30 -pix_fmt yuv420p auto.mp4
因此,现在的宽高比不错,但是不可避免地必须进行一些裁剪,以裁剪图像中有趣的部分。
另一种选择是使用黑色背景填充,使其具有与如下所示相同的纵横比:调整大小以适合盒子,并将“空”部分的背景设置为黑色
mkdir -p black
ffmpeg -framerate 1 -pattern_type glob -i 'black/*.png' -i orig/audio.ogg -c:v libx264 -c:a copy -shortest -r 30 -pix_fmt yuv420p black.mp4
通常来说,理想情况下,您将能够选择具有相同或相似长宽比的图像,从而首先避免出现这些问题。
关于CLI选项
但是请注意,尽管有这个名称,-glob
但它不像Shell Glob模式那样通用,例如:-i '*'
failed:https : //trac.ffmpeg.org/ticket/3620(显然是因为文件类型是从扩展名推导出的)。
-r 30
使-framerate 1
视频达到30 FPS,以克服VLC等播放器中的低帧率错误:VLC冻结从ffmpeg图像创建的低1 FPS视频,因此,它每帧重复30次以保持每秒1张所需的图像效果。
下一步
您还将希望:
TODO:学习将多个音频文件剪切并连接到视频中而没有中间文件的情况,我很确定这是可能的:
经过测试
ffmpeg 3.4.4,vlc 3.0.3,Ubuntu 18.04。
参考书目