簡體   English   中英

如何為mp4容器的視頻流指定偏移量和搜尋位置?

[英]How to specify an offset and a seek position for a video stream of a mp4 container?

看來我可以擁有一個或另一個( -ss-itsoffset ),但絕不能同時使用這兩個,否則它們會互相抵消。

我使用以下命令創建output.mp4:

ffmpeg -i input.mp3 -itsoffset 4 -t 4 -ss 3 -i input.mp4 -c:v copy output.mp4

使用此命令,我希望音頻立即開始播放,而視頻則在4秒后開始播放,這是在3秒內找到的。

但是,當我播放input.mp4時,視頻僅比音頻晚一秒(而不是4秒)開始。 我想它做的是“偏移-搜尋= 1”類型的事情。

如何防止尋道影響偏移量?

干杯!

正如Gyan所建議的,我通過使用搜索位置和持續時間分別對視頻流進行編碼來使其工作:

ffmpeg -t 4 -ss 3 -i input.mp4 -c:v libx264 output.mp4

然后將其與偏移量混合在最終的.mp4中:

ffmpeg -i input.mp3 -itsoffset 4 -i input.mp4 -c:v copy output.mp4

“我希望音頻會立即開始播放,而視頻會在4秒后開始播放,
(在視頻中3秒時尋求)。

沒有重新編碼怎么辦?”

嘗試用作:

ffmpeg -ss 00:00:03 -itsoffset 4 -i video.mp4 -ss 00:00:00 -i audio.mp3 -c:v copy output.mp4

命令的含義(以及它們的輸入/順序也很重要)...

-ss 00:00:03 =搜索3秒的輸入video.mp4以將其設置為輸出視頻軌道的起點。

-itsoffset 4 =設置輸入播放為輸出之前的延遲。 使靜止畫面持續4秒鍾。

-i video.mp4 =此時設置視頻輸入。

-ss 00:00:00 =尋求成輸入為0秒audio.mp4作為輸出音頻軌道的開始點。

-i audio.mp3 =此時設置音頻輸入...( 請參閱下面的音頻旁注 )。

-c:v copy =( 避免重新編碼視頻軌道 )。

output.mp4 =設置輸出A / V 容器

旁注:

關於視頻: MPEG視頻只能搜索關鍵幀 (也稱為i-frames )。 如預期的事情可能無法正常工作,如果你設置-ss 3 ,同時還使用-c:v copy ,並沒有在時間找到關鍵幀-ss

3秒可能缺少關鍵幀可能解釋了您:

“當我播放input.mp4 ,視頻僅比音頻晚一秒開始播放
(而不是4秒)”

甚至在文檔中對此進行了警告 (請參閱: FFmpeg Wiki頁面-Seeking )。

在進行編解碼器復制時尋求

-ss-c:v復制一起用作輸入選項可能不正確,因為ffmpeg被強制僅在i幀上使用/拆分。 盡管可能,但可能的話,請將流的開始時間調整為負值以彌補這一點。

基本上,如果您指定“ second 157”,並且直到159都沒有關鍵幀,則它將在開始時包含兩秒鍾的音頻(無視頻),然后從第一個關鍵幀開始。

So be careful when splitting and doing codec copy

唯一的解決方案是保持測試/調整視頻的-ss值以找到次優的折衷方案。

  • 考慮使用HOURS:MM:SS.MILLISECONDS時間格式,使其最接近預期的3秒。 例如: -ss 00:00:02.895

關於音頻: MP4通常具有AAC音軌。 請注意,由於您輸入的音頻為MP3格式,因此FFmpeg會將其自動重新編碼為AAC格式。

  • 為避免音頻格式重新編碼:用-c:a copy強制MP3
    (可以在上述-c:v copy之后添加)。

暫無
暫無

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

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