是否可以ffmpeg
从一组序列创建视频,其中数字不是从零开始?
例如,我有一些图像 [test_100.jpg, test_101.jpg, test_102.jpg, ..., test_200.jpg],我想将它们转换为视频。我尝试了以下命令,但没有用(似乎数字应该从零开始):
ffmpeg -i test_%d.jpg -vcodec mpeg4 test.avi
有什么建议吗?
Ass*_*him 100
如果使用-start_number
开关,则无需重命名文件,如下所示:
ffmpeg -start_number n -i test_%d.jpg -vcodec mpeg4 test.avi
Run Code Online (Sandbox Code Playgroud)
n
剧照序列的起点在哪里。
请注意,只要序列在开始后不间断,这将起作用。如果存在空白并且您希望包含所有剧照,则可能需要重新编号以填补空白。
您可能会发现其他一些开关很有用。
我使用以下单行代码来获得较慢的帧速率并压缩图像并生成较小的视频:
ffmpeg.exe -f image2 -framerate 25 -pattern_type sequence -start_number 1234 -r 3 -i Imgp%04d.jpg -s 720x480 test.avi
Run Code Online (Sandbox Code Playgroud)
该-r 3
选项将生成的视频的帧速率设置为每秒 3 帧,以便我可以在短时间内看到每个静止图像。该-s
选项将图片重新缩放到所需的分辨率,以管理生成的视频的大小。
(在 Windows shell 中,替换-i Imgp%04d.jpg
为-i "Imgp%%04d.jpg"
. 将此归功于 Mike Fitzpatrick https://superuser.com/a/344178/153054)
小智 41
您可以使用以下代码片段:
cat *.jpg | ffmpeg -f image2pipe -r 1 -vcodec mjpeg -i - -vcodec libx264 out.mp4
Run Code Online (Sandbox Code Playgroud)
Nev*_*ams 25
ffmpeg 还支持 bash 风格的通配符(* 代表任意数量的任意字符)。
如果您的图像是连续的,但不一定像前面的示例那样按数字顺序排列,这将很有用。
ffmpeg -r 1 -pattern_type glob -i 'test_*.jpg' -c:v libx264 out.mp4
Run Code Online (Sandbox Code Playgroud)
因此,只要您的文件已排序,使用-pattern_type glob
开关就应该适合您。
小智 19
您可以在ffmpeg 文档中找到示例脚本:
3.2 如何将单张图片编码成电影?
如果你有大量的图片需要重命名,可以使用下面的命令来减轻负担。该命令使用 bourne shell 语法,将当前目录中与 *jpg 匹配的所有文件符号链接到
/tmp' directory in the sequence of
img001.jpg'、`img002.jpg' 等。
x=1; for i in *jpg; do counter=$(printf %03d $x); ln "$i" /tmp/img"$counter".jpg; x=$(($x+1)); done
Run Code Online (Sandbox Code Playgroud)
然后运行:
ffmpeg -f image2 -i /tmp/img%03d.jpg /tmp/a.mpg
Run Code Online (Sandbox Code Playgroud)
小智 11
据我所知,你不能以随机数开始序列(我不记得你应该从 0 还是 1 开始),另外,它不能有间隙,如果有,ffmpeg 会假设序列结束并且停止添加更多图像。
另外,如我的回答的评论中所述,请记住您需要指定索引的宽度。喜欢:
图片%03d.jpg
如果您使用 %03d 索引类型,则需要用 0 填充文件名,例如:
image001.jpg image002.jpg image003.jpg
等等。
-pattern_type glob
带音频的具体例子
此选项在:https : //superuser.com/a/782520/128124中提到,但这里有一些具体的用法示例,包括向输出视频添加音频。
每秒一张图像的幻灯片视频
ffmpeg -framerate 1 -pattern_type glob -i '*.png' \
-c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
Run Code Online (Sandbox Code Playgroud)
添加一些音乐,在图像结束时关闭音频:
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
Run Code Online (Sandbox Code Playgroud)
以下是 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
Run Code Online (Sandbox Code Playgroud)
您的图像当然应该按字母顺序排序,通常为:
0001-first-thing.jpg
0002-second-thing.jpg
0003-and-third.jpg
Run Code Online (Sandbox Code Playgroud)
等等。
另见:http : //unix.stackexchange.com/questions/68770/converting-png-frames-to-video-at-1-fps/339399#339399
正常速度视频,每帧一张图像,30 FPS
ffmpeg -framerate 30 -pattern_type glob -i '*.png' \
-c:v libx264 -pix_fmt yuv420p out.mp4
Run Code Online (Sandbox Code Playgroud)
这是它的样子:
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
Run Code Online (Sandbox Code Playgroud)
结果:https : //www.youtube.com/watch?v=HG7c7lldhM4
将一个音乐文件转换为带有固定图像的视频以供 YouTube 上传
回答:如何将 MP3 转换为 Youtube 允许的视频格式?
获取一些合成测试输入图像
这些是我在这个答案中使用的测试图像:
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
Run Code Online (Sandbox Code Playgroud)
生成的图像:https : //stackoverflow.com/questions/3191978/how-to-use-glut-opengl-to-render-to-a-file/14324292#14324292
观察视频比 ZIP 更好地压缩图像序列的程度是很酷的,因为它能够使用专门的算法跨帧压缩:
opengl-rotating-triangle.mp4
: 340K opengl-rotating-triangle.zip
: 7.3M 关于 CLI 选项
但是请注意,尽管名称如此,-glob
但这并不像 shell Glob 模式那样通用,例如:-i '*'
失败:https : //trac.ffmpeg.org/ticket/3620(显然是因为文件类型是从扩展名中推导出来的)。
-r 30
使-framerate 1
视频 30 FPS 以克服 VLC 等低帧率播放器中的错误:https : //stackoverflow.com/questions/19267443/playback-issues-in-vlc-with-low-fps-video-from-images-using- ffmpeg/41797724#41797724因此,它每帧重复 30 次以保持所需的每秒 1 张图像的效果。
下一步
您还需要:
剪切一些音频以匹配视频长度:https : //stackoverflow.com/questions/18444194/cutting-the-videos-based-on-start-and-end-time-using-ffmpeg
ffmpeg -i in.mp3 -ss 03:10 -to 03:30 -c copy out.mp3
Run Code Online (Sandbox Code Playgroud)添加剪切的音频:如何在 ffmpeg 中合并音频和视频文件
ffmpeg -i video.mp4 -i audio.mp3 -c copy output.mkv
Run Code Online (Sandbox Code Playgroud)TODO:学习从命令行剪切和连接多个音频文件到视频中:
经过测试
ffmpeg 3.4.4、vlc 3.0.3、Ubuntu 18.04。
参考书目
归档时间: |
|
查看次数: |
260780 次 |
最近记录: |