gpt4 book ai didi

ffmpeg循环中的bash变量变化

转载 作者:行者123 更新时间:2023-11-29 09:21:03 24 4
gpt4 key购买 nike

我编写了一个 skript,可以根据我在时间戳记上录制的视频快速创建简短的预览剪辑,我发现这些视频值得稍后检查以进行剪辑。我的带有时间戳的文件是这样写的

FILE_NAME1#MM:SS MM:SS
FILE_NAME2#MM:SS MM:SS MM:SS MM:SS

例子:

MAH01728#02:47 03:34 03:44 05:00 06:08 06:55

脚本如下所示:

#!/bin/bash
while read f
do

file=$(echo $f | cut -d"#" -f1)
filename=${file}".MP4"
timestamps=$(echo $f | cut -d"#" -f2)

for time in $timestamps
do
ffmpeg -ss 00:${time}.0 -i "orig/${filename}" -c copy -t 10 "preview/${file}_${time}.MP4"
done
done < $1

脚本获得了我想要的一半预览,而另一方面文件名被弄乱了,ffmpeg 提示找不到文件:

orig/714.MP4: No such file or directory
orig/00:58 01:25.MP4: No such file or directory

所以我修改了脚本以解决问题,并在 ffmpeg 命令前面放了一个 echo - 现在所有文件名都是正确的。我错过了什么?

ffmpeg -ss 00:01:47.0 -i orig/MAH01714.MP4 -c copy -t 10 preview/MAH01714_01:47.MP4
ffmpeg -ss 00:02:00.0 -i orig/MAH01713.MP4 -c copy -t 10 preview/MAH01713_02:00.MP4
ffmpeg -ss 00:00:58.0 -i orig/MAH01712.MP4 -c copy -t 10 preview/MAH01712_00:58.MP4
ffmpeg -ss 00:01:25.0 -i orig/MAH01712.MP4 -c copy -t 10 preview/MAH01712_01:25.MP4

最佳答案

ffmpeg 从标准输入读取数据,使用来自 $1 的数据,这些数据是为循环顶部的 read 命令准备的。从 /dev/null 重定向其标准输入:

while IFS="#" read file timestamps; do
filename="$file.MP4"
for time in $timestamps; do
ffmpeg -ss 00:${time}.0 -i "orig/${filename}" \
-c copy -t 10 "preview/${file}_${time}.MP4" < /dev/null
done
done < "$1"

echo 从标准输入中读取,这就是为什么您的修改使其看起来正常工作的原因。

关于ffmpeg循环中的bash变量变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52374260/

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