我在一个文件夹中有几个视频;
~/Downloads/movie1.mkv
~/Downloads/movie2.mkv
~/Downloads/movie3.mkv
我想提取每个文件的比特率,并将数据输出到单个文本文件或输出列表中,我可以将其复制并粘贴到文本文件中。
我已经安装了ffmpeg。
因此,例如,的输出ffmpeg -i movie1.mkv
是;
Metadata:
encoder : libebml v1.2.0 + libmatroska v1.1.0
creation_time : 2011-04-09T18:18:05.000000Z
Duration: 00:04:27.71, start: 0.000000, bitrate: 10698 kb/s
Stream #0:0(eng): Video: h264 (High), yuv420p(progressive), 1920x1038, SAR 1:1 DAR 320:173, 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)
Metadata:
title : movie1
Stream #0:1(eng): Audio: dts (DTS), 48000 Hz, 5.1(side), fltp, 1536 kb/s (default)
Metadata:
title : DTS-ES 5.1 @ 1509 Kbps
Stream #0:2(eng): Audio: ac3, 48000 Hz, stereo, fltp, 192 kb/s
Metadata:
title : Commentary
Stream #0:3(eng): Subtitle: subrip
Stream #0:4(eng): Subtitle: subrip
“比特率:10698 kb/s”是我在这里追求的关键部分。
让我们假设所有三部电影都具有相同的比特率。
我想从所有三个视频中提取比特率信息,并将它们输出为;
movie1.mkv 10698
movie2.mkv 10698
movie3.mkv 10698
我将如何批量提取和输出这些信息?
我一直在尝试按文件名、ffmpeg 查找的组合,然后 | 到 grep。例如;find . -name "*.mkv" -exec ffmpeg -i "${1%.mkv}" | grep "bitrate:"
当前的尝试;
命令
ffmpeg -i movie1.mkv 2>&1 | grep bitrate | sed 's/bitrate: \(.*\), kb/\1/g'
返回
时长:00:04:27.71,开始:0.000000,比特率:10698 kb/s
命令
find . -name "*.mkv" -exec ffprobe -v error -show_entries format=bit_rate -of default=noprint_wrappers=1:nokey=1 "${~/Downloads/1%.mkv}" ';`'
返回
~/Downloads/1%.mkv:没有这样的文件或目录 ~/Downloads/1%.mkv:没有这样的文件或目录 ~/Downloads/1%.mkv:没有这样的文件或目录
我觉得我在这里很近,只是 find 有问题,并将 find 的输出召回到 ffprobe 中。
向屏幕:
归档 result.txt:
您将在文件 result.txt 中看到:
格式化输出示例:
您将在文件 result.txt 中看到: