ffmpeg:使用单个命令将多个输入文件转码为多个输出文件

时间:2014-01-17 11:28:52

标签: ffmpeg

我想用单一命令转换三个文件。我使用了以下命令。

-i "C:\fil1.mp4" -i "C:\file2.mp4" -i "C:\file3.mp4" -acodec libmp3lame -ab 32k -ar 22050 -ac 2 -b:v 128k -r 20 -s 176x144 -y file1.mp4 -acodec libmp3lame -ab 32k -ar 22050 -ac 2 -b:v 128k -r 20 -s 176x144 -y file2.mp4 -acodec libmp3lame -ab 32k -ar 22050 -ac 2 -b:v 128k -r 20 -s 176x144 -y file3.mp4

但它会转换第一个文件名为 fil1.mp4 fil2.mp4 fil3.mp4 ,但我想要所有< / strong>文件应使用其输出文件名进行转换。

6 个答案:

答案 0 :(得分:3)

使用-map有助于指定哪个输入符合哪个输出。

我使用此代码转换多个音频文件:

ffmpeg -i infile1 -i infile2 -map 0 outfile1 -map 1 outfile2

还使用-map_metadata指定元数据流:

ffmpeg -i infile1 -i infile2 -map_metadata 0 -map 0 outfile1 -map_metadata 1 -map 1 outfile2

答案 1 :(得分:0)

也许您可以尝试使用FFMPEG documentation中的Different parallel outputs

答案 2 :(得分:0)

我为此写了bash脚本。

您可以根据需要进行修改:

#!/bin/sh

BASE_DIR=$HOME/Videos/mov
OUTPUT_DIR=$BASE_DIR/avi
FILES=$(ls $BASE_DIR | grep .MOV)

for FILE in $FILES
do
    FILENAME="${FILE:0:-4}"
    ffmpeg -i $BASE_DIR/$FILE $OUTPUT_DIR/$FILENAME.avi
done

答案 3 :(得分:0)

我尝试了David Blum的脚本,文件名中存在空格问题。这是经过修改的脚本,它使用basename从文件名中删除文件扩展名。它在当前目录上运行,并假设有一个名为“ avi”的子目录:

#!/bin/sh

OUTPUT_DIR=./avi

#IFS=$'\n'  # split only on newlines
for FILE in *MOV
do
    FILENAME=`basename "${FILE}" .MOV`
    ffmpeg -i  "$FILE" "$OUTPUT_DIR/$FILENAME.avi"
    #echo $FILENAME
done

答案 4 :(得分:0)

当我需要处理更多文件时,创建一个电子表格,并使用“小孔”执行命令。

每个孔都匹配一个文件(文件名)。

我将文件复制/粘贴到脚本中。

我知道这对您有帮助并不是一个完美的选择。

答案 5 :(得分:-1)

找到./ -name“ * .wav” -exec ffmpeg -i {} -c:libopus {} .opus \;