ffmpeg.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import os
  2. import tempfile
  3. import ffmpeg
  4. from .mytempfile import MyTempFile
  5. from .files import filename
  6. def get_audio(paths: list, audio_channel_index: int, sample_interval: list):
  7. temp_dir = tempfile.gettempdir()
  8. audio_paths = {}
  9. for path in paths:
  10. print(f"Extracting audio from {filename(path)}...")
  11. output_path = os.path.join(temp_dir, f"{filename(path)}.wav")
  12. ffmpeg_input_args = {}
  13. if sample_interval is not None:
  14. ffmpeg_input_args['ss'] = str(sample_interval[0])
  15. ffmpeg_output_args = {}
  16. ffmpeg_output_args['acodec'] = "pcm_s16le"
  17. ffmpeg_output_args['ac'] = "1"
  18. ffmpeg_output_args['ar'] = "16k"
  19. ffmpeg_output_args['map'] = "0:a:" + str(audio_channel_index)
  20. if sample_interval is not None:
  21. ffmpeg_output_args['t'] = str(
  22. sample_interval[1] - sample_interval[0])
  23. ffmpeg.input(path, **ffmpeg_input_args).output(
  24. output_path,
  25. **ffmpeg_output_args
  26. ).run(quiet=True, overwrite_output=True)
  27. audio_paths[path] = output_path
  28. return audio_paths
  29. def add_subs_new(subtitles: dict):
  30. input_file = list(subtitles.keys())[0]
  31. subtitle_file = subtitles[input_file]
  32. output_file = input_file
  33. os.rename(input_file, input_file+'_edit')
  34. input_stream = ffmpeg.input(input_file+'_edit')
  35. subtitle_stream = ffmpeg.input(subtitle_file)
  36. # Combine input video and subtitle
  37. output = ffmpeg.output(input_stream, subtitle_stream, output_file.replace('.mkv','.mp4'), c='copy', **{'c:s': 'mov_text'}, **{'metadata:s:s:0': 'language=eng'})
  38. ffmpeg.run(output, quiet=True, overwrite_output=True)
  39. os.remove(input_file+'_edit')
  40. # remove tempfiles
  41. os.remove(subtitle_file)
  42. os.remove(subtitle_file.replace(".srt",".wav"))