OIFFmpeg: A Simple Python Wrapper for FFmpeg
OIFFmpeg provides a straightforward Python interface for common tasks performed using the powerful FFmpeg multimedia framework. This library aims to simplify the execution of FFmpeg commands for operations like media format conversion, audio extraction, video trimming, retrieving media information, and streaming, directly from your Python scripts. It leverages the standard subprocess
module to interact with the FFmpeg command-line tools (ffmpeg
and ffprobe
), requiring them to be installed and accessible in your system's PATH.
Features
Currently, OIFFmpeg supports the following core functionalities:
- Media Conversion: Convert video and audio files between various formats (
convert
).
- Audio Extraction: Easily extract the audio track from a media file (
extract_audio
).
- Video Trimming: Cut sections from video files based on start and end times (
trim_video
).
- Media Information Retrieval: Get detailed information about media files using
ffprobe
(get_media_info
).
- RTMP Streaming: Stream a video file or URL to an RTMP server (
stream_video
).
- General FFmpeg Execution: Run any custom FFmpeg command by providing a list of arguments (
run_ffmpeg
), offering maximum flexibility for advanced users.
Installation
Prerequisites:
Before installing OIFFmpeg, you must have FFmpeg installed on your system. FFmpeg includes both the ffmpeg
and ffprobe
command-line tools, which this library relies on. You can download FFmpeg from the official website (https://ffmpeg.org/download.html) or install it using your system's package manager.
Installing OIFFmpeg:
Once FFmpeg is installed, you can install OIFFmpeg using pip:
pip install oiffmpeg
To install the latest development version directly from GitHub:
pip install git+https://github.com/tiendung102k3/OIFFmpeg.git
Usage Examples
Here are some examples demonstrating how to use OIFFmpeg:
import oiffmpeg
import json
input_video_file = 'local_video.mp4'
input_video_url = 'http://example.com/stream.m3u8'
output_video_webm = 'output.webm'
output_audio_mp3 = 'output_audio.mp3'
output_trimmed_video = 'trimmed_video.mp4'
rtmp_endpoint = 'rtmp://your-rtmp-server.com/live/stream_key'
try:
print(f"Converting {input_video_file} to {output_video_webm}...")
success = oiffmpeg.convert(input_video_file, output_video_webm, vcodec='libvpx', acodec='libvorbis', overwrite=True)
print(f"Conversion {'successful' if success else 'failed'}.")
except Exception as e:
print(f"An error occurred during conversion: {e}")
try:
print(f"Extracting audio from {input_video_file} to {output_audio_mp3}...")
success = oiffmpeg.extract_audio(input_video_file, output_audio_mp3, audio_codec='libmp3lame', overwrite=True)
print(f"Audio extraction {'successful' if success else 'failed'}.")
except Exception as e:
print(f"An error occurred during audio extraction: {e}")
try:
start = 10
end = 30
print(f"Trimming {input_video_file} from {start}s to {end}s into {output_trimmed_video}...")
success = oiffmpeg.trim_video(input_video_file, output_trimmed_video, start_time=start, end_time=end, overwrite=True)
print(f"Video trimming {'successful' if success else 'failed'}.")
except Exception as e:
print(f"An error occurred during video trimming: {e}")
try:
print(f"Getting media info for {input_video_file}...")
media_info = oiffmpeg.get_media_info(input_video_file)
if media_info:
print("Media information retrieved successfully:")
print(json.dumps(media_info, indent=2))
else:
print("Failed to retrieve media information.")
except Exception as e:
print(f"An error occurred while getting media info: {e}")
try:
print(f"Streaming {input_video_file} to {rtmp_endpoint}...")
success = oiffmpeg.stream_video(input_video_file, rtmp_endpoint, re=True, c='copy', f='flv')
print(f"Streaming finished. Success: {success}")
except Exception as e:
print(f"An error occurred during streaming: {e}")
try:
print("Adding watermark using run_ffmpeg...")
watermark_image = 'logo.png'
output_watermarked = 'output_watermarked.mp4'
ffmpeg_args = [
'-i', input_video_file,
'-i', watermark_image,
'-filter_complex', 'overlay=W-w-10:10',
'-codec:a', 'copy',
'-y',
output_watermarked
]
success = oiffmpeg.run_ffmpeg(ffmpeg_args)
print(f"Watermarking {'successful' if success else 'failed'}.")
except Exception as e:
print(f"An error occurred during watermarking: {e}")
try:
print(f"Streaming from webcam to {rtmp_endpoint} (Illustrative Example)...")
webcam_args = [
'-f', 'v4l2', '-i', '/dev/video0',
'-c:v', 'libx264', '-preset', 'veryfast', '-tune', 'zerolatency',
'-c:a', 'aac', '-b:a', '128k',
'-f', 'flv',
rtmp_endpoint
]
print("Webcam streaming example skipped (requires specific setup).")
except Exception as e:
print(f"An error occurred during webcam streaming example: {e}")
Contributing
Contributions are welcome! If you find a bug or have a feature request, please open an issue on the GitHub repository (https://github.com/tiendung102k3/OIFFmpeg/issues). Pull requests are also appreciated.
License
This project is licensed under the MIT License - see the LICENSE file for details.