使用 Converter 将 .mp4 转换为 .mpeg4
Convert .mp4 to .mpeg4 using Converter
我有一个 MP4 文件,我想将其转换为 MPEG4 文件。为此,我找到了 PythonVideoConvert 包。在 PyPI 页面上,给出了以下代码:
from converter import Converter
conv = Converter()
info = conv.probe('test/test1.avi')
PATH = 'C:/Users/.../'
convert = conv.convert(PATH +'Demo.mp4', PATH + 'Demo.mpeg4', {
'format': 'mpeg4',
'audio': {
'codec': 'aac',
'samplerate': 11025,
'channels': 2
},
'video': {
'codec': 'hevc',
'width': 720,
'height': 400,
'fps': 25
}})
当我 运行 这段代码时,会创建一个 convert
对象。但是PATH目录下没有.mpeg4视频。
因此,我有两个问题:
- 上面的代码是否正确地将 .mp4 文件转换为 .mpeg4 文件
- 我需要什么才能运行将转换后的视频保存为 .mpeg4 文件?
根据 Selcuk 的评论,我 运行 以下代码:
for timecode in convert:
pass
这给出了错误:
Traceback (most recent call last):
File "<ipython-input-60-14c9225c3ac2>", line 1, in <module>
for timecode in convert:
File "C:\Users200016\Anaconda3\lib\site-packages\converter\__init__.py", line 229, in convert
optlist = self.parse_options(options, twopass)
File "C:\Users200016\Anaconda3\lib\site-packages\converter\__init__.py", line 60, in parse_options
raise ConverterError(f'Requested unknown format: {str(f)}')
ConverterError: Requested unknown format: mpeg4
所以,我建议的格式似乎不正确。如何将视频转换为 .mpeg4?
'Requested unknown format: mpeg4'
*.mpeg4 不是有效容器。 mpeg4 是编解码器,*.something (avi, mp4, mov, mkv, ...) 是容器。
基本上:codec.CONTAINER或your_mpeg4_video.mkv等
视频编解码器(如 mpeg4)仅处理视频,但您不仅需要视觉,还需要音频、许多音轨(eng、de、nl、2.0、5.1、7.1 ...)、字幕等这些东西都在容器里。
安装 ffmpeg:https://ffmpeg.org/
试试这个基本脚本:
import subprocess
input_file = 'Demo.mp4'
output_file = 'Demo.mkv' # or .mp4, .mov, ...
ffmpeg_cli = "ffmpeg -i '{}' -vcodec libx265 '{}'".format(input_file, output_file)
subprocess.call(ffmpeg_cli, shell=True)
我不知道你在做什么(你想要什么,你的期望是什么)但是如果你正在寻找如何降低视频大小的方法,
看这里:https://github.com/MarcelSuleiman/convert_h264_to_h265
简单。
我认为 PythonVideoConverter 不应该用于 Windows。
我收到异常 AttributeError: module 'signal' has no attribute 'SIGVTALRM'
,因为 SIGVTALRM
在 Windows 中不是有效信号。
FFmpeg 和 FFprobe 命令行工具的默认路径,对 Windows 也没有意义。
我们可能还会使用Windows中的包,但建议设置ffmpeg_path
和ffprobe_path
。
示例:
conv = Converter(ffmpeg_path=r'c:\FFmpeg\bin\ffmpeg.exe', ffprobe_path=r'c:\FFmpeg\bin\ffprobe.exe')
我们还必须通过设置 timeout=None
参数来禁用超时功能。
mpeg4
不是有效的 FFmpeg 格式,但我们仍然可以将其用作文件扩展名。
(格式为FFmpeg术语,通常适用于容器格式)。
当使用non-standart文件扩展名时,我们必须设置format
条目。
设置 'format': 'mp4'
创建 MP4 文件容器(可以使用 non-standart .mpeg4
文件扩展名创建)。
完整代码示例:
from converter import Converter
conv = Converter(ffmpeg_path=r'c:\FFmpeg\bin\ffmpeg.exe', ffprobe_path=r'c:\FFmpeg\bin\ffprobe.exe')
#info = conv.probe('test/test1.avi')
PATH = 'C:/Users/Rotem/'
convert = conv.convert(PATH + 'Demo.mp4', PATH + 'Demo.mpeg4', {
'format': 'mp4', #'format': 'mpeg4',
'audio': {
'codec': 'aac',
'samplerate': 11025,
'channels': 2
},
'video': {
'codec': 'hevc',
'width': 720,
'height': 400,
'fps': 25
}},
timeout=None)
# https://pypi.org/project/PythonVideoConverter/
for timecode in convert:
print(f'\rConverting ({timecode:.2f}) ...')
我们可以使用MediaInfo工具查看Demo.mpeg4
的媒体信息:
General
Complete name : C:\Users\Rotem\Demo.mpeg4
Format : MPEG-4
Format profile : Base Media
Codec ID : isom (isom/iso2/mp41)
File size : 207 KiB
Duration : 10 s 148 ms
Overall bit rate mode : Variable
Overall bit rate : 167 kb/s
Writing application : Lavf58.45.100
FileExtension_Invalid : braw mov mp4 m4v m4a m4b m4p m4r 3ga 3gpa 3gpp 3gp 3gpp2 3g2 k3g jpm jpx mqv ismv isma ismt f4a f4b f4v
Video
ID : 1
Format : HEVC
Format/Info : High Efficiency Video Coding
Format profile : Main@L3@Main
Codec ID : hev1
Codec ID/Info : High Efficiency Video Coding
Duration : 10 s 0 ms
Bit rate : 82.5 kb/s
Width : 720 pixels
Height : 400 pixels
Display aspect ratio : 16:9
Frame rate mode : Constant
Frame rate : 25.000 FPS
Color space : YUV
Chroma subsampling : 4:2:0
Bit depth : 8 bits
Scan type : Progressive
Bits/(Pixel*Frame) : 0.011
Stream size : 101 KiB (49%)
Writing library : x265 3.4+28-419182243:[Windows][GCC 9.3.0][64 bit] 8bit+10bit+12bit
Encoding settings : ...
Color range : Limited
Codec configuration box : hvcC
Audio
ID : 2
Format : AAC LC
Format/Info : Advanced Audio Codec Low Complexity
Codec ID : mp4a-40-2
Duration : 10 s 148 ms
Duration_LastFrame : -70 ms
Bit rate mode : Variable
Bit rate : 79.1 kb/s
Maximum bit rate : 128 kb/s
Channel(s) : 2 channels
Channel layout : L R
Sampling rate : 11.025 kHz
Frame rate : 10.767 FPS (1024 SPF)
Compression mode : Lossy
Stream size : 98.0 KiB (47%)
Title : IsoMedia File Produced by Google, 5-11-2011
Language : English
Default : Yes
Alternate group : 1
在 MediaInfo 输出中,MP4 文件容器应用“MPEG-4”格式...
注:
HEVC 视频格式应用 H.265 视频编解码器 - 在大多数情况下,编解码器被认为比容器更相关。
我有一个 MP4 文件,我想将其转换为 MPEG4 文件。为此,我找到了 PythonVideoConvert 包。在 PyPI 页面上,给出了以下代码:
from converter import Converter
conv = Converter()
info = conv.probe('test/test1.avi')
PATH = 'C:/Users/.../'
convert = conv.convert(PATH +'Demo.mp4', PATH + 'Demo.mpeg4', {
'format': 'mpeg4',
'audio': {
'codec': 'aac',
'samplerate': 11025,
'channels': 2
},
'video': {
'codec': 'hevc',
'width': 720,
'height': 400,
'fps': 25
}})
当我 运行 这段代码时,会创建一个 convert
对象。但是PATH目录下没有.mpeg4视频。
因此,我有两个问题:
- 上面的代码是否正确地将 .mp4 文件转换为 .mpeg4 文件
- 我需要什么才能运行将转换后的视频保存为 .mpeg4 文件?
根据 Selcuk 的评论,我 运行 以下代码:
for timecode in convert:
pass
这给出了错误:
Traceback (most recent call last):
File "<ipython-input-60-14c9225c3ac2>", line 1, in <module>
for timecode in convert:
File "C:\Users200016\Anaconda3\lib\site-packages\converter\__init__.py", line 229, in convert
optlist = self.parse_options(options, twopass)
File "C:\Users200016\Anaconda3\lib\site-packages\converter\__init__.py", line 60, in parse_options
raise ConverterError(f'Requested unknown format: {str(f)}')
ConverterError: Requested unknown format: mpeg4
所以,我建议的格式似乎不正确。如何将视频转换为 .mpeg4?
'Requested unknown format: mpeg4'
*.mpeg4 不是有效容器。 mpeg4 是编解码器,*.something (avi, mp4, mov, mkv, ...) 是容器。
基本上:codec.CONTAINER或your_mpeg4_video.mkv等
视频编解码器(如 mpeg4)仅处理视频,但您不仅需要视觉,还需要音频、许多音轨(eng、de、nl、2.0、5.1、7.1 ...)、字幕等这些东西都在容器里。
安装 ffmpeg:https://ffmpeg.org/
试试这个基本脚本:
import subprocess
input_file = 'Demo.mp4'
output_file = 'Demo.mkv' # or .mp4, .mov, ...
ffmpeg_cli = "ffmpeg -i '{}' -vcodec libx265 '{}'".format(input_file, output_file)
subprocess.call(ffmpeg_cli, shell=True)
我不知道你在做什么(你想要什么,你的期望是什么)但是如果你正在寻找如何降低视频大小的方法,
看这里:https://github.com/MarcelSuleiman/convert_h264_to_h265
简单。
我认为 PythonVideoConverter 不应该用于 Windows。
我收到异常 AttributeError: module 'signal' has no attribute 'SIGVTALRM'
,因为 SIGVTALRM
在 Windows 中不是有效信号。
FFmpeg 和 FFprobe 命令行工具的默认路径,对 Windows 也没有意义。
我们可能还会使用Windows中的包,但建议设置ffmpeg_path
和ffprobe_path
。
示例:
conv = Converter(ffmpeg_path=r'c:\FFmpeg\bin\ffmpeg.exe', ffprobe_path=r'c:\FFmpeg\bin\ffprobe.exe')
我们还必须通过设置 timeout=None
参数来禁用超时功能。
mpeg4
不是有效的 FFmpeg 格式,但我们仍然可以将其用作文件扩展名。
(格式为FFmpeg术语,通常适用于容器格式)。
当使用non-standart文件扩展名时,我们必须设置format
条目。
设置 'format': 'mp4'
创建 MP4 文件容器(可以使用 non-standart .mpeg4
文件扩展名创建)。
完整代码示例:
from converter import Converter
conv = Converter(ffmpeg_path=r'c:\FFmpeg\bin\ffmpeg.exe', ffprobe_path=r'c:\FFmpeg\bin\ffprobe.exe')
#info = conv.probe('test/test1.avi')
PATH = 'C:/Users/Rotem/'
convert = conv.convert(PATH + 'Demo.mp4', PATH + 'Demo.mpeg4', {
'format': 'mp4', #'format': 'mpeg4',
'audio': {
'codec': 'aac',
'samplerate': 11025,
'channels': 2
},
'video': {
'codec': 'hevc',
'width': 720,
'height': 400,
'fps': 25
}},
timeout=None)
# https://pypi.org/project/PythonVideoConverter/
for timecode in convert:
print(f'\rConverting ({timecode:.2f}) ...')
我们可以使用MediaInfo工具查看Demo.mpeg4
的媒体信息:
General
Complete name : C:\Users\Rotem\Demo.mpeg4
Format : MPEG-4
Format profile : Base Media
Codec ID : isom (isom/iso2/mp41)
File size : 207 KiB
Duration : 10 s 148 ms
Overall bit rate mode : Variable
Overall bit rate : 167 kb/s
Writing application : Lavf58.45.100
FileExtension_Invalid : braw mov mp4 m4v m4a m4b m4p m4r 3ga 3gpa 3gpp 3gp 3gpp2 3g2 k3g jpm jpx mqv ismv isma ismt f4a f4b f4v
Video
ID : 1
Format : HEVC
Format/Info : High Efficiency Video Coding
Format profile : Main@L3@Main
Codec ID : hev1
Codec ID/Info : High Efficiency Video Coding
Duration : 10 s 0 ms
Bit rate : 82.5 kb/s
Width : 720 pixels
Height : 400 pixels
Display aspect ratio : 16:9
Frame rate mode : Constant
Frame rate : 25.000 FPS
Color space : YUV
Chroma subsampling : 4:2:0
Bit depth : 8 bits
Scan type : Progressive
Bits/(Pixel*Frame) : 0.011
Stream size : 101 KiB (49%)
Writing library : x265 3.4+28-419182243:[Windows][GCC 9.3.0][64 bit] 8bit+10bit+12bit
Encoding settings : ...
Color range : Limited
Codec configuration box : hvcC
Audio
ID : 2
Format : AAC LC
Format/Info : Advanced Audio Codec Low Complexity
Codec ID : mp4a-40-2
Duration : 10 s 148 ms
Duration_LastFrame : -70 ms
Bit rate mode : Variable
Bit rate : 79.1 kb/s
Maximum bit rate : 128 kb/s
Channel(s) : 2 channels
Channel layout : L R
Sampling rate : 11.025 kHz
Frame rate : 10.767 FPS (1024 SPF)
Compression mode : Lossy
Stream size : 98.0 KiB (47%)
Title : IsoMedia File Produced by Google, 5-11-2011
Language : English
Default : Yes
Alternate group : 1
在 MediaInfo 输出中,MP4 文件容器应用“MPEG-4”格式...
注:
HEVC 视频格式应用 H.265 视频编解码器 - 在大多数情况下,编解码器被认为比容器更相关。