題 成功連接多個視頻


我的任務是用舊的網頁幻燈片創建視頻。首先,我有一個jpeg和音頻文件,在舊系統中用作Flash幻燈片,結構如下:

音頻結構

  • my_audio_1.mp3(這個文件是3秒鐘的沉默mp3)
  • my_audio_2.mp3
  • my_audio_3.mp3
  • my_audio_4等...... 每張幻燈片大約30個mp3

圖像結構

  • my_image_1.jpg(這作為開場幻燈片)
  • my_image_2.jpg
  • my_image_3.jpg
  • my_image_4。等等... 每張幻燈片大約30張圖片

由於有近100個必須轉換為視頻的幻燈片,我創建了一個基於Web的界面,使用PHP自動化該過程,該過程位於本地系統上並嘗試使用文件組合 了shell_exec()。該過程使用以下工作流程:

  1. 循環每張幻燈片並製作avi或mpeg。所以舉個例子 my_mini_video_2.avi 將是一個包含的視頻 my_image_2.jpg 並有一個配樂 my_audio_2.mp3。這張幻燈片將持續一段時間 my_audio_2.mp3
  2. 加入/縫合/連接所有迷你視頻以創建最終視頻(使用組合  或者 MEncoder的 要么 ffmpeg的 (我也試過了 avimerge 但無濟於事。
  3. 將新的“主”視頻轉碼為各種格式,如flv等。

我認為這很簡單,並且在很多場合都很接近,但它仍然無效。我無法通過第2階段,因為我無法獲得完美的“主人”視頻。我現在已經嘗試過Mencoder,FFMpeg,似乎已經完成了我能想到的每一個組合。該 問題 無論我嘗試什麼,音頻和視覺都不會同步。

此外,我甚至嘗試過創建無音頻迷你視頻,使用兩者將MP3連接成一個長MP3  和 mp3wrap 然後將新的長MP3分配為音軌,但這總是產生一個非常短的文件或一個非常慢的文件,並使女性畫外音聽起來像男性拳擊手!

原始文件似乎沒有任何問題。

有沒有人有過從同一個起點成功製作視頻的經驗?或者我可能做錯什麼的任何想法?

舉個例子:

如果我創建靜音迷你視頻,並將它們拼接成'temp-master.mpg',然後將MP3連接成一個名為'temp-master-audio.mp3'的MP3,音頻文件的持續時間為09:10 video file的持續時間是08:35。它們應該是相同的,音頻看起來很邋..

我沒有發布代碼,因為我已經寫了很多很多組合。

2010年3月21日更新

感謝Michael Steele關於AviSynth和VirtualDub的建議(我已經添加了GScript插件),我已經設法取得了一些進展,這個腳本幾乎可以正常工作。現在唯一的問題是,雖然在這個例子中,我想要將4個迷你視頻彼此相鄰地添加,但迷你視頻總是相同的(例如, video-4,video-4,video-4,video-4 而不是 video-1,video-2,video-3,video-4):

# A nearly functional AVS file    

# Set out some basic variables
base_audio = "C:\..."
base_image = "C:\..."
total_slides = 4

LoopThroughFiles(total_slides, base_audio, base_image)

#This is the function for outputting each combination
function AudioNImage(string mp3, string image, float fps)
{
    audio = DirectShowSource(mp3)
    length = audiolengthF(audio)
    rate = Audiorate(audio)
    frames = Int((length/rate)*fps)
    video = ImageSource(image, end=Int(frames), fps=fps)
    return audiodub(video, audio)
}

#Loop through the files to create the full command string
# My audio and image files are in the format of VID0002.jpg and VID0002.mp3
function LoopThroughFiles(int total, string audiopath, string imagepath)
{
    GScript("""
        cmd = ""
        for (i=1, total) {
            audio = audiopath + "000" + String(i) + ".mp3"
            picture = imagepath + "000" + String(i) + ".jpg"
            cmd = cmd + "AudioNImage(audio, picture, 25)"
            if (i < total) {
                cmd = cmd + "+" 
            }
        }
        GEval(cmd)
    """)
}

所以這幾乎就在那裡,但我只需要找出為什麼迷你視頻不會增加?


5
2018-03-19 13:13


起源


這是編碼問題嗎?如果是這樣,它會得到更好的回應 stackoverflow.com - 但是你 將 需要發布一些代碼。此外,如果是帖子可以遷移(5票後),所以你不需要再次實際發布。 - ChrisF
這可能是一個愚蠢的鏡頭,但單滑動視頻的長度和與它一起使用的mp3是否完全一致? - Neo
chrisF,我沒有在StackOverflow上發布這個,因為它不是完全代碼,更多的是命令行變化。編程沒有問題。我相信這與軟件命令有關。 Neo,奇怪的是每個迷你視頻都是完美的。合併的視頻長度可以正常工作,但組合文件的聲音持續時間更長。
你可能會問 home4film.com 它具有類似的Q-n-A格式,專注於音頻/視頻和家庭影院的內容。這個問題在這裡很受歡迎,但他們也很感激。 (它不是Stack Overflow三部曲的一部分,因此在這里和那裡交叉應該不會有問題。) - quack quixote


答案:


您的問題可能是由於源內容中的幀速率不同而引起的。使用MediaInfo等應用程序來確定是否存在此問題。

建議#1

我使用AviSynth和VirtualDub成功完成了這樣的任務。 Avisynth根據您編寫的腳本創建視頻流。它非常適合組合多個小文件,因為您可以設置精確的時序。您可能必須使用許多第三方插件中的一個來顯示連續的.jpg圖像以設置一段時間。

一旦您對AviSynth正在製作的內容感到滿意,請使用VirtualDub將其編碼為您想要的任何格式。

建議#2

單獨進行音頻和視頻拼接,然後將兩個流合併為最後一步。

  1. 使用Audacity等音頻編輯器創建一個主.mp3或未壓縮的.wav。
  2. 像往常一樣創建幻燈片視頻。
  3. 結合兩個流。 VirtualDub可以做到這一點,但這對於這麼簡單的事情來說有點麻煩。我用過ripbot264。流行的Handbrake工具也可能會這樣做。

1
2018-03-19 21:32



嗨邁克爾,謝謝你的建議。我已經在PC上安裝了AviSynth和VirtualDubMod,而且我越來越近了。我在AviSynth中編寫了一個幾乎可以工作的腳本,但是沒有更改圖像/音頻。我已相應更新了我的問題......
邁克爾,我現在要使用AviSynth和VirtualDub的組合來創建我的主文件。我正在使用自定義代碼為AviSynth生成AVS腳本,然後我將使用其他軟件進行編碼。謝謝你的建議。