首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Shell脚本-通过目录循环?

Shell脚本-通过目录循环?
EN

Stack Overflow用户
提问于 2013-11-22 15:38:19
回答 2查看 1K关注 0票数 1

如果我想遍历嵌套目录的列表并运行一个set命令,我将如何做到这一点?

我的目录结构如下:

  • 视频
    • folder1 -> VTS_01_1.mp4
    • folder2 -> VTS_01_1.mp4
    • folder3 -> VTS_01_1.mp4 ..。诸若此类

我需要循环遍历每个文件夹并运行下面的脚本。所有的.mp4文件都被命名为VTS_01_1.mp4,但是我想使用*.mp4通配符条件来实现,以防它们不是。每个目录中的输出文件应该是"VTS_01_h264.mp4“。想法?我使用的是CentOS 6.4。

代码语言:javascript
复制
ffmpeg -y -i "VTS_01_1.mp4" -an -pass 1 -threads 2 -vcodec libx264 -b 512k -flags +loop+mv4 -cmp 256 \
       -partitions +parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 \
       -me_method hex -subq 7 -trellis 1 -refs 5 -bf 3 \
       -flags2 +bpyramid+wpred+mixed_refs+dct8x8 -coder 1 -me_range 16 \
           -g 250 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -qmin 10\
       -qmax 51 -qdiff 4 "video_tmp.mp4"



ffmpeg -y -i "VTS_01_1.mp4" -acodec libfaac -ar 44100 -ab 96k -pass 2 -threads 2 -vcodec libx264 -b 512k -flags +loop+mv4 -cmp 256 \
       -partitions +parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 \
       -me_method hex -subq 7 -trellis 1 -refs 5 -bf 3 \
       -flags2 +bpyramid+wpred+mixed_refs+dct8x8 -coder 1 -me_range 16 \
           -g 250 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -qmin 10\
       -qmax 51 -qdiff 4 "video_tmp.mp4"



qt-faststart "video_tmp.mp4" "VTS_01_h264.mp4"
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-22 15:53:21

在这种情况下,find命令非常强大,请尝试:

代码语言:javascript
复制
find videos/ -name "*.mp4" -exec ffmpegScript {} \;

这将查找所有以.mp4结尾的文件(也在子目录中),并执行ffmpegScript nameOfMp4File,其中nameOfMp4File是找到的文件的名称,每次一个。find负责循环本身。

现在我们需要定义ffmpegScript

代码语言:javascript
复制
#!/usr/bin/env bash

inputFile="$1"
outputFile="$(dirname $1)"/VTS_01_h265.mp4

ffmpeg -y -i "$inputFile" -acodec libfaac -ar 44100 -ab 96k -pass 2 -threads 2 -vcodec libx264 -b 512k -flags +loop+mv4 -cmp 256 \
   -partitions +parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 \
   -me_method hex -subq 7 -trellis 1 -refs 5 -bf 3 \
   -flags2 +bpyramid+wpred+mixed_refs+dct8x8 -coder 1 -me_range 16 \
       -g 250 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -qmin 10\
   -qmax 51 -qdiff 4 "video_tmp.mp4"

qt-faststart "video_tmp.mp4" "$outputFile"

inputFile变量设置为传递给ffmpegscript的第一个位置参数,outputFile变量以相同的路径设置,但设置的basename不同。

注意:如果一个目录中有多个*.mp4文件,此脚本将覆盖您的输出文件。而且,我没有尝试整个脚本,因为这里没有任何*.mp4文件可用。

票数 2
EN

Stack Overflow用户

发布于 2013-11-22 17:04:50

代码语言:javascript
复制
#!/usr/bin/env bash

set -x

#----------+code----------
find *.mp4 -maxdepth 3 -type f | while read files
do
./ffmpeg.sh "${files}"

qt-faststart "${files}_tmp.mp4" "VTS_01_h264.mp4"
done
#----------.code----------

在ffmpeg.sh中:-

代码语言:javascript
复制
#!/usr/bin/env bash

set -x

#----------+code----------
ffmpeg -y -i "${1}" -an -pass 1 -threads 2 -vcodec \
    libx264 -b 512k -flags +loop+mv4 -cmp 256 \
   -partitions +parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 \
   -me_method hex -subq 7 -trellis 1 -refs 5 -bf 3 \
   -flags2 +bpyramid+wpred+mixed_refs+dct8x8 -coder 1 -me_range 16 \
   -g 250 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -qmin 10\
   -qmax 51 -qdiff 4 "${1}_tmp.mp4"
#----------.code----------
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20148727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档