我正在尝试将一堆视频.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!