媒体管理脚本
项目描述
媒体管理脚本
这是一个用于管理媒体文件(如电影或电视节目)的命令行工具集合。
它还简化了一些常见任务,例如通过封装复杂的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,否则c
- lpad(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,则返回 true
- all(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 |