我的驱动器中包含许多MP4文件,很难逐个文件夹进行压缩。
我试图制作一个在终端中运行的脚本,该脚本将打开一个指定的文件夹,在子文件夹中找到所有.mp4文件,并使用我用ffmpeg指定的规范压缩这些文件。显然,如果处理正确,输出文件的大小应该小得多。我正在起草下面的代码,但对BASH和/或PERL不太满意。
databaseReference.child("posts").orderByChild("starsCount")
.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, String previousChildName) {
Post p = dataSnapshot.getValue(Post.class);
postKeys.add(dataSnapshot.getKey());
postList.add(p);
postAdapter.notifyItemInserted(postList.size() - 1);
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, String previousChildName) {
Post p = dataSnapshot.getValue(Post.class);
int index = postKeys.indexOf(dataSnapshot.getKey());
if (index > -1) {
postList.set(index, p);
postAdapter.notifyItemChanged(index);
}
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
int index = postKeys.indexOf(dataSnapshot.getKey());
if (index > -1) {
postList.remove(index);
postKeys.remove(index);
postAdapter.notifyItemRemoved(index);
}
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, String previousChildName) {
// what I add here????
/* int fromPosition;
int toPosition;
postAdapter.notifyItemMoved(fromPosition, toPosition);*/
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
输出:
for f in $(find ../ -iname '*.avi'); do
n=$(echo $f|sed -e 's/.avi/_cbr.mp4/i');
echo "ffmpeg [options] -i $f $n";
done
我想知道我是否也可以为此做一些GUI。我感到有点迷茫。
答案 0 :(得分:0)
您可以像这样在bash中递归遍历目录:
avi_to_mp4() {
cd "$1"
for f in *; do
if [[ -d "$f" ]]; then
avi_to_mp4 "$f"
elif [[ "$f" == *.avi ]]; then
newf="${f:0: -4}.mp4"
echo "$f" to "$newf" # run your command here
fi
done
cd ..
}
avi_to_mp4 "$1"