代码必须在子目录中找到所有MP4文件,才能使用ffmpeg进行压缩

时间:2019-06-22 17:33:12

标签: bash macos shell ffmpeg terminal

我的驱动器中包含许多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。我感到有点迷茫。

1 个答案:

答案 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"