一种管理视频文件的简单方法。
sight的Python项目详细描述
视线
视觉是一种方便的视频文件转换和解压缩模块。
- 更改mkv或mp4的容器,而无需缓慢重新编码。
- 向容器中添加新的流(并轻松删除其他流)
- 查看和更改容器及其所有流的元数据
这是对ffmpeg的一些常见任务(不需要知道ffmpeg语法)的一种新的看法。实际上,您只需更改一些媒体文件属性,如extention
或fps
,然后保存这些更改(请参见下面的示例)。
内容
安装
安装FFmpeg。您可以在Mac上使用自制程序安装它:
brew install ffmpeg --with-x265
使用PIP安装瞄准具:
pip install sight
注意,只支持python 3.6+。
如何
打开媒体文件:
>>> import sight
>>> container = sight.open('path/to/file.mkv')
将格式更改为另一个:
注意:如果输出容器支持输入容器编解码器,它将快速执行。
>>> container.extention = '.m4v'
删除所有非英语音轨:
>>> not_eng = lambda s: s.is_audio and s.metadata['language'] != 'eng'
>>> container.remove_streams(not_eng)
添加字幕:
>>> subtitles = sight.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')
保存更改:
所有更改后,必须保存文件。
注意:如果文件的path
或extention
没有更改,则将完全重写该文件。
>>> container.save()
用法
sight操作两种对象:streams和containers。流是独立的视频/音频/字幕文件,容器包含许多流。
打开文件
open
函数选择需要自己创建的对象类型。
打开包含多个视频/音频/字幕曲目的文件:
>>> container = sight.open('path/to/file.mkv')
Container(path=path/to/file.mkv, size=142.65 MB, duration=00:02:00)
打开只包含视频而不包含任何音频或字幕的文件:
>>> video_stream = sight.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 = sight.open('path/to/audio.aac')
AudioStream(path=path/to/audio.aac, codec=aac, channels=2, sample_rate=48000.0, language=eng)
>>> subtitle_stream = sight.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.extention
'.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.extention = '.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()