从视频中提取声音并添加ID3

1116_从视频中提取声音并添加ID3

笔记本的硬盘只有320g,最近下载了一些电影,所以硬盘有些紧张,在整理的过程中发现了一个11G的文件夹,里面都是袁腾飞老师的讲课视频。
想把它删掉,但又舍不得,纠结了半天,突然心生一计,反正都是讲课的,能听就行,何不把声音提取出来,即节省空间,还能放到手机里没事听听。

于是开始行动
从网上查得使用mencoder很不错
------------------------------------------------------------------------------
mencoder提取声音的方法如下
mencoder -o out.mp3 -ovc frameno -oac mp3lame -lameopts cbr:br=128 -of rawaudio -ss 1:30 -endpos 2:45 test.rmvb

在实际操作中,用户需要更改的就是那两个时间参数值了!该命令参数的详细说明如下:

-o out.mp3 输出的目标文件名称
-ovc frameno 不处理视频编码
-oac mp3lame 输出的音频编码格式为mp3
-lameopts cbr:br=128 音频附件选项,cbr(常量比特率)编码格式,音频码流为128bps(对于mp3来说,128已经足够了)
-of rawaudio 输出文件为原始音频流
-ss 1:30 音频截取的起始时间(表示从影片的第1分30秒开始截取)
-endpos 2:45 预截取音频的长度(表示预截取的音频长度是2分45秒,那么可以计算出其结束时间是4:15)
test.rmvb 输入源文件

举个简单例子:如果想截取影片中1:28:10~1:30:25这段时间的音频,则 -ss参数的值应该是88:10(1小时28分等于88分),-endpos参数的值应该是2:15(就是上面两个时间段的差值了),然后将实际参数值代入上面命令即可!

上面的示例选用的输入源文件是rmvb格式,当然了,像avi、mp4等格式的多媒体文件肯定也是可行的!

-ss参数使用参考示例:

-ss 10 从10秒开始
-ss 10:10 从10分10秒开始
-ss 1:10:10 从1小时10分10秒开始

-endpos参数使用参考示例:

-endpos 10 编码的时间为10秒
-endpos 10:10 编码的时间为10分10秒
-endpos 1:10:10 编码的时间为1小时10分10秒
-endpos 10mb 编码数据量为10M

------------------------------------------------------------------------------
为了方便操作(毕竟有一个文件夹,几十个文件要处理)于是我写了个脚本
内容如下

#!/bin/bash

# mencoder -o out.mp3 -ovc frameno -oac mp3lame -lameopts cbr:br=128 -of rawaudio -ss 1:30 -endpos 2:45 test.rmvb
for x in *
do
mencoder -o $x.mp3 -ovc frameno -oac mp3lame -lameopts cbr:br=64 -of rawaudio $x
done

这样在那个视频文件夹中运行这个脚本就ok了

------------------------------------------------------------------------------
还一个问题是这样提取出来的mp3 是没有ID3的,为了日后使用方便,角定手动加之

修改id3 依靠mid3v2
装完mutagen就有mid3v2这个工具:

软件的使用说明如下
mid3v2                                    
Usage: mid3v2 [OPTION] [FILE]...

Mutagen-based replacement for id3lib's id3v2.

Options:
  --version             show program's version number and exit
  -h, --help            show this help message and exit
  -v, --verbose         be verbose
  -q, --quiet           be quiet (the default)
  -f, --list-frames     Display all possible frames for ID3v2.3 / ID3v2.4
  --list-frames-v2.2    Display all possible frames for ID3v2.2
  -L, --list-genres     Lists all ID3v1 genres
  -l, --list            Lists the tag(s) on the file(s)
  --list-raw            Lists the tag(s) on the file(s) in Python format
  -d, --delete-v2       Deletes ID3v2 tags
  -s, --delete-v1       Deletes ID3v1 tags
  -D, --delete-all      Deletes ID3v1 and ID3v2 tags
  --delete-frames=FID1,FID2,...
                        Delete the given frames
  -C, --convert         Convert tags to ID3v2.4 (any editing will do this)
  -a "ARTIST", --artist="ARTIST"
                        Set the artist information
  -A "ALBUM", --album="ALBUM"
                        Set the album title information
  -t "SONG", --song="SONG"
                        Set the song title information
  -c "DESCRIPTION":"COMMENT":"LANGUAGE", --comment="DESCRIPTION":"COMMENT":"LANGUAGE"
                        Set the comment information
  -g "GENRE", --genre="GENRE"
                        Set the genre or genre number
  -y YYYY[-MM-DD], --year=YYYY[-MM-DD], --date=YYYY[-MM-DD]
                        Set the year/date
  -T "num/num", --track="num/num"
                        Set the track number/(optional) total tracks
You can set the value for any ID3v2 frame by using '--' and then a frame ID.
For example:
        mid3v2 --TIT3 "Monkey!" file.mp3
would set the "Subtitle/Description" frame to "Monkey!".

Any editing operation will cause the ID3 tag to be upgraded to ID3v2.4.
-----------------------------------------------------------------------

我希望ID3 的格式为 歌曲名是“文件名(去掉后缀)” 专辑是“文件夹名”(因为不同章节的课程在不同的文件夹中)  演唱者是“袁腾飞”
于是写了下面的脚本

#!/bin/bash
DIR=`basename $(pwd)`
for x in *.mp3
do
FILE=`basename $x .mp3`
mid3v2 -t"$FILE" -A"$DIR" -a"袁腾飞" $x
done

ok大功告成

你可能感兴趣的:(视频,职场,mencoder,休闲,mid3v2)