【问题标题】:ffmpeg batch reencode with subfoldersffmpeg 使用子文件夹批量重新编码
【发布时间】:2016-10-04 21:15:57
【问题描述】:

我正在尝试将数百个视频重新编码为 X265,但有许多目录的文件名中包含空格,某些文件也是如此。我查看了一堆脚本,正在努力寻找一个适用于空间和不同目录级别的脚本。

只要没有子目录,这个就可以了:

#!/bin/bash
for i in *.avi;
do 
    ffmpeg -i "$i" -c:v libx265 -c:a copy X265_"$i"
done

我一直在尝试使用这个 bash 脚本,但它因我猜测的空格而失败。

#!/bin/bash
inputdir=$PWD
outputdir=$PWD
while IFS= read -r file ; do
  video=`basename "$file"`
  dir=`dirname "$file"`
 ffmpeg -fflags +genpts -i "$file" -c:v libx265 -c:a copy "$dir"/X265_"$video"
done < <(find "$inputdir" -name "*.avi" | head -100)

在这个线程上,它看起来是 Windows 用户的一个很好的解决方案,但不是 linux。 FFMPEG - Batch convert subfolders

FOR /r %%i in (*.mp4) DO ffmpeg32 -i "%%~fi" -map 0:0 -map 0:1 -map 0:1 -c:v copy -c:a:0 aac -b:a 128k -ac 2 -strict -2 -cutoff 15000 -c:a:1 copy "%%~dpni(2)%%~xi"

如果您能指出适合 bash 的正确解决方案,我将不胜感激。

【问题讨论】:

    标签: bash batch-file ffmpeg re-encoding


    【解决方案1】:

    这是findxargs 的典型场景

    find /path/to/basedir -name '*.avi' -print0 | xargs -0 convert.sh
    

    其中-print0-0 确保正确处理带有空格的名称。

    在 convert.sh 中,你有你的 for 循环,几乎和你的第一个脚本一样

    #!/bin/bash
    
    for i; do
        d=$(dirname "$i")
        b=$(basename "$i")
        ffmpeg -i "$i" -c:v libx265 -c:a copy "$d/X265_$b"
    done
    

    for i 没有任何内容与“对于所有给定参数”的含义相同,即 xargs 传递的文件。

    要在文件名前加上一个字符串,您必须将名称拆分为目录和基本部分,然后再将它们放在一起。

    【讨论】:

    • 感谢 Olaf,这看起来是一个优雅的解决方案,但是当它进入第一个目录时,它试图将 X265_ 添加到目录名称之前,我遇到了一个错误。我收到此错误:X265_./Sub Directory/File with Spaces.avi: No such file or directory
    • @Alan 这可能无法正常工作。也许它需要一些引号和转义,但我现在不在我的电脑前测试它。
    • 感谢@Olaf,您所做的编辑非常完美。
    【解决方案2】:

    使用xargs + sh -c,也可以通过将-I 变量——在本例中为FILE——作为位置参数传递给sh -c 来使用bourne 脚本替换作为$1 扩展:

    find . -name '*.flac' -print0 | \
    xargs -0 -I FILE \
    sh -c 'ffmpeg -i "$1" -c:a libfdk_aac -vbr 3 "${1%.flac}.m4a"' -- FILE
    

    在这里,我只是用${1%.flac} 去掉 .flac 扩展名并添加 m4a。

    【讨论】:

      猜你喜欢
      • 2013-04-15
      • 2015-08-22
      • 2012-05-04
      • 1970-01-01
      • 2011-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多