![](/img/trans.png)
[英]How to get the offset of a video stream of a mp4 container with ffmpeg?
[英]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.