How to convert video on python to .mp4 without ffmpeg?

Question:

I need to convert videos to .mp4 format I used to ffmpeg but it converts for too long. Is there are a way to convert video to .mp4 in python without ffmpeg?

Asked By: Max

||

Answers:

UPD moviepy depends on ffmpeg too (

==

Zulko/moviepy

pip install MoviePy
import moviepy.editor as moviepy
clip = moviepy.VideoFileClip("myvideo.avi")
clip.write_videofile("myvideo.mp4")

As per MoviePy documentation, there is no ffmpeg dependencies:

MoviePy depends on the Python modules Numpy, imageio, Decorator, and tqdm, which will be automatically installed during MoviePy’s installation.

ImageMagick is not strictly required, but needed if you want to incorporate texts. It can also be used as a backend for GIFs, though you can also create GIFs with MoviePy without ImageMagick.

PyGame is needed for video and sound previews (not relevant if you intend to work with MoviePy on a server but essential for advanced video editing by hand).

For advanced image processing, you will need one or several of the following packages:

  • The Python Imaging Library (PIL) or, even better, its branch Pillow.
  • Scipy (for tracking, segmenting, etc.) can be used to resize video clips if PIL and OpenCV are not installed.
  • Scikit Image may be needed for some advanced image manipulation.
  • OpenCV 2.4.6 or a more recent version (one that provides the package cv2) may be needed for some advanced image manipulation.
  • Matplotlib
Answered By: Yasen

I wrote a quick program that will convert all video files of a particular type in a directory to another type and put them in another directory.
I had to install moviepy using Homebrew for it to work rather than rely on PyCharm‘s package installation.

import moviepy.editor as moviepy
import os

FROM_EXT    = "mkv"
TO_EXT      = "mp4"
SOURCE_DIR  = "/Volumes/Seagate Media/Movies/MKVs"
DEST_DIR    = "/Volumes/Seagate Media/Movies/MP4s"

for file in os.listdir(SOURCE_DIR):
    if file.lower().endswith(FROM_EXT.lower()):
        from_path   = os.path.join(SOURCE_DIR, file)
        to_path     = os.path.join(DEST_DIR, file.rsplit('.', 1)[0]) + '.' + TO_EXT

        print(f"Converting {from_path} to {to_path}")

        clip = moviepy.VideoFileClip(from_path)
        clip.write_videofile(to_path)
Answered By: iStuart