我想用单一命令转换三个文件。我使用了以下命令。
-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>文件应使用其输出文件名进行转换。
答案 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 \;