将 .ts 视频转换为 .mp4,并将 find 通过管道传输到 while 和 ffmpeg?

将 .ts 视频转换为 .mp4,并将 find 通过管道传输到 while 和 ffmpeg?

我正在尝试将一堆视频.ts文件转换为.mp4,但我认为我必须采取的方式是,在查找文件时将find结果通过管道传输到while循环中,ffmpeg在每个文件上执行,然后删除.ts已转换的旧文件。这就是我通过 find 得到的结果:

$ find ./ -iname "*.ts"
./Parent-Dir/video1.ts
./Parent-Dir/video2.ts
./Parent-Dir/video3.ts
./Parent-Dir/video4.ts
..
..
.. about a 100 more videos ..

我可以用find一个循环来做到这while一点吗?

find ./ -iname "*.ts" | while IFS= read video
do
  ffmpeg -i "${video}" -c:v libx264 -c:a aac "${video}".mp4 
  rm -f ${video}.ts
done

答案1

要获得正确的文件名,您应该更改

ffmpeg -i "${video}" -c:v libx264 -c:a aac "${video}".mp4 

ffmpeg -i "${video}" -c:v libx264 -c:a aac "${video%.*}".mp4 

也可以更好地使用,for例如:

for video in **/*.ts

这不会捕获.TS,但会处理更好的搜索

并在删除文件时始终添加引号:

rm -f "${video}"

答案2

毕竟,这对我来说非常有效:

find ./ -iname "*.ts" \
  | while IFS= read -r video; do
    ffmpeg -nostdin -i "${video}" -c:v libx264 -c:a aac "${video%.*}".mp4
    rm -f "${video}"
  done

video.ts它会将其转换为video.mp4.正是我一直在寻找的东西!灵感来自这个答案。感谢您的帮助@Romeo Ninov!

相关内容