1

I have an MP4 file, which I would like to convert into an MPEG4 file. TO do this, I have found the PythonVideoConvert package. On the PyPI page, the following code is given:

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
    }})

When I run this code, a convert object is created. However, there is no .mpeg4 video in the PATH directory.

Therefore, I have two questions:

  1. Is the code above correct for converting a .mp4 file into a .mpeg4 file
  2. What do I need to run to save the converted video as a .mpeg4 file?

Based on Selcuk's comment, I ran the following code:

for timecode in convert:
    pass

This gives the error:

Traceback (most recent call last):

  File "<ipython-input-60-14c9225c3ac2>", line 1, in <module>
    for timecode in convert:

  File "C:\Users\20200016\Anaconda3\lib\site-packages\converter\__init__.py", line 229, in convert
    optlist = self.parse_options(options, twopass)

  File "C:\Users\20200016\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

So, my suggested format seems incorrect. What can I do to convert a video into .mpeg4?

Emil
  • 1,531
  • 3
  • 22
  • 47
  • Maybe you should [read the tutorial](https://github.com/senko/python-video-converter/blob/master/doc/tutorial.rst). Conversion will not automatically start, you must iterate the `convert` generator until it is exhausted. – Selcuk Jan 25 '22 at 00:23
  • So that answers my second question. What about my first question? – Emil Jan 25 '22 at 00:39
  • I don't think `mpeg4` is a valid format: https://github.com/senko/python-video-converter/blob/master/converter/formats.py – Selcuk Jan 25 '22 at 01:11

2 Answers2

1

'Requested unknown format: mpeg4'

*.mpeg4 is not valid container. mpeg4 is codec, *.something (avi, mp4, mov, mkv, ...) are containers.

basicly: codec.CONTAINER or your_mpeg4_video.mkv etc.

video codec (like mpeg4) handle only video, but you need more than only visual, you need audio, many audio tracks (eng, de, nl, 2.0, 5.1, 7.1 ...), subtitles, etc and these stuff are inside container.

install ffmpeg: https://ffmpeg.org/

try this basic script:

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)

I don't know what are you doing (what you want, what are your expectations) but if you looking for way how to degrese size of video,

look here: https://github.com/MarcelSuleiman/convert_h264_to_h265

simple.

1

I don't think PythonVideoConverter is meant to be used in Windows.

I was getting an exception AttributeError: module 'signal' has no attribute 'SIGVTALRM', because SIGVTALRM is not a valid signal in Windows.

The default path of FFmpeg an FFprobe command line tools, also doesn't make sense for Windows.

We may still use the package in Windows, but it's recommended to set ffmpeg_path and ffprobe_path.
Example:

conv = Converter(ffmpeg_path=r'c:\FFmpeg\bin\ffmpeg.exe', ffprobe_path=r'c:\FFmpeg\bin\ffprobe.exe')

We also have to disable the timeout feature, by setting timeout=None argument.


mpeg4 is not a valid FFmpeg format, but we can still use it as a file extension.
(format is FFmpeg terminology usually applies container format).

When non-standart file extension is used, we have to set the format entry.
Setting 'format': 'mp4' creates MP4 file container (may be created with the non-standart .mpeg4 file extension).


Complete code sample:

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}) ...')

We may see the media information of Demo.mpeg4 using MediaInfo tool:

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

In MediaInfo output, the MP4 file container applies "MPEG-4" format...

Note:
The HEVC video format applies H.265 video codec - in most cases the codec is considered to be more relevant then container.

Rotem
  • 30,366
  • 4
  • 32
  • 65