Windows io 形式 ffmpeg 保存ts文件
时间: 2023-07-21 16:36:58 浏览: 155
如果您想在 Windows 上使用 ffmpeg 保存 TS 文件,可以使用以下命令行:
```
ffmpeg -i input_file -c copy -bsf:v h264_mp4toannexb -f mpegts output_file.ts
```
该命令会将输入文件转换为 MPEG-TS 格式,并将其保存为输出文件。其中,-i 指定输入文件,-c copy 表示复制输入文件中的音视频数据,-bsf:v h264_mp4toannexb 用于将 H.264 编码的视频流转换为 Annex B 形式,-f mpegts 指定输出格式为 MPEG-TS,output_file.ts 是输出文件路径。
请注意,您需要先安装 ffmpeg 并将其添加到系统路径中。
相关问题
vistual studio io 形式 ffmpeg 保存ts文件
在 Visual Studio 中使用 FFmpeg 保存 TS 文件,您需要将 FFmpeg 库添加到您的项目中,并使用 C++ 代码编写文件保存功能。
以下是一个简单的示例程序,它使用 FFmpeg 库将输入文件保存为 MPEG-TS 文件:
```cpp
extern "C"
{
#include <libavformat/avformat.h>
#include <libavutil/opt.h>
}
int save_as_ts(const char* input_file, const char* output_file)
{
AVFormatContext* input_format_ctx = NULL;
AVFormatContext* output_format_ctx = NULL;
AVPacket pkt;
int ret;
av_register_all();
// Open input file
if ((ret = avformat_open_input(&input_format_ctx, input_file, NULL, NULL)) < 0) {
return ret;
}
// Retrieve stream information
if ((ret = avformat_find_stream_info(input_format_ctx, NULL)) < 0) {
return ret;
}
// Open output file
if ((ret = avformat_alloc_output_context2(&output_format_ctx, NULL, NULL, output_file)) < 0) {
return ret;
}
// Open output file for writing
if ((ret = avio_open(&output_format_ctx->pb, output_file, AVIO_FLAG_WRITE)) < 0) {
return ret;
}
// Write stream headers
if ((ret = avformat_write_header(output_format_ctx, NULL)) < 0) {
return ret;
}
// Loop through input packets
while (av_read_frame(input_format_ctx, &pkt) >= 0) {
// Write packet to output file
if ((ret = av_interleaved_write_frame(output_format_ctx, &pkt)) < 0) {
return ret;
}
// Free packet
av_packet_unref(&pkt);
}
// Write stream trailer
av_write_trailer(output_format_ctx);
// Close input file
avformat_close_input(&input_format_ctx);
// Close output file
avio_close(output_format_ctx->pb);
avformat_free_context(output_format_ctx);
return 0;
}
```
此代码使用 FFmpeg 库的 AVFormatContext 结构体打开输入文件和输出文件,并使用 av_read_frame() 和 av_interleaved_write_frame() 函数循环读取输入文件中的数据包,并将其写入输出文件。请注意,此代码假定输入文件和输出文件都具有单个音频/视频流。
您可以在 Visual Studio 中创建一个 C++ 项目,并将 FFmpeg 库和头文件添加到项目中。然后,您可以将此代码添加到您的项目中,并调用 save_as_ts() 函数来保存输入文件。
vistual studio io 形式把内存h264数据通过 ffmpeg 保存ts文件
在 Visual Studio 中使用 FFmpeg 将内存中的 H.264 数据保存为 TS 文件,您需要将 FFmpeg 库添加到您的项目中,并使用 C++ 代码编写文件保存功能。以下是一个简单的示例程序,它将内存中的 H.264 数据保存为 MPEG-TS 文件:
```cpp
extern "C"
{
#include <libavformat/avformat.h>
#include <libavutil/opt.h>
}
int save_as_ts(unsigned char* h264_data, int h264_size, const char* output_file)
{
AVFormatContext* output_format_ctx = NULL;
AVOutputFormat* output_format = NULL;
AVStream* video_stream = NULL;
AVPacket pkt;
int ret;
av_register_all();
// Register MPEG-TS output format
output_format = av_guess_format("mpegts", NULL, NULL);
if (!output_format) {
return AVERROR_MUXER_NOT_FOUND;
}
// Create output format context
if ((ret = avformat_alloc_output_context2(&output_format_ctx, output_format, NULL, output_file)) < 0) {
return ret;
}
// Add video stream to output format context
video_stream = avformat_new_stream(output_format_ctx, NULL);
if (!video_stream) {
return AVERROR_UNKNOWN;
}
// Set video codec parameters
video_stream->codecpar->codec_type = AVMEDIA_TYPE_VIDEO;
video_stream->codecpar->codec_id = output_format->video_codec;
video_stream->codecpar->width = 1280; // replace with your video width
video_stream->codecpar->height = 720; // replace with your video height
video_stream->codecpar->format = AV_PIX_FMT_YUV420P; // replace with your video pixel format
// Open output file for writing
if ((ret = avio_open(&output_format_ctx->pb, output_file, AVIO_FLAG_WRITE)) < 0) {
return ret;
}
// Write stream headers
if ((ret = avformat_write_header(output_format_ctx, NULL)) < 0) {
return ret;
}
// Write H.264 packets to output file
av_init_packet(&pkt);
pkt.data = h264_data;
pkt.size = h264_size;
pkt.pts = AV_NOPTS_VALUE;
pkt.dts = AV_NOPTS_VALUE;
pkt.duration = 1;
pkt.stream_index = video_stream->index;
if ((ret = av_interleaved_write_frame(output_format_ctx, &pkt)) < 0) {
return ret;
}
// Write stream trailer
av_write_trailer(output_format_ctx);
// Close output file
avio_close(output_format_ctx->pb);
avformat_free_context(output_format_ctx);
return 0;
}
```
此代码使用 FFmpeg 库的 AVFormatContext 结构体创建 MPEG-TS 文件,并使用 avformat_new_stream() 函数创建视频流。然后,使用 avio_open() 函数打开输出文件,使用 avformat_write_header() 函数写入文件头,并使用 av_interleaved_write_frame() 函数将 H.264 包写入文件。最后,使用 av_write_trailer() 函数写入文件尾,并使用 avio_close() 函数关闭输出文件。
您可以在 Visual Studio 中创建一个 C++ 项目,并将 FFmpeg 库和头文件添加到项目中。然后,您可以将此代码添加到您的项目中,并调用 save_as_ts() 函数来保存内存中的 H.264 数据。
阅读全文