簡體   English   中英

如何在 ffmpeg-python 中使用“最短”參數

[英]How to use the 'shortest' argument with ffmpeg-python

我第一次使用ffmpeg-python 我試圖在ffmpeg.output()中使用 shortest shortest=1參數,但是當我使用它時,我的程序不斷給我錯誤。

我想用來自 bar.webm 的音頻替換來自foo.mp4的音頻,同時保持bar.webm的視覺foo.mp4 我得到了這個工作,但問題是ffmpeg.concat默認情況下會繼續播放來自foo.mp4的音頻,而來自bar.webm的視覺效果已經停止播放。 根據此 FFmpeg 文檔頁面,這是預期的行為:“concat 過濾器將使用每個段中最長的 stream 的持續時間(最后一個除外),並在必要時用靜音填充較短的音頻流。”

我希望 output 視頻在視覺停止播放時停止,所以我希望它切斷音頻,但我無法讓它工作。 該頁面還指出,我應該能夠添加shortest作為參數以獲得我想要的結果:“如果設置為 1,則在最短輸入終止時強制 output 終止。默認值為 0。” 不過,我無法讓它工作。 下面代碼塊中的第二行包含shortest=1 ,我希望它可以工作,但我得到了這個錯誤:

[NULL @ 000001d50dfdea80] Unable to find a suitable output format for '1'1: Invalid argument

正如預期的那樣,使用shortestfoo反而會給我這個錯誤:

Unrecognized option 'shortestfoo'. Error splitting the argument list: Option not found

這告訴我shortest的參數是一個可能的參數,但是我分配給它的1值是錯誤的。 將它設置為None我的程序運行,但音頻仍然不會被設置為None被切斷,當然。

我應該在這里使用什么shortest的值? 我在評估我只是使用錯誤的shortest值時是否正確? 非常感謝!

編輯:嘗試使用True而不是 1。嘗試使用**{'shortest': 1}**{'shortest': True} 這些也沒有用。

import ffmpeg

input_video_name = 'foo'
input_video_extension = '.mp4'

input_audio_name = 'bar'
input_audio_extension = '.webm'

input_video = ffmpeg.input('input videos/' + input_video_name + input_video_extension)
input_audio = ffmpeg.input('input audio/'+ input_audio_name + input_audio_extension)

stream = ffmpeg.concat(input_video, input_audio, v=1, a=1)

stream = ffmpeg.output(stream, 'output videos/' + input_video_name + '.mp4', shortest=1)
ffmpeg.run(stream)

找到了答案這個人為我的問題提供了解決方案。 我不知道為什么這確實有效,所以我在原始代碼中缺少什么:

video_part = ffmpeg.input('video.mp4')
audio_part = ffmpeg.input('audio.mp3')
(
    ffmpeg
    .output(audio_part.audio, video_part.video, 'output-video.mp4', shortest=None, vcodec='copy')
    .run()

)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM