本文是利用 FFMPEG 的功能实现的。
生成 file.txt
文件
因为缓存文件都是数字,且文件夹内还有其他文件,包括 index.*
的文件。
$ ls -1v --hide=file.txt --hide=index* > file.txt
解释
ls -1v
中v
表示按照把文件按照数字的大小排序,1
表示按行显示。--hide
用于隐藏其他文件,因为file.txt
也会被写入到file.txt
,所以也要把他隐藏了。
对file.txt
文件再处理,生成每行类似file '1'
的样式。
$ sed "s/.*/file '&'/" file.txt > file2.txt
$ mv file2.txt file.txt
解释
- 第一行实现对每一行行首行尾分别添加
file '
和'
内容。 - 第二行,重命名,替换掉中间文件。
参考网页:
- https://unix.stackexchange.com/questions/33909/list-files-sorted-numerically
- https://www.shellhacks.com/sed-awk-add-end-beginning-line/
生成 MP4 文件
$ ffmpeg -f concat -i file.txt -c copy film.mp4
做成一个 bash 脚本
下面是完整的代码
#!/bin/bash
# ucvideo
if [ -z $2 ]; then
echo "语法: $0 <UC浏览器视频缓存文件夹> <输出文件>"
exit 1
fi
if [ -e $2 ]
then
echo "已经存在 $2 文件,请更改输出文件名字!"
exit 1
fi
if [ -d $1 ]
then
cd $1
else
echo "无法进入 $1 文件夹!"
fi
find ./ -size -1b -exec rm {} \; # 删除空文件
ls -1v --hide=file.txt --hide=index* > file.txt
sed "s/.*/file '&'/" file.txt > file2.txt
mv file2.txt file.txt
if [ -e $2 ]
then
mv $2 $2.bk
fi
ffmpeg -f concat -i file.txt -c copy $2
rm file.txt
if [ -e file.txt.bk ]
then
mv file.txt.bk file.txt
fi
cd -
mv $1/$2 .
cd $1
if [ -e $2.bk ]
then
mv $2.bk $2
fi
当然为了方便直接使用,把他放在*/usr/local/bin/ucvideo*。 并为之添加执行权限
$ chmod u+x /usr/local/bin/ucvideo
当你从手机上复制缓存文件夹过来,就可以
$ ucvideo /<指向缓存文件夹>/ <电影名称>.mp4