我有一个命令可以获取文件夹中的任何视频,将其.ts
分段转换并创建一个m3u8
播放列表。
然后我需要将它们连接到一个文件中playlist.txt
,所以这就是我正在做的:
cd /var/myfolder && find ./ -name "*.*" -exec ffmpeg -i {} -c:v h264 -crf 1 -flags +cgop -g 30 -hls_time 1 -hls_list_size 0 {}.m3u8 2>&1 > /dev/null \; && ls /var/myfolder/*.m3u8 | sed "s:.*/::" | xargs -i echo file {} > /var/myfolder/playlist.txt && echo done';
第一个和第二个命令工作(在文件夹中进行 cd 并进行 ffmpeg 转换),然后命令&& ls /var/myfolder/*.m3u8 | sed "s:.*/::" | xargs -i echo file {} > /var/myfolder/playlist.txt && echo done';
不执行。
我不明白为什么不执行第三个命令。
答案1
您不能在find -exec
.
xargs
默认为echo
... 但由于您已经cd
进入目录,我们可以大大简化最后一行并去掉xargs
和sed
。
cd /var/myfolder &&
find ./ -name "*.*" -exec ffmpeg -i {} -c:v h264 -crf 1 -flags +cgop -g 30 -hls_time 1 -hls_list_size 0 {}.m3u8 \; 2>&1 > /dev/null &&
printf 'file %s\n' *.m3u8 > /var/myfolder/playlist.txt &&
echo done