我使用ffmpeg批处理目录中的所有文件(名称中包含空格)。脚本就像:
echo my converter
read -p "Enter give folder: " folder
echo '//////////////////////START CONVERTING FROM FOLDER///////////////////////'
find $folder -type f -name "*[[:space:]]*" | while read file; do
release="${file%%.*}"'_t.mp4';
echo "$file";
ffmpeg -i "$file" -c copy "$release" -loglevel error -stats
echo $release;
done
该脚本搜索地址和ffmpeg中的所有文件一个接一个。但是,由于一些未知的问题,第一个文件总是会失败:
[mpegts @ 0x7fb8e9904a40] Continuity check failed for pid 17 expected 2 got 3
[mpegts @ 0x7fb8e9904a40] Continuity check failed for pid 0 expected 0 got 2
[mpegts @ 0x7fb8e9904a40] Continuity check failed for pid 4096 expected 0 got 2
[mpegts @ 0x7fb8e9904a40] Continuity check failed for pid 256 expected 2 got 7
[mpegts @ 0x7fb8e9904a40] Packet corrupt (stream = 0, dts = 203523000).
/Users/xy/Downloads/aaa/aa vv.ts: corrupt input packet in stream 0
[NULL @ 0x7fb8e9905a40] Decoding VUI
如果只有一个文件,则该过程工作正常。如果注解掉ffmpeg命令,它会按预期回显:
/Users/xy/Downloads/aaa/aa vv_t.mp4
/Users/xy/Downloads/aaa/aa vv_t_t.mp4
/Users/xy/Downloads/aaa/aa vv.ts
/Users/xy/Downloads/aaa/aa vv_t.mp4
/Users/xy/Downloads/aaa/cc ee.ts
/Users/xy/Downloads/aaa/cc ee_t.mp4
它首先找到目标文件,然后转换成另一个不同的文件名。任何建议,谢谢!!
1条答案
按热度按时间mrfwxfqh1#
至少将您的代码更改为以下内容作为起点:
正如您使用的bash标签所指示的那样-“对于有语法或其他错误的shell脚本,请在将它们发布到这里之前在http://shellcheck.net上检查它们。"我希望shellcheck已经警告过你我上面纠正的大多数问题。
有关我所做的
ffmpeg
更改的更多信息,请参见https://mywiki.wooledge.org/BashFAQ/089。参见https://mywiki.wooledge.org/BashFAQ/001和https://mywiki.wooledge.org/Quotes。顺便说一下,“文件夹”是Windows术语,在Unix中它是一个“目录”。