如何从视频中批量提取比特率数据并将其输出到文本文件中?

如何从视频中批量提取比特率数据并将其输出到文本文件中?

我在一个文件夹中有几个视频;

~/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:"

目前的尝试;

  1. 命令

    ffmpeg -i movie1.mkv 2>&1 | grep bitrate | sed 's/bitrate: \(.*\), kb/\1/g'
    

    返回

    时长:00:04:27.71,开始:0.000000,比特率:10698 kb/s

  2. 命令

    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 中出了问题。

答案1

向屏幕:

find . -name "*.mkv" -print0 | xargs -0 -i{} sh -c " echo -n '{} ' && ffmpeg -i '{}' 2>&1 | sed -n -e 's/^.*bitrate: //p' "

到文件result.txt:

find . -name "*.mkv" -print0 | xargs -0 -i{} sh -c " echo -n '{} ' && ffmpeg -i '{}' 2>&1 | sed -n -e 's/^.*bitrate: //p' " > result.txt

您将在文件 result.txt 中看到:

somefile1.mkv 1788 kb/s
somefile2.mkv 1681 kb/s
...

格式化输出示例:

find . -name "*.mkv" -print0 | xargs -0 -i{} sh -c " echo -n 'Filename: {}, Bitrate is: ' && ffmpeg -i '{}' 2>&1 | sed -n -e 's/^.*bitrate: //p' " > result.txt

您将在文件 result.txt 中看到:

Filename: somefile1.mkv, Bitrate is: 1788 kb/s
Filename: somefile2.mkv, Bitrate is: 1681 kb/s
...

相关内容