instance1 / video.py
ChandimaPrabath's picture
fix
6c29d73
raw
history blame
2.32 kB
from ffmpy import FFmpeg
import os
import subprocess
import logging
import uuid
# Set up logging
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')
def ffmpeg_stream(file_url, token, output_dir="tmp/cache/stream"):
stream_dir = output_dir
if not os.path.exists(stream_dir):
os.makedirs(stream_dir)
# Set up the FFmpeg command for HLS
output_path = stream_dir+'/output.m3u8'
segment_filename = stream_dir+'/segment_%03d.ts'
ffmpeg_command = [
'ffmpeg',
'-headers', f'Authorization: Bearer {token}',
'-i', file_url,
'-c:v', 'libx264',
'-crf', '23',
'-preset', 'medium',
'-c:a', 'aac',
'-b:a', '192k',
'-f', 'hls',
'-hls_time', '10',
'-hls_list_size', '0',
'-hls_segment_filename', segment_filename,
output_path
]
try:
# Log the command being executed
logging.debug(f"Running FFmpeg command: {' '.join(ffmpeg_command)}")
# Run the FFmpeg command
process = subprocess.Popen(
ffmpeg_command,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)
# Capture stdout and stderr
stdout, stderr = process.communicate()
# Log FFmpeg output
logging.debug("FFmpeg stdout: %s", stdout.decode())
logging.error("FFmpeg stderr: %s", stderr.decode())
# Check if the output file was created
if os.path.exists(output_path):
logging.info(f"HLS playlist created at {output_path}")
else:
logging.error(f"HLS playlist not created at {output_path}")
# Return the unique stream ID and process
return process
except Exception as e:
logging.error(f"Error using FFmpeg to stream file: {e}")
return None, None
# if __name__ == "__main__":
# url = "https://huggingface.co/Unicone-Studio/jellyfin_media/resolve/main/films/Funky%20Monkey%202004/Funky%20Monkey%20(2004)%20Web-dl%201080p.mp4"
# token = os.getenv("TOKEN")
# stream_id, process = ffmpeg_stream(url, token)
# if stream_id:
# logging.info(f"HLS playlist created with stream ID: {stream_id}")
# else:
# logging.error("Failed to create HLS playlist.")