我已经编写了一个小的bash脚本来以批处理模式从视频文件中提取音频。
使用avconv(以及flac编解码器)将声音从每个mp4文件提取为flac格式。
#!/bin/sh
#
# Batch conversion of audio extraction from video
FOLDER_SRC="/home/Me/Music/TestBatchConv"
for myvid in $(find ${FOLDER_SRC} | grep mp4)
do
avconv -i $myvid -acodec flac "${myvid}.flac"
done
exit 0
它工作正常,但我想改进它。
如何测试文件是否为视频? 我试过像
这样的东西for myvid in $(find ${FOLDER_SRC})
do
if [ file -i $myvid | grep video ]
then avconv -i $myvid -acodec flac "${myvid}.flac"
fi
done
但我无法完成它(是的我是新手)。
任何帮助表示感谢。
答案 0 :(得分:2)
find ${FOLDER_SRC} -type f -exec file \{\} +
只有file
的一次调用,请参阅man find
并查找“-exec command {} +”
find ${FOLDER_SRC} -type f -exec file \{\} + |tr ' ' '°'
简单而充足。
另一种方法是使用mapfile
。
for line in $(find ${FOLDER_SRC} -type f -exec file \{\} + |tr ' ' '°')
do
file=${line%%:*}
file=${file//°/ }
content=${line#*:}
content=${content//°/ }
case "${content}" in
*video/mp2p*) myConvertFunctionA;;
*video/mpeg*) myConvertFunctionB;;
*video*) echo "found unsupported video type: ${content}";;
esac
done
case
很容易理解grep
答案 1 :(得分:1)
将您的新测试重写为
if file -i $myvid | grep -q video ; then
-q选项表示安静,因此如果grep找到搜索目标,则返回true
,如果没有,则返回false
。 if
会根据返回的true
或false
状态做出相应的响应。
与if
语句一起使用的大括号实际上是test
cmd的别名,所以类似
if [ $(file -i $myvid | grep video) = "video" ] ; then
也可以。
要学习如何正确处理这类事情,只需在命令行上工作,并一次添加一位,即
file -i $myvid
然后
file -i $myvid | grep video
OR
file -i $myvid | grep -q video ; echo $?
要看到反向,请改为
file -i $myvid | grep nonesuch ; echo $?
修改强>
要测试不止一件事,你可以使用egrep
,即
if file -i $myvid | egrep -q 'video|application/octet' ; then
IHTH
答案 2 :(得分:0)
使用'file'可以对付幻数,因此有时可能会出错。
我用'mplayer'来获取数据:
mplayer -ao null -vo null -endpos 0.01 ${MEDIAFILE} 2>/dev/null | egrep "AUDIO:|VIDEO:"
这将提供音频和视频匹配。您可以省略其中一个或向egrep添加'-c',以便进行匹配:
if [ `mplayer -ao null -vo null -endpos 0.01 ${MEDIAFILE} | egrep -c "VIDEO:"` -gt 0 ]; then
# HANDLE VIDEO FILE
fi
但是,由于您要从视频文件中提取音频,因此您可能希望确保要处理的视频文件也具有音频组件:
AVCHECK=`mplayer -ao null -vo null -endpos 0.01 ${MEDIAFILE} 2>/dev/null | egrep "AUDIO:|VIDEO:"`
if [ `echo "${AVCHECK}" | grep -c AUDIO` && `echo "${AVCHECK}" | grep -c VIDEO` ]; then
# STRIP AUDIO FROM VIDEO FILE
fi