问题描述
我正在尝试将具有视频和音频的mkv转换为具有相同音频的m4v,但是在持续时间内将视频替换为静态jpg。我正在遵循https://trac.ffmpeg.org/wiki/Slideshow中的示例,但没有成功。每当我尝试其中的任何一种操作时,都不会插入jpg,而是使用mkv中的原始视频。我正在VLC中测试文件。任何想法可能出什么问题吗?我倾向于认为文档本身可能已过时或错误。
尝试以下链接的示例:
-i input.mkv -loop 1 -i image.jpg -c:a ac3 -b:a 640K -c:v libx264 -shortest output.m4v
-i input.mkv -framerate 1 -i image.jpg -c:a ac3 -b:a 640K -c:v libx264 -r 30 -pix_fmt yuv420p output.m4v
-i input.mkv -framerate 1 -i image.jpg -c:a ac3 -b:a 640K -c:v libx264 -r 30 -vf format=yuv420p output.m4v
我半工作(基于另一来源的代码)的一件事是-i input.mkv -i image.jpg -filter_complex "[1][0]scale2ref[i][v];[v][i]overlay" -c:a ac3 -b:a 640K -c:v libx264 output.m4v
,但这将图像拉伸了(我不想要,我希望所得的视频具有相同的宽高比作为图像,侧面没有黑色填充。
我自欺欺人,因为几天前我终于得到了一些与第一个示例相似的东西,但是不知何故没有保存我的工作,而是回到正题。感谢您的任何帮助。
解决方法
FFmpeg具有-map
选项,该选项允许用户选择要输出的流。在没有映射的情况下,ffmpeg具有基于分辨率或输入顺序等因素的自动选择流。根据您的情况,设置映射。
-i input.mkv -loop 1 -i image.jpg -map 1:v -map 0:a -c:a ac3 -b:a 640K -pix_fmt yuv420p -c:v libx264 -shortest -fflags +shortest -max_interleave_delta 100M output.m4v
由于-shortest的问题,添加了一些参数。参见My ffmpeg output always add extra 30s of silence at the end