fixed fmpeg crasg on linux

This commit is contained in:
deepbeepmeep 2025-08-04 19:47:38 +02:00
parent 7b6c6e11b5
commit b2c3416bcd

View File

@ -488,6 +488,8 @@ def extract_audio_tracks(source_video, verbose=False, query_only=False):
return file_paths, metadata return file_paths, metadata
import subprocess
import subprocess import subprocess
def combine_and_concatenate_video_with_audio_tracks( def combine_and_concatenate_video_with_audio_tracks(
@ -516,10 +518,10 @@ def combine_and_concatenate_video_with_audio_tracks(
if source_audio_duration == 0: if source_audio_duration == 0:
if n: if n:
inputs += ['-i', n] inputs += ['-i', n]
filters.append(f'[{idx}:a]apad=pad_dur=100[aout{i}];') filters.append(f'[{idx}:a]apad=pad_dur=100[aout{i}]')
idx += 1 idx += 1
else: else:
filters.append(f'anullsrc=r={audio_sampling_rate}:cl=mono,apad=pad_dur=100[aout{i}];') filters.append(f'anullsrc=r={audio_sampling_rate}:cl=mono,apad=pad_dur=100[aout{i}]')
else: else:
if s: if s:
inputs += ['-i', s] inputs += ['-i', s]
@ -533,32 +535,32 @@ def combine_and_concatenate_video_with_audio_tracks(
if needs_filter: if needs_filter:
filters.append( filters.append(
f'[{idx}:a]aresample={audio_sampling_rate},aformat=channel_layouts=mono,' f'[{idx}:a]aresample={audio_sampling_rate},aformat=channel_layouts=mono,'
f'apad=pad_dur={source_audio_duration},atrim=0:{source_audio_duration},asetpts=PTS-STARTPTS[s{i}];') f'apad=pad_dur={source_audio_duration},atrim=0:{source_audio_duration},asetpts=PTS-STARTPTS[s{i}]')
else: else:
filters.append( filters.append(
f'[{idx}:a]apad=pad_dur={source_audio_duration},atrim=0:{source_audio_duration},asetpts=PTS-STARTPTS[s{i}];') f'[{idx}:a]apad=pad_dur={source_audio_duration},atrim=0:{source_audio_duration},asetpts=PTS-STARTPTS[s{i}]')
if lang := meta.get('language'): if lang := meta.get('language'):
metadata_args += ['-metadata:s:a:' + str(i), f'language={lang}'] metadata_args += ['-metadata:s:a:' + str(i), f'language={lang}']
idx += 1 idx += 1
else: else:
filters.append( filters.append(
f'anullsrc=r={audio_sampling_rate}:cl=mono,atrim=0:{source_audio_duration},asetpts=PTS-STARTPTS[s{i}];') f'anullsrc=r={audio_sampling_rate}:cl=mono,atrim=0:{source_audio_duration},asetpts=PTS-STARTPTS[s{i}]')
if n: if n:
inputs += ['-i', n] inputs += ['-i', n]
start = '0' if new_audio_from_start else source_audio_duration start = '0' if new_audio_from_start else source_audio_duration
filters.append( filters.append(
f'[{idx}:a]aresample={audio_sampling_rate},aformat=channel_layouts=mono,' f'[{idx}:a]aresample={audio_sampling_rate},aformat=channel_layouts=mono,'
f'atrim=start={start},asetpts=PTS-STARTPTS[n{i}];' f'atrim=start={start},asetpts=PTS-STARTPTS[n{i}]')
f'[s{i}][n{i}]concat=n=2:v=0:a=1[aout{i}];') filters.append(f'[s{i}][n{i}]concat=n=2:v=0:a=1[aout{i}]')
idx += 1 idx += 1
else: else:
filters.append(f'[s{i}]apad=pad_dur=100[aout{i}];') filters.append(f'[s{i}]apad=pad_dur=100[aout{i}]')
maps += ['-map', f'[aout{i}]'] maps += ['-map', f'[aout{i}]']
cmd = ['ffmpeg', '-y', *inputs, cmd = ['ffmpeg', '-y', *inputs,
'-filter_complex', ''.join(filters), '-filter_complex', ';'.join(filters), # ✅ Only change made
*maps, *metadata_args, *maps, *metadata_args,
'-c:v', 'copy', '-c:v', 'copy',
'-c:a', audio_codec, '-c:a', audio_codec,
@ -567,7 +569,7 @@ def combine_and_concatenate_video_with_audio_tracks(
'-ac', '1', '-ac', '1',
'-shortest', save_path_tmp] '-shortest', save_path_tmp]
if verbose : if verbose:
print(f"ffmpeg command: {cmd}") print(f"ffmpeg command: {cmd}")
try: try:
subprocess.run(cmd, check=True, capture_output=True, text=True) subprocess.run(cmd, check=True, capture_output=True, text=True)