如何对wc -l的结果执行数学运算并传递给后续程序?
解决方法
问题根源
你之前的命令错误在于:管道传递的内容无法通过{}直接引用,expr和rife-ncnn-vulkan都不会自动识别管道中的{}占位符。需要通过命令替换或变量存储的方式传递计算后的数值。
1. 修正文件数统计并乘4的命令
如果只是单独计算文件夹内文件数×4,可用以下两种方式:
- 用变量存储结果:
(注:file_count=$(cd path/to/my/folder && find . -maxdepth 1 -type f | wc -l) expr $file_count \* 4*需要转义,避免被Shell当作通配符解析) - 用
xargs传递管道内容:cd path/to/my/folder && find . -maxdepth 1 -type f | wc -l | xargs -I {} expr {} \* 4
2. 完整帧率提升命令(整合ffmpeg与rife-ncnn-vulkan)
针对你的实际需求,先提取视频帧,再计算目标帧数并传给rife工具,推荐用变量存储计算结果,逻辑更清晰:
# 第一步:提取视频帧到input_folders目录 ffmpeg -i "video.mkv" -r 12 -c:v libwebp -lossless 1 -y input_frames/frame_%06d.webp # 第二步:统计帧文件数量并计算四倍后的数值 frame_count=$(find input_frames -maxdepth 1 -type f | wc -l) target_frames=$((frame_count * 4)) # 第三步:调用rife-ncnn-vulkan工具,传入计算后的-n参数 rife-ncnn-vulkan -i input_frames -o output_frames -f %08d.webp -x -v -n $target_frames
也可以整合成一行命令(用命令替换简化):
ffmpeg -i "video.mkv" -r 12 -c:v libwebp -lossless 1 -y input_frames/frame_%06d.webp && \ target_frames=$(( $(find input_frames -maxdepth 1 -type f | wc -l) * 4 )) && \ rife-ncnn-vulkan -i input_frames -o output_frames -f %08d.webp -x -v -n $target_frames
关键说明
rife-ncnn-vulkan的-n参数需要直接接收数值型命令行参数,无法通过管道读取标准输入。因此必须先计算出目标帧数,再将其作为参数传递,而不是尝试通过管道传递。
内容的提问来源于stack exchange,提问作者tuqueque
相关产品推荐
相关产品推荐

