gpt4 book ai didi

bash - 为什么我的 bash 脚本因 ffmpeg 而停止?

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

我有一个逐行包含帧号的文本文件,我正在使用 bash 脚本和 ffmpeg 循环遍历每一行并尝试打印出每一帧的缩略图。

每次我在终端中运行 bash 脚本时,它都会因创建第一个缩略图的错误而停止。似乎没有给缩略图一个唯一的名称。我究竟做错了什么?

我的 bash 脚本:

#!/bin/bash
source text.txt
while read name
do
ffmpeg -i result.mp4 -vf "setpts=N+1,select='eq(n,$name)'" -vframes 1 frames-$i.jpg
done <text.txt

错误:
File 'frames-.jpg' already exists. Overwrite ? [y/N] Not overwriting - exiting

最佳答案

首先,我猜你不需要 source脚本中的文件 text.txt。当文件来自 source filename 时或 . filename文件中的代码行就像在命令行中打印一样执行。因此,我已经删除了您脚本的这一部分。

其次,正如其他人所指出的,您没有定义或更新 $i多变的。这样的修改可能对您有用:

#!/bin/bash

i="0"
while read -r name || [[ -n "${name}" ]]; do # allows for last line with no newline
ffmpeg -i result.mp4 -vf "setpts=N+1,select='eq(n,${name})'" -vframes 1 frames-${i}.jpg
if [ "$?" -eq "0" ]; then
printf -- 'ffmpeg succeeded - creating frames-%s.jpg for %s\n' "${i}" "${name}"
else
printf -- 'ffmpeg failed - was unable to create frames-%s.jpg for %s\n' "${i}" "${name}"
fi
let i+="1"
done <text.txt

上面脚本的一些附加说明:
  • 推荐使用-rread在读取的数据中禁用反斜杠转义和行继续的解释。如果您的输入曾经有 bash,这可以让您远离问题的困扰。可逃避的字符。
  • 我添加了 || [[ -n "${name}" ]]到 while 条件以允许输入文件中的最后一行没有换行符作为最后一个字符。否则最后一行将被标准读取过程忽略,因为它需要在每行末尾有一个换行符。
  • 我添加了对 bash 内置变量 $? 的检查.上一条命令的返回值存放在$? . 0表示成功,其他表示错误。


  • 编辑

    如果您想帮助解决 ffmpeg 正在做什么,可以尝试以下修改后的脚本:
    #!/bin/bash

    set -x # activate bash debugging output

    while read -r frame_number || [[ -n "${frame_number}" ]]; do # allows for last line with no newline
    ffmpeg -i result.mp4 -vf "setpts=N+1,select='eq(n,${frame_number})'" -vframes 1 frames-${frame_number}.jpg
    if [ $? -eq 0 ]; then
    printf -- 'ffmpeg succeeded - creating frames-%s.jpg\n' "${frame_number}"
    else
    printf -- 'ffmpeg failed - was unable to create frames-%s.jpg\n' "${frame_number}"
    fi
    done <text.txt

    编辑包括:
  • 简化脚本以使用 text.txt 中的帧号作为 jpeg 文件名。
  • 已启用 bash通过添加 set -x 进行调试.

  • 使用上面修改后的脚本,您应该能够看到 ffmpeg 的所有输出。每次运行。我的模拟测试表明,一切都应该按照您期望的结果正常运行。你能再次测试并报告你的发现吗?

    关于bash - 为什么我的 bash 脚本因 ffmpeg 而停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37241756/

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