媒体管理脚本
项目描述
媒体管理脚本
这是一个用于管理媒体文件(如电影或电视节目)的命令行工具集合。
它还简化了一些常见任务,例如通过封装复杂的ffmpeg
命令来转换文件。
例如,要将文件转换为带有GPU加速和AAC音频的H.265/HEVC,并将其缩放到480p,您通常需要运行类似以下命令
ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i test.mp4 -vf scale=-1:480 -c:v hevc_nvenc -preset fast -c:a aac -c:s copy -map 0 out.mp4
使用此工具包,它会变成这样
manage-media convert --hw-nv --scale 480 --vc h265 test.mp4 out.mp4
安装
安装工具
pip install media_management_scripts
您还需要安装ffmpeg
(用于大多数命令)和dialog
(用于少数命令)。
MacOS
brew install ffmpeg dialog
Debian/Ubuntu
sudo apt update && sudo apt install ffmpeg dialog
大多数发行版都有一个较旧的ffmpeg
版本(应该仍然可以使用!)。您可以通过以下说明安装较新版本:这里.
TVDB
如果您想使用TVDB执行某些命令,请在https://www.thetvdb.com上创建一个账户,并在此处创建一个遗留API密钥这里
创建一个内容为的文件 ~/.config/tvdb/tvdb.ini
[tvdb]
username = <your_user_name>
userkey = <your_user_key>
apikey = <your_api_key>
用法
将--help
传递给子命令以获取详细帮助。以下详细介绍了主要功能。
大多数重命名或移动文件的命令都有一个模拟运行模式(-n
或--dry-run
),这将输出操作而不执行,以便您可以验证计划。
主要工具
帮助输出
usage: manage-media [-h] [-v]
Sub commands
create-test-video Create a test video file with the specified definitions
combine-subtitles Combine a video files with subtitle file
combine-all Combine a directory tree of video files with subtitle file
concat-mp4 Concat multiple mp4 files together
convert Convert a file
executables Print the executables that will be used in other commands
find-episodes Find Season/Episode/Part using file names
itunes Attempts to rename iTunes episodes to the standard Plex format.
metadata Show metadata for a file
compare Compare metadata between files
compare-directory Compare metadata for files in a directory
movie-rename Renames a file based on TheMovieDB
rename Renames a set of files to the specified template
search Search for video files matching the specified parameters
select-streams Extract specific streams in a video file to a new file
subtitles Convert subtitles to SRT
thumbnail Extract a number of thumbnails from a video
tv-rename Renames files in a directory to sXXeYY. Can also use TVDB to name files (<show> - SxxeYY - <episode_name>)
optional arguments:
-h, --help show this help message and exit
-v, --version Display version
convert
管理媒体转换 <输入> <输出>
将视频文件转换为不同的视频或音频编解码器。默认情况下,如果没有指定编解码器,文件将转换为H.264,音频为AAC。
源文件保持不变。
示例
- 转换为H.264
manage-media convert --video-codec h264 <输入> <输出>
- 转换为HEVC/H.265
manage-media convert --video-codec hevc <输入> <输出>
- 转换为HEVC,音频使用AC3
manage-media convert --video-codec hevc --audio-codec ac3 <输入> <输出>
- 转换为HEVC,但不转换音频
manage-media convert --vc hevc --ac copy <输入> <输出>
- 缩放为480p
manage-media convert --scale 480 <输入> <输出>
- 转换为H.264并去除隔行扫描(例如mpeg2 DVD)
manage-media convert --vc h264 --deinterlace <输入> <输出>
- 转换整个目录中的文件
manage-media convert --vc h264 --bulk <输入目录> <输出目录>
- 提取视频的一部分
manage-media convert --vc copy --ac copy --start 3m45s --end 10m00s <输入> <输出>
硬件加速
如果你的 ffmpeg
支持它,你可以使用NVIDIA GPU硬件加速来加速转换。你可以在这里查看每个GPU支持的解码和编码编解码器 这里。
要使用此功能,只需将 --hardware-nvidia
或 --hw-nv
添加到 manage-media convert
命令中。
manage-media convert --hw-nv --video-codec hevc --audio-codec ac3 <input> <output>
metadata
获取文件的元数据简单输出。或者以JSON格式获取大量元数据
简单输出
manage-media metadata <输入>
Battlestar Galatica (2003) - s00e01 - Battlestar Galactica The Miniseries (1).mkv
Directory: /Volumes/Media/TV Shows/Battlestar Galactica/Season 0/
Title: Battlestar Galactica: Season 1 (Disc 1)
Size: 6.8GB
Format: matroska,webm
Duration: 1h34m39s
Bitrate: 10117 Kbps
Video: h264 8 bit (1920x1080)
Audio:
aac (eng, 5.1)
Subtitles: eng, spa, fra
Ripped: True
JSON
manage-media metadata --json <输入>
{
"file": "/Volumes/Media/TV Shows/Battlestar Galactica/Season 0/Battlestar Galatica (2003) - s00e01 - Battlestar Galactica The Miniseries (1).mkv",
"title": "Battlestar Galactica: Season 1 (Disc 1)",
"duration": 5679.362,
"duration_str": "1h34m39s",
"size": 7354722701,
"size_str": "6.8GB",
"resolution": "HIGH_DEF",
"bit_rate": 10359928,
"bit_rate_str": "10117 Kbps",
"ripped": true,
"format": "matroska,webm",
"format_long_name": "Matroska / WebM",
"mime_type": "video/x-matroska",
"tags": {
"title": "Battlestar Galactica: Season 1 (Disc 1)",
"RIPPED": "true",
"ENCODER": "Lavf57.56.100"
},
"video_streams": [ ... ],
"audio_streams": [ ... ],
"subtitle_streams": [ ... ],
"other_streams": [ ... ],
"chapters": [ ... ],
"interlace": null
}
rename
manage-media rename <模板> <输入文件>
或 manage-media rename --recursive <模板> <输入目录>
一个灵活的工具,可以根据模板重命名文件。
模板可以包含变量或表达式,通过${...}包围。函数可以像 ${upper(i)}
或 ${i | upper}
一样调用。
以下变量可用
i
/index
- 正在被重命名的当前文件的索引wo_ext
- 文件名的基本名(不包含扩展名)ext
- 当前文件的文件扩展名(不包含'.')filename
- 当前文件的文件名(基本名)re
/regex
- 一个正则表达式匹配组列表(使用re[0]
,re[1]
等)
以下函数可用
upper
- 将输入转换为大写lower
- 将输入转换为小写ifempty(a, b, c)
- 如果a为空或为null,则b,否则clpad(a, b:int)
- 将a左填充到长度b(默认为2+)的长度,用空格填充zpad(a, b:int)
- 将a左填充到长度b(默认为2+)的长度,用零填充
lpad
/zpad
- 默认填充至少2个字符。如果有100+个文件,则填充3个字符,如果有1000+个文件,则填充4个字符等。
正则表达式:如果包含正则表达式,则匹配组(0=整个匹配,>0=匹配组)在列表're'或'regex'中可用。如果可能,每个匹配组都会转换为整数,因此零填充的整数会丢失零。
示例模板
Input: S02E04.mp4
Regex: S(\d+)E(\d+)
Template: 'Season ${re[1]} Episode ${re[2]}.{ext}'
Result: 'Season 2 Episode 4.mp4'
Template: 'Season ${re[1] | zpad} Episode ${zpad(re[2], 3)}.{ext}'
Results: 'Season 02 Episode 004.mp4'
Input: whatever.mp4
Regex: S(\d+)E(\d)
Template: 'Season ${ifempty(re[1], 'unknown', re[1])} Episode ${re[2]}.{ext}'
Result: 'Season unknown Episode .mp4'
search
manage-media search <输入目录> <查询>
搜索目录以匹配参数的视频文件。注意:这可能需要很长时间,因为它必须读取每个文件的元数据。你可以使用 --db <文件
加速同一目录中的多次搜索,它将元数据缓存起来。
如果视频有多个流,比较意味着至少有一个流匹配。
可用参数
视频
v.codec
- 视频编解码器(h264, h265, mpeg2 等)v.width
- 视频像素宽度v.height
- 视频像素高度
音频
a.codec
- 音频编解码器(aac, ac3 等)a.channels
- 音频通道数(立体声=2, 5.1=6 等)a.lang
- 音轨语言
字幕
s.codec
- 字幕编解码器(srt, hdmv_pgs, mov_text 等)s.lang
- 字幕语言
其他
ripped
- 视频是否标记为已抓取bit_rate
- 总体平均比特率resolution
- 分辨率名称(LOW_DEF, HIGH_DEF 等)
元数据
meta.xyz
- 符合基本的 JSON 元数据输出(例如meta.title
或meta.video_streams[0].codec
)
函数
isNull(xyz)
- 如果值是 null,则返回 trueall(xyz)
- 与单个流匹配不同,检查所有流
示例查询
- 查找所有 H264 视频文件
v.codec = h264
- 查找所有 H264 视频文件,具有立体声 AAC
v.codec = h264 and a.codec = aac and a.channels = 2
- 查找所有 H265 或 H264 和 AAC 视频文件
a.codec = aac and (v.codec = h265 or v.codec = h264)
a.codec = aac and v.codec in [h265, h264]
- 查找所有没有英语字幕的视频文件
s.lang != eng
- 查找分辨率低于 1080 的视频文件
v.height < 1080
- 查找所有仅包含 AAC 音频的视频文件
all(a.codec) = aac
tv-rename
重命名目录中的文件为 sXXeYY
例如,如果您抓取了一些《星际迷航:银河战争》的蓝光碟,您可能有一个类似以下文件结构:
- BSG_Season1_Disc1
- BSG_Season1_Disc1_t00.mkv
- BSG_Season1_Disc1_t01.mkv
- BSG_Season1_Disc1_t02.mkv
- BSG_Season1_Disc1_t03.mkv
- BSG_Season1_Disc2
- BSG_Season1_Disc2_t00.mkv
- BSG_Season1_Disc2_t01.mkv
- BSG_Season1_Disc2_t02.mkv
- BSG_Season1_Disc2_t03.mkv
manage-media tv-rename -s 1 -e 1 --tvdb --show "Battlestar Galactica" --output "BSG/Season 1" BSG_Season1_Disc*
结果
- BSG
- Season 1
- Battlestar Galatica (2003) - S01E01 - 33.mkv
- Battlestar Galatica (2003) - S01E02 - Water.mkv
- Battlestar Galatica (2003) - S01E03 - Bastille Day.mkv
- Battlestar Galatica (2003) - S01E04 - Act of Contrition.mkv
- Battlestar Galatica (2003) - S01E05 - You Can't Go Home Again.mkv
- Battlestar Galatica (2003) - S01E06 - Litmus.mkv
- Battlestar Galatica (2003) - S01E07 - Six Degrees of Separation.mkv
- Battlestar Galatica (2003) - S01E08 - Flesh and Bone.mkv
- Season 1
配置
您可以通过创建文件 ~/.config/mms/config.ini
来配置查找各种可执行文件的位置。默认情况下,命令将使用您路径中找到的可执行文件。
您可以使用 manage-media executables
命令查看正在使用的工具
配置文件示例
[main]
ffmpeg = /path/to/ffmpeg
项目详情
下载文件
下载您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。
源代码分布
构建分布
media_management_scripts-0.5.3.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2bad70c23d76f9a28503275598516aaf1c0ca93d9f756e727e6152e6864840b4 |
|
MD5 | 492ec0bcc3020ecfa5d8529525cca87a |
|
BLAKE2b-256 | a38484ac8ce0c09f5316ee7055853dcea04ba0af7785eb2e6dd965716fdde0be |
media_management_scripts-0.5.3-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 540bf3b4f4a250571168533471eea2586172b3def35313d9475f197af22012c1 |
|
MD5 | 56270ccac21c013ca0ddd78be4a811cd |
|
BLAKE2b-256 | 32e0132017e62567b9750eb08d653b07999de1d5d61e029751aff3334be8ce4e |