作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在从一系列图像制作 mp4 文件。图像应该运行大约 1 小时,但我无法获得完整的视频,因为 FFMPEG 会查找它不应该有的文件。
[image2 @ 0x55fe14bef700] Could not open file : /mnt/run/image-005437.jpeg
令人困惑的是,我传递给 ffmpeg 的列表不应包含该文件。如果我的脚本不喜欢结果,它会将文件发送到目标文件夹中名为 failed 的子目录
$ pwd
run/failed
]$ ls
failed-005437.jpeg
我用来启动 ffmpeg 的命令如下
image_folder=$1
singularity exec --bind $work_dir:/mnt $work_dir/longleaf2.sif ffmpeg -f concat -safe 0 -y -i <(for f in /mnt/processed_images/$image_folder/image-%06d.jpeg; do echo "file '$f'";done) -vf "crop=trunc(iw/3)*2:trunc(ih/2)*2" -movflags +faststart /mnt/run/summary_files/${image_folder}.mp4
我检查了处理过的图像,但它不存在,那么为什么 ffmpeg 正在寻找它?
$ ls image-005437.*
ls: cannot access image-005437.*: No such file or directory
最佳答案
问题
当你运行时:
for f in /mnt/processed_images/$image_folder/image-%06d.jpeg; do echo "file '$f'";done
它将输出:
file '/mnt/processed_images/foo/image-%06d.jpeg'
因此,ffmpeg 将使用
image demuxer 的序列模式类型。 .这需要一个连续的序列。
for f in /mnt/processed_images/$image_folder/*.jpeg; do echo "file '$f'";done
现在它将输出每个文件。在此示例中
image-000003.jpeg
不存在所以它没有被列出:
file '/mnt/processed_images/foo/image-000001.jpeg'
file '/mnt/processed_images/foo/image-000002.jpeg'
file '/mnt/processed_images/foo/image-000004.jpeg'
解决方案 2:简化并跳过 concat
image_folder=$1
singularity exec --bind "$work_dir":/mnt "$work_dir"/longleaf2.sif ffmpeg -pattern_type glob -framerate 25 -i "/mnt/processed_images/$image_folder/*.jpeg" -vf "crop=trunc(iw/3)*2:trunc(ih/2)*2,format=yuv420p" -movflags +faststart /mnt/run/summary_files/${image_folder}.mp4
-framerate
image demuxer 的输入选项. 关于Bash遍历目录中的文件输出不存在的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69635057/
我是一名优秀的程序员,十分优秀!