我正在嘗試使用ffmpeg庫查找視頻中給定的幀。我知道有av_seek_frame()
函數,但推薦使用avformat_seek_file()
來代替。類似的東西提到here。我知道avformat_seek_file()
不能總是帶你到你想要的確切框架,但這對我來說確實很好。我只想跳到最近的關鍵幀。所以我打開視頻,找到videostream並像這樣調用它: avformat_seek_file(formatContext, streamId, 0, frameNumber, frameNumber, AVSEEK_FLAG_FRAME)
。它總是返回0,所以我理解它是正確的完成。但是,它不適用。我在調用avformat_seek_file()
之前和之後檢查字節位置,如here。實際上,它會改變,但只要我試圖放置不同的目標幀數,它總是以相同的方式改變!我的意思是,在這個調用之後的字節位置總是相同的,即使是不同的frameNumber
值。顯然,我做錯了什麼,但我不知道究竟是什麼。我不知道它是否重要,但我使用.h264文件。我嘗試了不同的標誌,不同的文件,使用時間戳而不是幀,前後沖洗緩衝區等,但它對我無效。如果有人能告訴我它有什麼問題,我將非常感激。ffmpeg函數的問題avformat_seek_file()
1
A
回答
5
我有同樣的問題,看到代碼波紋管(我的作品):
...
checkPosition(input_files[file_index].ctx);
...
void checkPosition(AVFormatContext *is) {
int stream_index = av_find_default_stream_index(is);
//Convert ts to frame
tm = av_rescale(tm, is->streams[stream_index]->time_base.den, is- >streams[stream_index]->time_base.num);
tm /= 1000;
//SEEK
if (avformat_seek_file(is, stream_index, INT64_MIN, tm, INT64_MAX, 0) < 0) {
av_log(NULL, AV_LOG_ERROR, "ERROR av_seek_frame: %u\n", tm);
} else {
av_log(NULL, AV_LOG_ERROR, "SUCCEEDED av_seek_frame: %u newPos:%d\n", tm, is->pb->pos);
avcodec_flush_buffers(is->streams[stream_index]->codec);
}
}
0
你的問題可能涉及到的事實,你輸入的原始.h264。嘗試使用例如mp4box將其複製到一個.mp4文件中,然後用ffmpeg加載mp4文件並嘗試再次尋找關鍵幀。例如:
mp4box -new -add my_file.h264 my_file.mp4
相關問題
- 1. ffmpeg的問題
- 2. ffmpeg的問題
- 3. ffmpeg問題
- 4. FFMPEg和gcc問題
- 5. 使用avcodec_close的ffmpeg問題
- 6. FFMPEG在Java中的問題
- 7. 問題的FFMPEG和PHP
- 8. 的ffmpeg及水印問題
- 9. ffmpeg的RTMP流問題
- 10. 函數問題
- 11. 另一個ffmpeg/libx264問題
- 12. FFmpeg比特率問題
- 13. C++ FFmpeg節距問題
- 14. ffmpeg - 編譯問題與g ++
- 15. 爲iFrameExtractor編譯ffmpeg問題
- 16. ffmpeg編碼器流問題
- 17. ffmpeg子流程問題
- 18. ffmpeg視頻轉換問題?
- 19. nodejs FFMPEG自變量問題
- 20. FFmpeg音頻Desync問題
- 21. iphone編碼與ffmpeg問題
- 22. 在iphone SDK中ffmpeg問題?
- 23. building mobileVLC - > armc7 + ffmpeg問題
- 24. tolower的()函數的問題
- 25. Python函數問題
- 26. Javascript函數問題
- 27. PHP函數問題
- 28. 函數getline問題
- 29. date()函數問題
- 30. insertBefore函數問題
嗨,這是工作ffmpeg 0.11.1及以下版本。但是,當我使用以上版本(ffmpeg 2.1及以上版本)時,我遇到問題意味着當我們應用seek時,一些mp3歌曲的播放時間也超過了。你會告訴任何解決方案嗎? – user543