一种管理视频文件的简单方法。

shane的Python项目详细描述


谢恩

尚恩·斯蒂芬·菲南是一个方便的视频文件转换和解压缩模块。

  • 更改mkv或mp4的容器,而无需缓慢重新编码。
  • 向容器中添加新的流(并轻松删除其他流)
  • 查看和更改容器及其所有流的元数据

这是对ffmpeg的一些常见任务(不需要知道ffmpeg语法)的一种新的看法。实际上,您只需更改一些媒体文件属性,如extensionfps,然后保存这些更改(请参见下面的示例)。

内容

  1. INSTALLATION
  2. HOW TO
  3. USAGE

安装

安装FFmpeg。您可以在Mac上使用自制程序安装它:

brew install ffmpeg --with-x265

使用pip安装shane:

pip install shane

注意,只支持python 3.6+

如何

打开媒体文件:

>>> import shane
>>> container = shane.open('path/to/file.mkv')

将格式更改为另一个:

注意:如果输出容器支持输入容器编解码器,它将快速执行。

>>> container.extension = '.m4v'

删除所有非英语音轨:

>>> not_eng = lambda s: s.is_audio and s.metadata['language'] != 'eng'
>>> container.remove_streams_if(not_eng)

添加字幕:

>>> subtitles = shane.open('path/to/fre_subtitles.srt')
>>> subtitles.metadata['language'] = 'fre'
>>> container.streams.append(subtitles)

提取字幕:

>>> subtitles = container.subtitles[0]
>>> subtitles = subtitles.extract(path='new_path/to/rus_subtitles.srt')

保存更改:

所有更改后,必须保存文件。

注意:如果文件的pathextension未更改,则将覆盖该文件。

>>> container.save()

用法

shane操作两种对象:streamscontainers。流是独立的视频/音频/字幕文件,容器包含许多流。

打开文件

open函数选择需要自己创建的对象类型。

打开包含多个视频/音频/字幕曲目的文件:

>>> container = shane.open('path/to/file.mkv')
Container(path=path/to/file.mkv, size=142.65 MB, duration=00:02:00)

打开只包含视频而不包含任何音频或字幕的文件:

>>> video_stream = shane.open('path/to/only_video.mkv')
VideoStream(path=path/to/file.mkv, codec=h264, fps=23.97598627787307, width=1272, height=720, language=eng)

打开音频或字幕文件:

>>> audio_stream = shane.open('path/to/audio.aac')
AudioStream(path=path/to/audio.aac, codec=aac, channels=2, sample_rate=48000.0, language=eng)

>>> subtitle_stream = shane.open('path/to/subtitles.srt')
SubtitleStream(path=path/to/subtitles.srt, codec=subrip, is_forced=False, language=rus)

发现媒体信息

获取容器中所有流的list

>>> container.streams
...

获取特定类型流的tuple

>>> container.audios
...
>>> container.subtitles
...
>>> container.videos
...

获取元数据:

# global metadata
>>> container.metadata
{'title': 'Untitled Movie File'}

# metadata of a certain stream
>>> *_, last_audio_stream = container.audios
>>> last_audio_stream.metadata
{'language': 'eng', 'title': 'Commentary', 'DURATION': '00:02:00'}

获取章节:

>>> container.chapters
...

获取其他媒体信息:

>>> container.path
'path/to/file.mkv'

>>> container.extension
'.mkv'

>>> container.duration
120.0

>>> container.human_duration
'00:02:00'

>>> container.size
149575198

>>> container.human_size
'142.65 MB'

>>> video, *_ = container.videos
>>> video.fps
23.976023976023978

>>> video.codec
'h264'

改变你想要的

对容器的所有更改都是通过更改其属性并进行以下保存来执行的。

更改文件扩展名:

>>> container.extension = '.m4v'

>>> container.path
'path/to/file.m4v'

更改全局元数据:

>>> container.metadata['author'] = "John Dou"

或者完全删除全局元数据:

>>> container.metadata = {}

更改容器中视频流的fps:

>>> video_stream, *_ = container.videos
>>> video_stream.fps = 23

更改帧大小:

>>> video_stream.width = 640
>>> video_stream.height = 480

别忘了保存更改:

>>> container.save()

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
graph Java自己生成类图   java MouseMotionListener:鼠标和触控板给出不同的结果   java解析清单条目的正确方法是什么。jar中的mf文件?   java如何创建带有半透明色块的透明gif/png图像?   java应用内计费V3:跨设备同步购买   java Spring数据JPA注入失败BeanCreationException:无法自动连接字段   Java数据结构维护插入顺序和重复值   java无法在VSCode中设置JavaFX   java中数据字段初始化的类顺序   java如何使用ClientBuilder为Rest Post Api多部分编写集成测试   JUnit测试divide()方法的java正确方法   java将消息标记为接收前已读   Java ArrayList调用扩展对象函数   java Android:只使用GCM的TCP/IPServer   Java如何将xls数据转换为txt文件   编译为Jar文件后未找到java类   java返回子字符串的所有匹配项   java Get json用户_timeline api twitter 1.1