我試圖將音頻文件與視頻文件合併。 我有兩個選擇:用ffmpeg合併視頻和音頻。在音頻未結束時循環播放視頻
有一個非常小的視頻文件(例如,10秒)循環而音頻文件還沒有結束。
有一個很長的視頻文件(比我的任何音頻文件都長),我可以在其上附加音頻文件。我想在音頻完成時剪切視頻。
我使用後者與ffmpeg的-t選項。這意味着我必須獲取音頻文件的持續時間才能將其輸入到ffmpeg中。可以避免這一步嗎?
第一個解決方案的任何指針?
我試圖將音頻文件與視頻文件合併。 我有兩個選擇:用ffmpeg合併視頻和音頻。在音頻未結束時循環播放視頻
有一個非常小的視頻文件(例如,10秒)循環而音頻文件還沒有結束。
有一個很長的視頻文件(比我的任何音頻文件都長),我可以在其上附加音頻文件。我想在音頻完成時剪切視頻。
我使用後者與ffmpeg的-t選項。這意味着我必須獲取音頻文件的持續時間才能將其輸入到ffmpeg中。可以避免這一步嗎?
第一個解決方案的任何指針?
通過使用ffmpeg的-shortest選項很容易解決第二個問題。請參閱:http://www.ffmpeg.org/ffmpeg-doc.html#SEC12瞭解更多詳情。
的第一個,嘗試ffmpeg -i yourmovie.mp4 -loop 10
循環輸入10次
對於第一點我看不到直接的命令。我建議使用ffprobe
來計算這兩個文件的持續時間,並計算在音頻持續時間內需要播放的視頻循環數。
以下將導致輸入的持續時間。
ffprobe -i input_media -show_entries format=duration -v quiet -of csv="p=0"
然後,您可以手動循環播放視頻,直到您滿足視頻實例的計算值。
ffmpeg -i input_audio -f concat -i <(for i in {1..n}; do printf "file '%s'\n" input_video; done) -c:v copy -c:a copy -shortest output_video
1..n
表示視頻需要循環的次數。因爲您已經計算了音頻的持續時間,所以您可以使用-t
而不是-shortest
。
以下是關聯的shell腳本。
#!/bin/bash
audio_duration=$(ffprobe -i ${1} -show_entries format=duration -v quiet -of csv="p=0")
video_duration=$(ffprobe -i ${2} -show_entries format=duration -v quiet -of csv="p=0")
n_loops=$(echo "(${audio_duration}/${video_duration}) + 1"|bc)
ffmpeg -i ${1} -f concat -i <(for i in {1..${n_loops}}; do printf "file '%s'\n" ${2}; done) -c:v copy -c:a copy -shortest ${3}
對於windows,您可以將此shell腳本轉換爲批處理腳本。
的更多信息:
希望這有助於!
-loop_input已棄用,請使用-loop 1 請注意,這兩個循環選項僅適用於-f image2 – puchu 2012-03-05 18:42:29
無法使用-loop 10或-loop 1工作。我正在嘗試將mp4視頻(3分鐘)循環播放2小時的音頻。 – Sun 2014-12-31 22:01:23