bash 脚本:是否可以从文件中识别视频格式(从中批量提取音频)?

bash 脚本:是否可以从文件中识别视频格式(从中批量提取音频)?

我编写了一个小型 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

它运行良好,但我想改进它。

该脚本仅检测 mp4 格式。是否可以使用命令识别视频文件(而不是测试每种视频格式)?

谢谢你的建议。

答案1

您正在寻找file

例如

 $ file -b 01--Frank_Sinatra--Close_to_You_And_More--Close_to_You.m4a 
 Audio file with ID3 version 2.4.0, contains: ISO Media, MPEG v4 system, iTunes AAC-LC

它应该涵盖所有知名的媒体类型。如果缺少某些内容,您可以自行添加(请参阅man magic)。

答案2

要在 Bash 中测试,如果 $file 是视频文件,您可以使用

[[ $(ffprobe -v quiet -select_streams v:0 -show_entries stream=codec_name -print_format csv=p=0 "$file") ]] && echo $file is video

ffprobe由 ffmpeg 包提供。Ubuntu 14.04 在标准存储库中没有 ffmpeg,但您可以添加 ppa:mc3man/trusty-media 存储库并安装 ffmpeg 包以获取所需的软件。请参阅这里了解详情。

相关内容