gpt4 book ai didi

bash - 如何使用陷阱终止包含来自/dev/null 的重定向馈送的ffmpeg 的while 循环?

转载 作者:行者123 更新时间:2023-12-04 22:49:32 29 4
gpt4 key购买 nike

我在这里发现了Loop calls process that takes a long time to complete. How do I break out of it?从 find 到调用 ffmpeg cli [HandBrakeCLI] 的 while 循环的管道将不会处理多个输入文件,因为 ffmpeg 有一个怪癖,它会一次性“吃掉”所有输入列表并“饿死”循环。

解决方案是根据 http://mywiki.wooledge.org/BashFAQ/089 从/dev/null 重定向这很好用。然而,它让我回到了最初的问题和我要解决的问题:

因为/dev/null 现在有一个完整的列表,包含所有提供给 HandBrakeCLI 的文件,ctrl-c 本身不足以退出循环。

我尝试了各种陷阱排列,但除了停止 HandBrakeCLI 处理当前输入之前,我无法让它做任何事情,然后再继续下一个。它不是立即终止循环,而是在 HandBrakeCLI 行之后立即处理 mv。

所以,有两件事我在这里没有得到: 1. 如何使用 ctrl-c 或 kill 命令终止所有内容? 2、如(1.)未处理,如何防止循环内的mv被执行?

为了解决这个问题,这是代码的简化版本:

#!/bin/bash

source_dir="/Volumes/Volumename"
dest_dir="/Volumes/Volumename/Converted/"
finished_dir="Volumes/Volumename/Processed/"


find "$source_dir" -type d -name "VIDEO_TS" | while read -r dir; do
name=${dir%/VIDEO_TS}
mov_dir=${dir%/*}
name=${name##*/}
./HandBrakeCLI -i "$dir" -o "$dest_dir/$name.m4v" </dev/null
mv "$mov_dir" "finished_dir"
done

最佳答案

尝试追加 || break :

./HandBrakeCLI -i "$dir" -o "$dest_dir/$name.m4v" </dev/null || break

关于bash - 如何使用陷阱终止包含来自/dev/null 的重定向馈送的ffmpeg 的while 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35102790/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com