我有一个文件夹 A,里面有 mp4 音频。文件夹 B 里面有 mp4 视频。文件名匹配,只是它们位于不同的文件夹中。
这些是电影文件,下载后分为两个单独的文件。现在我想使用 FFMPEG 将它们合并在一起。
我有一个包含 100 多个文件的很长的列表,因此我试图使该过程自动化。
我尝试了以下代码的许多不同组合:下面的代码不起作用,出现了错误并且没有运行该过程:
audiopath="/Audio"
for i in /Video/*.mp4
do
if ! [[ -e "$ audiopath /${i##*/}" ]]
then
>&2 echo "no matching file in $ audiopath for $i"
continue
fi
out="${i##*/}"
out="/Movies/${out%.*}-$(%title)"
ffmpeg -i <(printf '%s\n' "file '$i'") -i ("file '$ audiopath /${i##*/}'") -c:v copy -c:a copy "$out.mp4"
done
如果我使用下面的交换并将其与上面的代码 1 一起使用,它会将文件一个接一个地连接起来,但我听不到声音,只有一段长视频。
ffmpeg -f concat -safe 0 -i <(printf '%s\n' "file '$i'" "inpoint 0" "file '$seconddirectory/${i##*/}'" "inpoint 0") -c copy "$out.mp4"
第二段代码可以工作,但是当然必须手动完成:
ffmpeg -i video.mp4 -i audio.mp4 -c:v copy -c:a copy OUTPUT_FILE.mp4
经过几个小时,我来这里寻求帮助。有人知道如何修复此代码或可以给我指出正确的方向吗?