跳转到主要内容

媒体管理脚本

项目描述

媒体管理脚本

这是一个用于管理媒体文件(如电影或电视节目)的命令行工具集合。

它还简化了一些常见任务,例如通过封装复杂的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),这将输出操作而不执行,以便您可以验证计划。

主要工具

convert

metadata

rename

search

tv-rename

帮助输出

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.titlemeta.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

配置

您可以通过创建文件 ~/.config/mms/config.ini 来配置查找各种可执行文件的位置。默认情况下,命令将使用您路径中找到的可执行文件。

您可以使用 manage-media executables 命令查看正在使用的工具

配置文件示例

[main]
ffmpeg = /path/to/ffmpeg

项目详情


下载文件

下载您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源代码分布

media_management_scripts-0.5.3.tar.gz (71.3 kB 查看哈希)

上传时间

构建分布

media_management_scripts-0.5.3-py3-none-any.whl (78.4 kB 查看哈希值)

上传时间 Python 3

支持者