如果我想遍历嵌套目录列表并运行set命令,我该怎么做?
我的目录结构如下:
我需要循环遍历每个文件夹并运行下面的脚本..所有的.mp4文件都命名为VTS_01_1.mp4,但是我想用* .mp4通配符条件来做它们不是因为它们不是。每个目录中的输出文件应为“VTS_01_h264.mp4”。想法?我正在使用CentOS 6.4。
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"
答案 0 :(得分:2)
find
命令在这些方面非常强大,请尝试:
find videos/ -name "*.mp4" -exec ffmpegScript {} \;
这将查找.mp4
结尾的所有文件(也在子目录中)并执行ffmpegScript nameOfMp4File
,其中nameOfMp4File
是找到的文件的名称,一次一个。 find
负责循环。
现在我们需要定义ffmpegScript
:
#!/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
文件。
答案 1 :(得分:2)
#!/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中: -
#!/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----------