我编写了一个脚本,用于根据我在时间戳上录制的视频快速创建简短的预览剪辑,我发现这些视频值得稍后查看以进行剪辑。
我的带有时间戳的文件是这样写的
FILE_NAME1#MM:SS MM:SS
FILE_NAME2#MM:SS MM:SS MM:SS MM:SS
example:
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
does not从标准输入读取,这就是为什么您的修改使它看起来工作正常。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)