我一直在使用 FFMPEG,仍然是一個初學者,但我學到了很多東西。所以我必須合并 2 個音頻,一個屬于視頻,一個只是 .mp3 文件。我得到了正確的 shell exec,但現在我想使用 FFMPEG php 庫。這是正確的(我認為)和有效的 shell 命令:/usr/bin/ffmpeg -y -i video-short.mp4 -i audio-short.mp3 -filter_complex "[0:a][1:a]amerge=inputs=2 [a]" -map 0:v -map "[a]" -c:v copy -c:a aac -ac 2 -b:a 128k video3-audio-output.mp4這將輸出帶有 2 個音頻的視頻。在我編寫了 php 代碼并編輯了一些輸出的代碼以便腳本工作之后,我得到了這個。這是 php 代碼,我似乎無法弄清楚如何返回正確的 shell。 $video = $this->ffmpeg->openAdvanced([ 'video-short.mp4', 'audio-short.mp3' ]); $video ->filters() ->custom('[0:a][1:a]', 'amerge=inputs=', '2[a]' ); $video ->map(array('0:v', '"[a]"'), new X264('aac'), 'video3-audio-output.mp4' ) ->save();現在我需要獲取代碼以返回類似 shell 的東西,它確實有效,我已經嘗試了很多小時。這是我的 php 返回的內容,它給出了編碼錯誤,另外No channel layout for input 1/usr/bin/ffmpeg -y -i video-short.mp4 -i audio-short.mp3 -filter_complex [0:a][1:a]amerge=inputs=2[a] -map 0:v -map "[a]" -vcodec libx264 -acodec aac -b:a 128k video3-audio-output.mp4(編輯)所以我將“復制”添加到 FFMpeg\Format\Video\X264 getAvaiableVideoCodecs()。如果我將 'copy' 添加到 new X264('aac', 'copy') 它會轉儲正確的 Shell 命令,但它仍然會在“編碼失敗”時崩潰
1 回答

心有法竹
TA貢獻1866條經驗 獲得超5個贊
我找到了解決方案,這可能是一個常見問題。
因此,您需要將“復制”添加到 FFMpeg\Format\Video\X264 getAvaiableVideoCodecs()。
但不是“amerge”,它出于某種原因不會在前端合并給定的音頻文件并返回編碼失敗。我們使用混合。
使用混合。這是一個示例,說明代碼在運行時的樣子。
$video = $this->ffmpeg->openAdvanced(array(
'videoplayback.mp4',
'audio-short.mp3'
));
$video
->filters()
->custom('[0:a][1:a]', 'amix=inputs=', '2[a]' );
$video
->map(array('0:v', '[a]'), new X264('aac', 'copy'),
'video3-audio-output.mp4'
)
->save();
這可以幫助將來的人們。
- 1 回答
- 0 關注
- 301 瀏覽
添加回答
舉報
0/150
提交
取消