如何在 bash "for loop"中使用 ffmpeg 流复制?



好的,我有这个,它可以工作,但它很慢

for i in *.mov;
do name=`echo "$i" | cut -d'.' -f1`
echo "$name"
ffmpeg -i "$i" "${name}.mp4"
done

我希望它使用这些 ffmpeg 选项进行转换

ffmpeg -i movie.mov -vcodec copy -acodec copy out.mp4

参数扩展就足够了;你不需要涉及cut的管道。

for i in *.mov; do
name=${i%%.mov}  # i=foo.mov => name=foo
ffmpeg -i "$i" "$name.mp4"
done

未经测试,但如果它太慢并且您有一个多核 CPU,您应该能够与GNU 并行执行它们:

parallel ffmpeg -i {} -vcodec copy -acodec copy {.}.mp4 ::: *.mov

如果你想先看看它会做什么,而不实际做任何事情:

parallel --dry-run ffmpeg -i {} -vcodec copy -acodec copy {.}.mp4 ::: *.mov

注意:在macOS上,只需使用以下自制软件安装这两个软件包:

brew install ffmpeg
brew install parallel 

使用:

for i in *.mov; do ffmpeg -i "$i" -c copy "${i%.*}.mp4"; done
  • -c copy-vcodec copy -acodec copy相同。
  • 改编自 如何使用 ffmpeg 转换整个目录?

最新更新