我有一个 mylist.txt 文件列表,其中包含视频,其文件名的结构一致,如下:
2021_03_18_19_30_02.avi
2021_03_18_19_41_02.avi
...
我正在使用 ffmpeg 将所有文件连接成一个文件,如下所示:
ffmpeg -f concat -safe 0 -i mylist.txt -c copy output.avi
但是,我希望output.avi
使用提供的列表中最早的文件名进行重命名(在本例中为 2021_03_18_19_30_02.avi)。一旦将原始文件拼接在一起,我就不需要保留它们了。
我该如何在 win 命令行或者 Linux bash 中做到这一点?
答案1
我不知道 ffmpeg 何时截断输出文件,是在开始处理输入文件之前还是之后。为了避免过早破坏第一个输入文件,我会让 ffmpeg 写入 output.avi,然后如果 ffmpeg 成功退出重命名:
ffmpeg -f concat -safe 0 -i mylist.txt -c copy output.avi \
&& mv output.avi "$(head -1 mylist.txt)"
甚至使用随机生成的输出名称:
output=$(mktemp)
ffmpeg -f concat -safe 0 -i mylist.txt -c copy "$output" \
&& mv "$output" "$(head -1 mylist.txt)"
自动删除输入文件:
output=$(mktemp)
if ffmpeg -f concat -safe 0 -i mylist.txt -c copy "$output"; then
filename=$(head -1 mylist.txt)
xargs rm < mylist.txt
mv "$output" "$filename"
else
rm "$output"
fi