我的花园里有两台相机,拍摄我感兴趣的两种植物的延时 JPEG 图像。
其中一个已经具有覆盖时间戳并且它不会给我带来问题,我每天用它制作电影:
cat *.jpg | ffmpeg -y -f image2pipe -i - -an -threads 4 -vcodec libx264 -s vga -r 24 -b:v 512k -flags +loop+mv4 -cmp 256 -partitions +parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 -me_method hex -subq 7 -trellis 1 -refs 5 -bf 3 -b-pyramid 1 -8x8dct 1 -coder 1 -me_range 16 -g 250 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -qmin 10 -qmax 51 -qdiff 4 -loglevel info "../video_test.mp4"
电影效果非常完美,图像的序列非常完美。
至于其他,我使用的方法是两步法,我想将其转换为一步法。它拍摄每张照片,在每张照片上制作一个叠加层,存储在 tmp 文件夹中,上面的脚本会从该文件夹中制作影片。
虽然它可以起作用,但是由于双重编码过程,非常耗时并且质量下降。
因此,我决定使用下面任一脚本将其变为一步到位:
cat *.jpg | ffmpeg -y -f image2pipe -i - -an -threads 4 -vf "drawtext=fontfile=/usr/share/fonts/dejavu/DejaVuSans.ttf: text="Partial filename of each image, containing date-time": [email protected]: x=7: y=7" -vcodec libx264 -s vga -r 24 -b:v 512k -flags +loop+mv4 -cmp 256 -partitions +parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 -me_method hex -subq 7 -trellis 1 -refs 5 -bf 3 -b-pyramid 1 -8x8dct 1 -coder 1 -me_range 16 -g 250 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -qmin 10 -qmax 51 -qdiff 4 -loglevel info "../video_test.mp4"
问题 1:这可行,但我无法获取正在处理的文件名以将其插入过滤器中。
还有另一种方法:
find . -type f -name '*.jpg' -exec TEST=$'{}' \; -exec cat {} \; | ffmpeg -y -f image2pipe -i - -an -threads 4 -vf "drawtext=fontfile=/usr/share/fonts/dejavu/DejaVuSans.ttf: text=$TEST: [email protected]: x=7: y=7" -vcodec libx264 -s vga -r 24 -b:v 512k -flags +loop+mv4 -cmp 256 -partitions +parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 -me_method hex -subq 7 -trellis 1 -refs 5 -bf 3 -b-pyramid 1 -8x8dct 1 -coder 1 -me_range 16 -g 250 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -qmin 10 -qmax 51 -qdiff 4 -loglevel info "../video_test.mp4"
如您所见,目的是获取变量中的文件名,处理它,并在过滤器中使用它。
问题2这里有两个问题。第一个问题是图像没有按文件名排序,因此时间不合适。第二个问题是“find”没有像我预期的那样使用两个 exec 命令。
所以,这篇文章很长,我希望你能读完。有人能帮忙吗?
短暂性脑缺血发作
答案1
我不了解 FFmpeg,也没有它,所以我无法测试这一点。但是你说cat *.jpg
(和,例如echo *.jpg
)以正确的顺序给你文件。在这种情况下,你应该能够用
对于 *.jpg 中的 f 做 ffmpeg -y …参数…文本=“$f”:…更多参数…-loglevel info“../video_test.mp4”<“$f” 完毕
或者,如果你坚持使用cat
:
对于 *.jpg 中的 f 做 猫“$f”| ffmpeg -y…参数…文本=“$f”:…更多参数…-loglevel 信息“../video_test.mp4” 完毕