我正在嘗試使用 ffmpeg c api 更改視頻播放速度。到目前為止,除了應用于音頻流時時基的更改不會加速音頻之外,一切都在作業。相反,它會剪掉部分音頻。這大概是我所擁有的:
for (uint64_t i = 0; i < in_ctx->nb_streams; i ) { // Copy over streams and codec parameters
AVStream* in_stream = in_ctx->streams[i];
AVStream* out_stream = avformat_new_stream(out_ctx, NULL);
in_stream->time_base.den = 20000;
if (!out_stream) {
return fatal_error();
}
avcodec_parameters_copy(out_stream->codecpar, in_stream->codecpar);
}
if (avio_open(&out_ctx->pb, argv[2], AVIO_FLAG_WRITE) < 0 ||
avformat_write_header(out_ctx, NULL) < 0) {
return fatal_error();
}
while (av_read_frame(in_ctx, packet) >= 0) {
AVStream* in_stream = in_ctx->streams[packet->stream_index];
AVStream* out_stream = out_ctx->streams[packet->stream_index];
av_packet_rescale_ts(packet, in_stream->time_base, out_stream->time_base);
if (av_interleaved_write_frame(out_ctx, packet) < 0) {
return fatal_error();
}
}
uj5u.com熱心網友回復:
您必須使用 atempo 過濾器或類似工具來改造音頻流。
更改有效時間戳適用于視頻,因為幀中的所有像素都應該在給定的時間戳上繪制。一個音頻包是一個樣本序列。更改資料包時間戳會改變該資料包的出現時間,但不會改變播放序列中每個樣本的持續時間,即1/samplerate. 因此,即使及時壓縮音頻資料包的時間戳,解碼器也會等待當前資料包播放完畢。如果下一個資料包的播放延遲超過了播放器使用的任何閾值或同步要求,預計它會被丟棄。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/331917.html
上一篇:Cfscanf給出分段錯誤。說缺少檔案(我的檔案名為lab4.dat并且位于同一位置)
下一篇:模數索引對性能有巨大影響
