instance1 / video.py
ChandimaPrabath's picture
fix
4587aee
raw
history blame
2.1 kB
import os
import logging
import uuid
from ffmpy import FFmpeg
# 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"):
# Generate a unique directory for the stream
unique_id = str(uuid.uuid4())
stream_dir = os.path.join(output_dir, unique_id)
if not os.path.exists(stream_dir):
os.makedirs(stream_dir)
# Set the output paths
output_path = os.path.join(stream_dir, 'output.m3u8')
segment_filename = os.path.join(stream_dir, 'segment_%03d.ts')
file_url = "'"+file_url+"'"
# Construct the FFmpeg command using ffmpy
ff = FFmpeg(
inputs={file_url: None},
outputs={
output_path: f'-c:v libx264 -crf 23 -preset medium -c:a aac -b:a 192k -f hls '
f'-hls_time 10 -hls_list_size 0 -hls_segment_filename {segment_filename}'
},
global_options=f'-headers \"Authorization: Bearer {token}\r\n"'
)
try:
# Log the command being executed
logging.debug(f"Running FFmpeg command: {ff.cmd}")
# Run the FFmpeg command
ff.run()
# 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 unique_id, output_path
except Exception as e:
logging.error(f"Error using FFmpeg to stream file: {e}")
return None, None
# Uncomment and modify the following lines if you want to test the script
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, output_path = 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.")