ffmpeg 使用平铺过滤器的表达式
ffmpeg using an expression for tile filter
有什么方法可以为 ffmpeg 的 'tile' 过滤器提供表达式吗?我已经尝试了所有我能想到的组合,使用不同的转义字符和引号,但它不会接受除了像“10x10”这样的显式字符串之外的任何内容。请参阅下面有效的示例:
ffmpeg -i "big_buck_bunny.mp4" -vf "tile=10x10" grid_%d.jpg
我希望能够做类似的事情:
ffmpeg -i "big_buck_bunny.mp4" -vf "tile=expr(n*2)x10" grid_%d.jpg
其中'n'为当前帧数。这不是我想要使用的确切表达式,但我想从一个简单的示例开始,然后我可以适应更复杂的表达式。我尝试过的所有操作都会出现如下错误:
[tile @ 0x7facc1d000c0] Unable to parse option value "expr(n*2)x10" as image size
tile 可以简单地不接受表达式吗?还是我应该尝试某种连接函数?
我没有完全回答你的问题,但这可能有助于找到它。
如果您想根据帧数进行计算,您可能必须从输出中提取 nb_frames
属性
ffprobe -show_streams -i "big_buck_bunny.mp4"
第一的。然后您可以执行计算并使用正确的图块过滤器将结果插入到您的命令中。
如果您正在寻找一种方法来仅从视频中提取一定数量的帧并将它们合并到一个文件中,我会推荐此网站上的教程:http://www.binpress.com/tutorial/how-to-generate-video-previews-with-ffmpeg/138
Generating a preview is just another one-liner where ffmpeg captures images and joins them into a single long film strip.
ffmpeg -loglevel panic -y -i "video.mp4" -frames 1 -q:v 1 -vf "select=not(mod(n\,40)),scale=-1:120,tile=100x1" video_preview.jpg
- -loglevel panic We don’t want to see any output. You can remove this option if you’re having any problems seeing what went wrong.
- -i "$MOVIE" The input file.
- -y Override any existing output file.
- -frames 1 Tell ffmpeg that output from this command is just a single image (one frame).
- -q:v 1 Output quality, 0 is the best.
- -vf select= That's where all the magic happens. This is the selector function for video filter.
- not(mod(n\,40)) Select one frame every 40 frames see the documentation.
- scale=-1:120 Resize frames to fit 120px height, and the width is adjusted automatically to keep the correct aspect ratio.
- tile=100x1 Layout captured frames into this grid.
有什么方法可以为 ffmpeg 的 'tile' 过滤器提供表达式吗?我已经尝试了所有我能想到的组合,使用不同的转义字符和引号,但它不会接受除了像“10x10”这样的显式字符串之外的任何内容。请参阅下面有效的示例:
ffmpeg -i "big_buck_bunny.mp4" -vf "tile=10x10" grid_%d.jpg
我希望能够做类似的事情:
ffmpeg -i "big_buck_bunny.mp4" -vf "tile=expr(n*2)x10" grid_%d.jpg
其中'n'为当前帧数。这不是我想要使用的确切表达式,但我想从一个简单的示例开始,然后我可以适应更复杂的表达式。我尝试过的所有操作都会出现如下错误:
[tile @ 0x7facc1d000c0] Unable to parse option value "expr(n*2)x10" as image size
tile 可以简单地不接受表达式吗?还是我应该尝试某种连接函数?
我没有完全回答你的问题,但这可能有助于找到它。
如果您想根据帧数进行计算,您可能必须从输出中提取 nb_frames
属性
ffprobe -show_streams -i "big_buck_bunny.mp4"
第一的。然后您可以执行计算并使用正确的图块过滤器将结果插入到您的命令中。
如果您正在寻找一种方法来仅从视频中提取一定数量的帧并将它们合并到一个文件中,我会推荐此网站上的教程:http://www.binpress.com/tutorial/how-to-generate-video-previews-with-ffmpeg/138
Generating a preview is just another one-liner where ffmpeg captures images and joins them into a single long film strip.
ffmpeg -loglevel panic -y -i "video.mp4" -frames 1 -q:v 1 -vf "select=not(mod(n\,40)),scale=-1:120,tile=100x1" video_preview.jpg
- -loglevel panic We don’t want to see any output. You can remove this option if you’re having any problems seeing what went wrong.
- -i "$MOVIE" The input file.
- -y Override any existing output file.
- -frames 1 Tell ffmpeg that output from this command is just a single image (one frame).
- -q:v 1 Output quality, 0 is the best.
- -vf select= That's where all the magic happens. This is the selector function for video filter.
- not(mod(n\,40)) Select one frame every 40 frames see the documentation.
- scale=-1:120 Resize frames to fit 120px height, and the width is adjusted automatically to keep the correct aspect ratio.
- tile=100x1 Layout captured frames into this grid.