ffmpeg 吃掉/无法从脚本中读取变量名
ffmpeg eats up / cannot read variable names from script
以下文本文件(“myTextFile.txt”)用于将视频剪切成块
00:00:00.0 video_name_1.mp4
00:10:00.1 video_name_2.mp4
00:20:00.1 video_name_3.mp4
第一列是切割点的时间戳[HH:MM:SS.millis]。
我用下面的命令读取txt文件,把一个叫“input_video.mp4”的视频剪成10秒一个的片段
while read line ; do
start_time=$(echo $line | cut -d' ' -f1);
output_name=$(echo $line | cut -d' ' -f2);
ffmpeg -ss $start_time -t 00:00:10.0 -i input_video.mp4 ${output_name};
done < myTextFile.txt
但它不起作用。输出文件名已损坏,我不知道为什么。我没有在输出文件名中使用任何特殊字符。为什么会这样?
我目前的解决方法是将最后一行(“ffmpeg ...”)打印到控制台中,然后将所有命令粘贴到控制台命令中,从而执行它们...
如评论所述,字段数不匹配。
您正在使用 -t
选项指定持续时间,而不是使用
stop_time
在你的 ffmpeg 命令中。此外,您还需要添加 -nostdin
选项来禁用通过标准输入的输入。那么请试试:
while read -r start_time output_name; do
ffmpeg -y -nostdin -ss "$start_time" -t 10 -i input_video.mp4 "$output_name"
done < myTextFile.txt
以下文本文件(“myTextFile.txt”)用于将视频剪切成块
00:00:00.0 video_name_1.mp4
00:10:00.1 video_name_2.mp4
00:20:00.1 video_name_3.mp4
第一列是切割点的时间戳[HH:MM:SS.millis]。
我用下面的命令读取txt文件,把一个叫“input_video.mp4”的视频剪成10秒一个的片段
while read line ; do
start_time=$(echo $line | cut -d' ' -f1);
output_name=$(echo $line | cut -d' ' -f2);
ffmpeg -ss $start_time -t 00:00:10.0 -i input_video.mp4 ${output_name};
done < myTextFile.txt
但它不起作用。输出文件名已损坏,我不知道为什么。我没有在输出文件名中使用任何特殊字符。为什么会这样?
我目前的解决方法是将最后一行(“ffmpeg ...”)打印到控制台中,然后将所有命令粘贴到控制台命令中,从而执行它们...
如评论所述,字段数不匹配。
您正在使用 -t
选项指定持续时间,而不是使用
stop_time
在你的 ffmpeg 命令中。此外,您还需要添加 -nostdin
选项来禁用通过标准输入的输入。那么请试试:
while read -r start_time output_name; do
ffmpeg -y -nostdin -ss "$start_time" -t 10 -i input_video.mp4 "$output_name"
done < myTextFile.txt