wat*_*ter 0 video ffmpeg images
我有所有这些图像为 jpeg,我想将它们流式传输到 AVI。我正在尝试将 ffmpeg 与此处注明的命令一起使用,但出现错误“没有此类文件或目录”。
我的确切命令是(来自包含所有这些文件的文件夹):
ffmpeg -f image2 -i frame_%d.jpg view.avi
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?另外,我如何为特定范围的图像执行此操作?说我只想要 500 到 1000 帧,所以我想要 frame_0500.jpg 到 frame_1000.jpg?
正确的命令应该是
ffmpeg -f image2 -i frame_%04d.jpg view.avi
Run Code Online (Sandbox Code Playgroud)
该%04d装置的数目的长度为4个字符,零填充(0000-9999)。
如果你想做一个范围,我会把你想要的文件移动到他们自己的目录中。
使用 gui 很容易,但使用命令行你可以做到
mv frame_0[5-9]* newfolder
mv frame_1000* newfolder
Run Code Online (Sandbox Code Playgroud)
对于那些使用ffmpegglob 模式的非古老版本的人来说,这是最灵活的方法:
ffmpeg -framerate 10 -pattern_type glob -i "*.png" -pix_fmt yuv420p output.mkv
Run Code Online (Sandbox Code Playgroud)
这将转换一系列编号的输入image-0001.png、image-0002.png、 等:
ffmpeg -framerate 30000/1001 -i image-%04d.png -pix_fmt yuv420p output.mkv
Run Code Online (Sandbox Code Playgroud)
-start_number,例如-start_number 100,作为输入选项。cat您还可以使用cat管道将图像传输到ffmpeg:
cat *.jpg | ffmpeg -framerate ntsc -f image2pipe -c:v mjpeg -i - -pix_fmt yuv420p output.mp4
Run Code Online (Sandbox Code Playgroud)
输出将使用与输入相同的帧速率。如果您不声明,-framerate则将使用默认值 25。您还可以添加-r作为输出选项,例如 in -r 25,如果您想ffmpeg以特定速率读取输入,然后丢弃或复制帧以实现不同的输出帧速率。
根据您的输入、ffmpeg版本和所选编码器,ffmpeg将尝试避免或最小化色度子采样。尽管这在技术意义上可能很好,但它可以产生非基于 FFmpeg 的播放器无法播放的输出。添加-pix_fmt yuv420p将确保您的输出在编码为 H.264 视频时可播放。
建议使用最近的版本,ffmpeg因为开发非常活跃,避免已经修复的错误。有关Windows、OS X 和 Linux 构建的链接,请参阅FFmpeg 下载页面。