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

ffmpeg:使用单个命令将多个输入文件转换为多个输出文件,ffmpeg,Ffmpeg,我想用一个命令转换三个文件。我使用了以下命令: -Ic:\fil1.mp4-Ic:\file2.mp4-Ic:\file3.mp4-acodec libmp3lame-ab 32k-ar 22050-ac2-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-a

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

-Ic:\fil1.mp4-Ic:\file2.mp4-Ic:\file3.mp4-acodec libmp3lame-ab 32k-ar 22050-ac2-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但我希望所有文件都应使用其输出文件名进行转换。

也许您可以尝试使用不同的并行输出,如?

也许您可以尝试使用不同的并行输出,如?

使用-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
使用-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

我为此编写了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

我为此编写了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

我试过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

我试过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

find./-name*.wav-exec ffmpeg-i{}-c:a libopus{}.opus\

find./-name*.wav-exec ffmpeg-i{}-c:a libopus{}.opus\

当我有更多的文件要处理时,我会创建一个电子表格,并使用孔来执行命令

每个孔都匹配一个文件名

我复制/粘贴到一个文件中,该文件将成为脚本


我知道如果它能帮助你的话,这不是一个完美的赌注。

当我有更多的文件要处理时,我会创建一个电子表格,然后用孔来执行命令

每个孔都匹配一个文件名

我复制/粘贴到一个文件中,该文件将成为脚本


我知道如果它能帮助您,那就不是完美的选择。

谢谢您的参与。cubitouch您可以看到我的命令满足FFMPEG文档中给出的标准,即FFMPEG-i input1-i input2 \-acodec-vcodec。。输出1 \-acodec-vcodec。。输出2 \-acodec-vcodec。。output3.@Abubakar为什么不尝试分解-acodec libmp3lame-ab 32k-ar 22050-ac 2-b:v 128k-r 20-s 176x144部分,然后尝试并行化编码?很抱歉,我做不到。那么并行编码呢?谢谢你的参与。cubitouch您可以看到我的命令满足FFMPEG文档中给出的标准,即FFMPEG-i input1-i input2 \-acodec-vcodec。。输出1 \-acodec-vcodec。。输出2 \-acodec-vcodec。。output3.@Abubakar为什么不尝试分解-acodec libmp3lame-ab 32k-ar 22050-ac 2-b:v 128k-r 20-s 176x144部分,然后尝试并行化编码?很抱歉,我做不到。那么并行编码呢?请参见,是否可以从多个音频文件和单个图像创建多个视频-y-i input1.mp3-i input2.mp3-f image2-loop 1-r 2-i imagefile.png-shortest-c:a aac-c:v mpeg4-crf 18-preset veryfast-movflags faststart-map 0 output1.mp4-map1 output2.mp4Hmm不确定。可能如果你找不到已经发布的问题,我建议你在这个网站上提出这个问题。是否可以从多个音频文件和一张图像创建多个视频-y-i input1.mp3-i input2.mp3-f image2-loop 1-r 2-i imagefile.png-shortest-c:a aac-c:v mpeg4-crf 18-preset veryfast-movflags faststart-map 0 output1.mp4-map1 output2.mp4Hmm不确定。可能如果你找不到已经发布的问题,我建议你在这个网站上提出这个问题。虽然这段代码可能会解决这个问题,但如何以及为什么解决这个问题会真正有助于提高你的帖子质量,并可能导致更多的投票。请记住,你是在将来回答读者的问题,而不仅仅是现在提问的人。请回答你的解释,并给出什么限制和假设的应用。考虑用SyelCuth.NET检查过复杂的脚本。有几个问题需要解决。该问题明确指出ffmpeg只应调用一次。您的解决方案会在每个输入文件中调用它一次。虽然这段代码可能会解决这个问题,但如何以及为什么解决这个问题将真正有助于提高您的帖子质量,并可能导致更多的投票。记住,你是answ
这是一个未来读者的问题,而不仅仅是现在提问的人。请回答你的解释,并给出什么限制和假设的应用。考虑用SyelCuth.NET检查过复杂的脚本。有几个问题需要解决。该问题明确指出ffmpeg只应调用一次。您的解决方案在每个输入文件中调用它一次。可能有助于简化此命令。可能有助于简化此命令;做ffmpeg-i$i-crf 24~/$i;使用Bash可以在一系列文件上运行ffmpeg:对于MVI_{2967..2970}.MOV中的i;做ffmpeg-i$i-crf 24~/$i;完成