范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

FFmpeg中与视频解码相关知识简介

  1、引言
  FFmpeg是一个非常流行的开源跨平台多媒体解决方案。它可以用于编码、解码、转换和流处理各种音频和视频格式。本文将介绍FFmpeg中与视频解码相关的知识。 2、视频解码器
  FFmpeg的视频解码器支持多种视频编码格式,包括H.264、MPEG-4、AVC、VP9等等。 2.1 FFmpeg视频解码器
  FFmpeg视频解码器可以使用avcodec_find_decoder()函数进行查找,例如: AVCodec *codec = avcodec_find_decoder(AV_CODEC_ID_H264); if (!codec) {     fprintf(stderr, "无法找到解码器 ");     return -1; }
  上述代码使用AV_CODEC_ID_H264参数查找H.264解码器。如果找不到指定的解码器,会返回NULL。 2.2 解码视频数据包
  在视频解码过程中,需要读取视频数据流,并将其分解成多个压缩帧,然后将每个压缩帧解码为原始视频帧。可以使用av_read_frame()函数读取视频数据流,例如: AVPacket packet;  while (av_read_frame(pFormatCtx, &packet) >= 0) {      // 如果是视频流     if (packet.stream_index == videoStreamIndex) {          // 发送数据包给解码器         if (avcodec_send_packet(pCodecCtx, &packet) != 0) {             fprintf(stderr, "无法向解码器发送数据包 ");             break;         }          // 解码帧数据         while (avcodec_receive_frame(pCodecCtx, pFrame) == 0) {             // 处理解码后的视频帧             // ...         }     }      av_packet_unref(&packet); }
  上述代码使用av_read_frame()函数读取视频数据流中的每个数据包,然后判断是否为视频流。如果是视频流,则使用avcodec_send_packet()将数据包发送给解码器进行解码,然后使用avcodec_receive_frame()函数接收解码后的视频帧。 2.3 视频帧格式转换
  在解码过程中,可以选择将视频帧解码为不同的格式。可以使用SwsContext结构体和sws_scale()函数将视频帧转换为所需的输出格式。例如: struct SwsContext *pSwsContext = sws_getContext(     pCodecCtx->width, pCodecCtx->height, pCodecCtx->pix_fmt,     output_width, output_height, AV_PIX_FMT_RGB24,     SWS_BILINEAR, NULL, NULL, NULL);  sws_scale(pSwsContext, pFrame->data, pFrame->linesize, 0, pCodecCtx->height, &buffer, NULL);
  上述代码创建了一个转换上下文,并使用sws_scale()函数将源视频帧转换为RGB格式,存储在缓冲区中。 2.4 清理资源
  在完成视频解码后,需要清理使用过的资源,以避免内存泄漏。可以使用av_free()、av_frame_free()、avcodec_close()等函数来释放相应的资源。例如: av_free(buffer); av_frame_free(&pFrame); avcodec_close(pCodecCtx); avformat_close_input(&pFormatCtx);
  以上是一些基本的FFmpeg视频解码器相关知识及代码示例,具体实现可能会因应用场景不同而有所变化。 3、解码音频和视频
  FFmpeg可以同时解码音频和视频。解码音频和视频可以使用不同的函数,例如avcodec_decode_audio4()和avcodec_decode_video2()函数。
  解码音频和视频是FFmpeg的基本功能之一。
  C++音视频学习资料免费获取方法:关注音视频开发T哥  ,点击「链接」即可免费获取2023年最新 C++音视频开发进阶独家免费学习大礼包! 3.1 解码音频
  要解码音频,需要打开音频文件,获取音频流并解码。
  以下是解码音频的代码示例: #include  #include  #include  #include   #include  #include  #include  #include   int main(int argc, char** argv) {     // 打开输入音频文件     AVFormatContext* format_ctx = NULL;     if (avformat_open_input(&format_ctx, "input.mp3", NULL, NULL) != 0) {         fprintf(stderr, "Failed to open input file ");         return -1;     }      // 获取音频流信息     if (avformat_find_stream_info(format_ctx, NULL) < 0) {         fprintf(stderr, "Failed to find stream information ");         avformat_close_input(&format_ctx);         return -1;     }      // 查找第一个音频流     int audio_stream_idx = -1;     for (int i = 0; i < format_ctx->nb_streams; i++) {         if (format_ctx->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) {             audio_stream_idx = i;             break;         }     }     if (audio_stream_idx == -1) {         fprintf(stderr, "No audio stream found ");         avformat_close_input(&format_ctx);         return -1;     }      // 获取音频解码器     AVCodec* codec = avcodec_find_decoder(format_ctx->streams[audio_stream_idx]->codecpar->codec_id);     if (codec == NULL) {         fprintf(stderr, "Unsupported codec ");         avformat_close_input(&format_ctx);         return -1;     }      // 打开音频解码器     AVCodecContext* codec_ctx = avcodec_alloc_context3(codec);     if (avcodec_parameters_to_context(codec_ctx, format_ctx->streams[audio_stream_idx]->codecpar) < 0) {         fprintf(stderr, "Failed to copy codec parameters to decoder context ");         avcodec_free_context(&codec_ctx);         avformat_close_input(&format_ctx);         return -1;     }     if (avcodec_open2(codec_ctx, codec, NULL) < 0) {         fprintf(stderr, "Failed to open codec ");         avcodec_free_context(&codec_ctx);         avformat_close_input(&format_ctx);         return -1;     }      // 初始化音频缓冲区和FIFO     int frame_size = codec_ctx->frame_size;     AVAudioFifo* fifo = av_audio_fifo_alloc(codec_ctx->sample_fmt, codec_ctx->channels, frame_size);     if (fifo == NULL) {         fprintf(stderr, "Failed to allocate audio FIFO ");         avcodec_free_context(&codec_ctx);         avformat_close_input(&format_ctx);         return -1;     }     uint8_t** buffer = NULL;     if (av_samples_alloc_array_and_samples(&buffer, NULL, codec_ctx->channels, frame_size, codec_ctx->sample_fmt, 0) < 0) {         fprintf(stderr, "Failed to allocate audio buffer ");         av_audio_fifo_free(fifo);         avcodec_free_context(&codec_ctx);         avformat_close_input(&format_ctx);         return -1;     }      // 解码音频流     AVPacket packet;     av_init_packet(&packet);     while (av_read_frame(format_ctx, &packet) == 0) {         if (packet.stream_index == audio_stream_idx) {             int ret = avcodec_send_packet(codec_ctx, &packet);             if (ret < 0) {                 fprintf(stderr, "Error sending a packet for decoding ");                 break;             }             while (ret >= 0) {                 AVFrame* frame = av_frame_alloc();                 ret = avcodec_receive_frame(codec_ctx, frame);                 if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {                     av_frame_free(&frame);                     break;                 } else if (ret < 0) {                     fprintf(stderr, "Error during decoding ");                     av_frame_free(&frame);                     break;                 }                 int samples = av_samples_get_buffer_size(NULL, codec_ctx->channels, frame->nb_samples, codec_ctx->sample_fmt, 0);                 if (samples <= 0) {                     av_frame_free(&frame);                     continue;                 }                 memcpy(buffer[0], frame->data[0], samples);                 if (codec_ctx->channels > 1) {                     memcpy(buffer[1], frame->data[1], samples / 2);                 }                 av_audio_fifo_write(fifo, (void**)buffer, frame->nb_samples);                 av_frame_free(&frame);             }         }         av_packet_unref(&packet);     }     av_packet_unref(&packet);      // 关闭音频解码器和输入文件,释放缓冲区和FIFO     avcodec_free_context(&codec_ctx);     avformat_close_input(&format_ctx);     av_freep(&buffer[0]);     av_freep(&buffer);     av_audio_fifo_free(fifo);      return 0; }3.2 解码视频
  要解码视频,需要打开视频文件,获取视频流并解码。以下是解码视频的代码示例: #include  #include  #include  #include   #include  #include  #include   int main(int argc, char** argv) {     // 打开输入视频文件     AVFormatContext* format_ctx = NULL;     if (avformat_open_input(&format_ctx, "input.mp4", NULL, NULL) != 0) {         fprintf(stderr, "Failed to open input file ");         return -1;     }      // 获取视频流信息     if (avformat_find_stream_info(format_ctx, NULL) < 0) {         fprintf(stderr, "Failed to find stream information ");         avformat_close_input(&format_ctx);         return -1;     }      // 查找第一个视频流     int video_stream_idx = -1;     for (int i = 0; i < format_ctx->nb_streams; i++) {         if (format_ctx->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {             video_stream_idx = i;             break;         }     }     if (video_stream_idx == -1) {         fprintf(stderr, "No video stream found ");         avformat_close_input(&format_ctx);         return -1;     }      // 获取视频解码器     AVCodec* codec = avcodec_find_decoder(format_ctx->streams[video_stream_idx]->codecpar->codec_id);     if (codec == NULL) {         fprintf(stderr, "Unsupported codec ");         avformat_close_input(&format_ctx);         return -1;     }      // 打开视频解码器     AVCodecContext* codec_ctx = avcodec_alloc_context3(codec);     if (avcodec_parameters_to_context(codec_ctx, format_ctx->streams[video_stream_idx]->codecpar) < 0) {         fprintf(stderr, "Failed to copy codec parameters to decoder context ");         avcodec_free_context(&codec_ctx);         avformat_close_input(&format_ctx);         return -1;     }     if (avcodec_open2(codec_ctx, codec, NULL) < 0) {         fprintf(stderr, "Failed to open codec ");         avcodec_free_context(&codec_ctx);         avformat_close_input(&format_ctx);         return -1;     }      // 初始化视频缓冲区和转换器     AVFrame* frame = av_frame_alloc();     AVFrame* rgb_frame = av_frame_alloc();     uint8_t* buffer = NULL;     int num_bytes = av_image_get_buffer_size(AV_PIX_FMT_RGB24, codec_ctx->width, codec_ctx->height, 1);     if (num_bytes <= 0) {         fprintf(stderr, "Failed to get image buffer size ");         av_frame_free(&rgb_frame);         av_frame_free(&frame);         avcodec_free_context(&codec_ctx);         avformat_close_input(&format_ctx);         return -1;     }     buffer = (uint8_t*)av_malloc(num_bytes * sizeof(uint8_t));     if (buffer == NULL) {         fprintf(stderr, "Failed to allocate image buffer ");         av_frame_free(&rgb_frame);         av_frame_free(&frame);         avcodec_free_context(&codec_ctx);         avformat_close_input(&format_ctx);         return -1;     }     av_image_fill_arrays(rgb_frame->data, rgb_frame->linesize, buffer, AV_PIX_FMT_RGB24, codec_ctx->width, codec_ctx->height, 1);     struct SwsContext* sws_ctx = sws_getContext(codec_ctx->width, codec_ctx->height, codec_ctx->pix_fmt, codec_ctx->width, codec_ctx->height, AV_PIX_FMT_RGB24, SWS_BILINEAR, NULL, NULL, NULL);     if (sws_ctx == NULL) {         fprintf(stderr, "Failed to initialize color conversion context ");         av_freep(&buffer);         av_frame_free(&rgb_frame);         av_frame_free(&frame);         avcodec_free_context(&codec_ctx);         avformat_close_input(&format_ctx);         return -1;     }      // 解码视频流     AVPacket packet;     av_init_packet(&packet);     while (av_read_frame(format_ctx, &packet) == 0) {         if (packet.stream_index == video_stream_idx) {             int ret = avcodec_send_packet(codec_ctx, &packet);             if (ret < 0) {                 fprintf(stderr, "Error sending a packet for decoding ");                 break;             }             while (ret >= 0) {                 ret = avcodec_receive_frame(codec_ctx, frame);                 if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {                     break;                 } else if (ret < 0) {                     fprintf(stderr, "Error during decoding ");                     break;                 }                 sws_scale(sws_ctx, frame->data, frame->linesize, 0, codec_ctx->height, rgb_frame->data, rgb_frame->linesize);                 // 在此处可以将RGB图像显示或保存到文件中             }         }         av_packet_unref(&packet);     }     av_packet_unref(&packet);      // 关闭视频解码器和输入文件,释放缓冲区和转换器     sws_freeContext(sws_ctx);     av_freep(&buffer);     av_frame_free(&rgb_frame);     av_frame_free(&frame);     avcodec_free_context(&codec_ctx);     avformat_close_input(&format_ctx);      return 0; }
  上述代码示例展示了如何使用FFmpeg解码音频和视频。在实际应用中,还需要根据具体的需求对解码后的音频和视频进行处理、保存或播放等操作。 4、帧率控制
  帧率(Frame Rate)是指每秒钟播放的画面数,通常用FPS(Frames Per Second)表示。视频的质量和流畅度与帧率有很大关系,一般来说,帧率越高,视频就越流畅,但同时会占用更多的储存空间和计算资源。
  以下是一些常见的帧率控制方法: 4.1 -r选项
  这是最简单的帧率控制方法,使用该选项可以指定输出视频流的帧率。
  例如,下面的命令将输入视频的帧率设置为25fps,并将其写入输出文件output.mp4中: ffmpeg -i input.mp4 -r 25 output.mp44.2 setpts过滤器
  使用 setpts  过滤器可以调整视频帧之间的时间间隔。
  例如,下面的命令将视频的帧率提高到60fps,并将其输出到output.mp4中: ffmpeg -i input.mp4 -filter:v "setpts=0.5*PTS" -r 60 output.mp4
  这里通过将每个视频帧的显示时间减半来增加视频帧率。 4.3 fps过滤器
  使用 fps  过滤器可以从视频流中提取特定的帧,并按照指定的速率生成新的视频流。
  例如,下面的命令将原始视频转换为10fps的gif图像: ffmpeg -i input.mp4 -vf fps=10 output.gif4.4 select和setpts过滤器的组合
  使用 select  和 setpts  过滤器的组合可以将视频帧按照指定的时间间隔截取成图片,并保持在相同的帧率下。
  例如,下面的命令将输入视频每10秒钟截取一张图像,并将其保存为output_%03d.jpg: ffmpeg -i input.mp4 -vf "select=not(mod(n,300)),setpts=N/FRAME_RATE/TB" output_%03d.jpg
  这里 mod(n,300)  表示只选择每300个帧中的一个帧, setpts=N/FRAME_RATE/TB  则是根据帧率重新计算每个帧的显示时间。
  总的来说,FFmpeg提供了丰富的帧率控制功能,可以根据不同场景灵活使用,从而达到更精细的视频处理效果。 4.5 实现帧率控制
  在FFmpeg中,我们通过调整输入视频的PTS(Presentation Time Stamp,展示时间戳)和DTS(Decoding Time Stamp,解码时间戳)来实现帧率控制,例如: 4.5.1 指定输出视频的帧率
  使用FPS过滤器可以让你指定输出视频的帧率,比如: ffmpeg -i input.mp4 -c:v libx264 -filter:v fps=30 output.mp4
  此命令将input.mp4转换为H.264编码格式,并将输出视频帧率设置为30。 4.5.2 修改输入视频的帧率
  如果原始视频的帧率过高或过低,需要对其进行修改以适合当前场景。使用setpts过滤器可以修改输入视频的PTS,从而改变帧率,比如: # 将25fps的视频转换为30fps ffmpeg -i input.mp4 -filter:v "setpts=1.25*PTS" output.mp4  # 将60fps的视频转换为30fps ffmpeg -i input.mp4 -filter:v "setpts=2.0*PTS" output.mp4
  此命令将input.mp4中的每一帧展示时间戳加倍或减半,从而达到修改帧率的目的。
  需要注意的是,修改帧率可能会导致视频画面变形或失真,因此必须谨慎使用。 5、解码器输出格式
  在FFmpeg中,解码器是将音视频数据从压缩格式解码成原始格式的组件之一。
  FFmpeg解码器输出格式与输入格式相关,不同的输入格式对应着不同的解码器,不同的解码器输出格式也略有不同。一般来说,FFmpeg解码器可以输出以下几种常用的视频和音频格式: 5.1 视频格式5.1.1 YUV格式
  YUV是一种色彩空间,也是一种常见的视频格式。YUV图像由亮度(Y)和色度(U、V)三个分量构成。其中,Y表示亮度,U、V表示色度。在视频编码和处理过程中,经常使用YUV420P、YUV422P和YUV444P等子格式。
  将视频转换为YUV格式可以使用如下命令: ffmpeg -i input.mp4 -pix_fmt yuv420p output.yuv
  此命令将input.mp4文件转换为YUV420P格式,并保存到output.yuv文件中。 5.1.2 RGB格式
  RGB是一种常见的颜色空间,也是一种常见的视频格式。RGB图像由红、绿、蓝三个基本色光组成。在视频处理过程中,经常使用RGB24、RGBA等子格式。
  将视频转换为RGB格式可以使用如下命令: ffmpeg -i input.mp4 -pix_fmt rgb24 output.rgb
  此命令将input.mp4文件转换为RGB24格式,并保存到output.rgb文件中。 5.1.3 H.264/H.265格式
  H.264/H.265是一种常见的视频压缩格式,可在保证高清晰度的同时,大幅降低视频文件大小。在FFmpeg中,可以通过指定编码器和参数来将视频编码为H.264/H.265格式。
  将视频转换为H.264格式可以使用如下命令: ffmpeg -i input.mp4 -c:v libx264 output.mp4
  此命令将input.mp4文件转换为H.264编码格式,并保存到output.mp4文件中。
  将视频转换为H.265格式可以使用如下命令: ffmpeg -i input.mp4 -c:v libx265 output.mp4
  此命令将input.mp4文件转换为H.265编码格式,并保存到output.mp4文件中。
  需要注意的是,不同的视频格式对应着不同的输出质量、文件大小和解码速度等特点,使用时需要根据实际需求进行选择和调整。 5.2 音频格式5.2.1 PCM格式
  PCM是一种无损压缩格式,音质非常好,但文件大小较大。在FFmpeg中,可以将音频文件转换为PCM格式,也可以从PCM格式转换为其他格式。
  将音频转换为PCM格式可以使用如下命令: ffmpeg -i input.mp3 -acodec pcm_s16le output.wav
  此命令将input.mp3文件转换为PCM格式,并保存到output.wav文件中。
  将PCM格式转换为其他格式可以使用如下命令: ffmpeg -f s16le -ar 44100 -ac 2 -i input.pcm -acodec libmp3lame output.mp3
  此命令将input.pcm文件转换为MP3格式,并保存到output.mp3文件中。 5.2.2 MP3格式
  MP3是一种有损压缩格式,可有效减少音频文件大小,但会损失一定的音质。在FFmpeg中,可以将音频文件转换为MP3格式,也可以从MP3格式转换为其他格式。
  将音频转换为MP3格式可以使用如下命令: ffmpeg -i input.wav -acodec libmp3lame -ab 128k output.mp3
  此命令将input.wav文件转换为MP3格式,并保存到output.mp3文件中。
  将MP3格式转换为其他格式可以使用如下命令: ffmpeg -i input.mp3 -acodec pcm_s16le output.wav
  此命令将input.mp3文件转换为PCM格式,并保存到output.wav文件中。 5.2.3 AAC格式
  AAC是一种常见的有损压缩音频格式,相比MP3更先进,可以达到更高的音质压缩比。在FFmpeg中,可以将音频文件转换为AAC格式,也可以从AAC格式转换为其他格式。
  将音频转换为AAC格式可以使用如下命令: ffmpeg -i input.wav -c:a libfdk_aac -b:a 128k output.aac
  此命令将input.wav文件转换为AAC格式,并保存到output.aac文件中。
  将AAC格式转换为其他格式可以使用如下命令: ffmpeg -i input.m4a -acodec pcm_s16le output.wav
  此命令将input.m4a文件转换为PCM格式,并保存到output.wav文件中。
  需要注意的是,不同的音频格式对应着不同的输出质量、文件大小和解码速度等特点,使用时需要根据实际需求进行选择和调整。 6、视频编码格式
  在FFmpeg中,视频编码器是将原始视频数据(如YUV或RGB)压缩成各种视频编码格式的组件之一。下面介绍一些常用的视频编码格式。 6.1 H.264/AVC
  H.264是一种广泛应用的视频压缩标准,也被称为AVC(Advanced Video Coding)。它是一种有损压缩技术,可以在保持高质量的情况下大幅度减小视频文件的大小。H.264在互联网视频传输和储存方面使用广泛,适用于HTML5等多种平台。同时,H.264还支持一个可扩展框架,即SVC(Scalable Video Coding),可以根据网络带宽自动调整视频的清晰度,以提供最佳的观看体验。
  在FFmpeg中,使用 libx264  编码器可以将原始视频数据编码为H.264格式的视频,例如: ffmpeg -i input.mp4 -c:v libx264 -preset veryslow -crf 18 output.mp4
  这里指定了输出文件为H.264格式,并使用了 -c:v libx264  选项以选择 libx264  编码器。另外, -preset veryslow  表示使用最慢的编码速度来达到更好的视频质量, -crf 18  则是指定视频质量(数值越小代表质量越高)。 6.2 H.265/HEVC
  HEVC(High Efficiency Video Coding)也被称为H.265,是一种新的视频压缩标准,与H.264相比,H.265具有更高的压缩效率和更低的比特率,可以处理更高分辨率和更复杂的视频内容。由于H.265需要更强的计算能力进行编解码,因此需要更高的硬件要求。
  在FFmpeg中,使用 libx265  编码器可以将原始视频数据编码为HEVC/H.265格式的视频,例如: ffmpeg -i input.mp4 -c:v libx265 -preset veryslow -crf 18 output.mp4
  这里与H.264例子类似,只是使用了 -c:v libx265  选项以选择 libx265  编码器。 6.3 VP9
  VP9是一种由Google开发的新型视频压缩标准。VP9压缩技术在保证高质量的情况下可以将视频文件大小压缩到原来的一半或更少。VP9主要用于WebM格式视频中,适用于各种平台。
  在FFmpeg中,使用 libvpx-vp9  编码器可以将原始视频数据编码为VP9格式的视频,例如: ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 32 -b:v 0 output.webm
  这里指定了输出文件为VP9格式,并使用了 -c:v libvpx-vp9  选项以选择 libvpx-vp9  编码器。另外, -crf 32  表示视频质量(数值越大代表质量越低), -b:v 0  则是指定比特率为0,使其自动适应目标质量。 6.4 AV1
  AV1是一种由Alliance for Open Media(AOMedia)联盟开发的新型视频压缩标准。与H.265和VP9相比,AV1具有更高的压缩效率和更低的比特率,并且是完全开源的。AV1在逐渐得到广泛的应用,例如在YouTube、Netflix等大型视频网站上已经开始使用了AV1进行视频编码。 7、总结
  总之,FFmpeg是一个非常强大的多媒体解决方案,可以用来处理各种音频和视频格式。在视频解码过程中,需要了解视频解码器、帧率控制、解码器输出格式、视频编码格式等相关知识,才能正确地解码视频数据。

据说开过沃尔沃XC60去旅行,才明白生活的真谛电影小时代中,宫洺在连棵树都不能随便移动的市中心,盖了一座玻璃房子。它的取景地由原手表五厂的旧厂房改建而成,正是世界级建筑大师隈研吾操刀设计的上海Z58。还有上海人经常打卡的船厂1去新疆,来一次摆烂式旅行!(原创)最近网络上有一个新名词摆烂式旅行,咋一看有点莫名其妙,这是做哪样?仔细阅读了几篇摆烂式旅行的游记和攻略,这才恍然大悟。它的基本含义是不一定要去那些知名热门景点,或者去追赶所谓的最佳衡阳县文旅行业各场馆(所)25日起恢复开放关于恢复全县文旅行业各场馆(所)开放经营的通知全县各公共文化场馆景区景点文旅行业经营场馆(所)经综合研判并报请县疫情防控指挥部同意,从2022年10月25日起,恢复开放全县文旅广体广西天等霜降时节田园美夕阳下的都康田园。人民网记者吴明江摄人民网天等10月25日电(记者吴明江)时值霜降,在广西崇左市天等县都康田园,进入成熟期连片的晚稻田已经染上了金色,在夕阳下与周边的民居相互映衬,秋天唯美短句,最适合发朋友圈头条创作挑战赛1。人间朝暮,叶落惊秋。2。以前从来不觉得四季如此分明,直到你说,最喜欢的季节是秋天,立秋之后的每一天,我都是满心欢喜。3。秋天了,该去追求有意义的人和事了。4这个秋内心安静,是秋天最好的景致缤纷的时光,斑斓在深秋的风景里,隔着岁月的烟沙,清明着生命的觉悟,厚重着生命的意义,记载着生活的烟火平凡,规整着生活的有常与无常。当温暖与寒凉并行在季节的迭新里时,无论光阴邂逅的是秋天的梦还在啊秋天的歌还在啊秋天的梦还在啊秋天的歌还在啊我在这晚秋啊是如此心动但我却在默默地眷恋着这一季因为你这一季秋天的梦是金色的这一季秋天的梦是粉色的这一季秋天的梦是白色的这一季秋天的梦是红色的这一季秋天这个秋天回了趟徽州这个秋天回了趟徽州作者小草英子疫情已三年了,外出的频率也降至最低。出门多半是在合肥周边,或看看巢湖水,或走走湿地公园,或登上附近的小山坡。终于在金秋之际回了趟徽州。在徽州的秋色里,当代散文新疆的秋天文杨建军有人说秋天是一首歌秋天是一幅画秋天是一首诗可我觉得,秋天就是每个人心底个故事,人生的点滴成长都会在秋天收获。秋天是铺满大地的辣椒,红红火火,秋天是洁白如雪的棉花,蓬松温暖,16位上海退休阿姨包下剧组翻拍甄嬛传!演皇上的竟是他!人均花费不到4千年轻时,谁还没有一个明星梦呢?梦想还是要有的,因为总有实现的那一天!近日上海16位退休阿姨租下大巴,还包了一个剧组!盛装赶赴浙江金华横店影视城翻拍微电影甄嬛传圆了明星梦!网友纷纷点山东男篮25日晚战上海,双林争霸成最大看点记者冯子涵擒住飞虎后,山东男篮紧接着又要捕鲨。10月25日1935,CBA常规赛第七轮,山东男篮将迎来与上海队的比赛,球队势必要乘胜追击,争取连胜。休赛期互换东家的可兰白克和丁彦雨A股明天上演绝地反击今天的大盘再次让大家失望了一把,我们原本以为昨天的大跌能够让今天有像样的反弹,但是上午临近中午收盘确实有比较大的反弹,一度三大指数全面翻红,这不像是普通机构能够做到的,但是下午大盘港股为何大跌港股连续大跌,已经破了15000点,昨天开始出现恐慌性情绪。很多人不仅要问为什么,也喜欢从已然发生的事情上寻找原因。我们可以观察,伴随昨天港股大跌,人民币黄金期货与美元计价期货走势行空时评离岸人民币汇率一度跌破7。3,美元升值割了谁的韭菜?行空时评,空哥带你看颜色不一样的烟火。昨天离岸人民币汇率跌破7。3,最低跌至7。33,市场一片惊呼,截至10月24日,在岸人民币兑美元汇率报收7。26,创十几年来新低,不少媒体都已把生活过成极简模式,那才是真正的高手有人说,人这辈子活得自由自在,才是最幸福的人。让人最欣羡的感情莫过于七八十岁的时候,身边还有年轻人认识你。那么多么的难得呀?现在还有多少老年人走在大马路上,有人上前来招呼一声,某某爱在人间你认为人世间什么最珍贵人世间最珍贵的是爱。春天最爱鲜花,那一朵朵鲜艳的迎春花带给人们春天的希望。夏天最爱荷叶,那一个个象伞一样的绿圆盘随风飘舞带给人们清凉。秋天最爱果实,田野里山顶贵州茅台怎么了?股价狂跌失守1499元大关,终端售价也下滑白酒板块股价下跌10月24日,贵州茅台(600519。SH)股价跌幅7。56,总市值失守2万亿大关,整个A股白酒板块均遭遇重挫,白酒概念板块跌幅3。7410月25日,贵州茅台最新股忻州隐形富豪张云升发家史国企改制成大股东,持股价值5。5亿山西省忻州市河曲县文笔镇,位于山西陕西内蒙三省交界处。这三个省份,是全国煤铝铁矿资源贮量和可开采量最丰富的区域,也是工业炸药需求量位居前列的三个省。在这个小小的文笔镇,有一家上市公日赚近1亿!养猪一哥牧原股份业绩大逆转,单季净利暴增1097。41连续四个季度亏损的牧原股份,终于打了个翻身仗。10月24日晚间,牧原股份披露2022年三季报,公司第三季度实现营业收入365。06亿元,同比增长147。60,实现归母净利润81。9天来大酒店二次拍卖,天来系富豪落幕,还连累一家上市公司11月8日,重庆天来大酒店将迎来第二次拍卖。京东拍卖显示,由重庆第五中级人民法院作为监督单位,天来酒店有限公司破产财产(包括房屋建筑物机器设备办公设备电子设备等固定资产,以及无形资复星高科提前终止减持复星医药,称一年内不减持,此前已套现复星医药控股股东复星高科,提前终止了减持计划。10月24日晚间,复星医药发布公告,表示控股股东复星高科经过综合考虑后,决定提前终止减持复星医药的计划,同时承诺一年内(至2023年1阿里跌破发行价,腾讯市值蒸发4万亿,但段永平为何不抄底阿里?在又一轮暴跌之后,腾讯股价跌到200元附近,阿里也是跌破了发行价格。两家公司冲击万亿美元市值失败之后,如今都是双双蒸发了几万亿。可是奇怪的就是段永平为何只抄底腾讯,不抄底阿里呢?段
比较胖的男生穿什么衣服好看有人说,胖子穿什么都不好看,这种观念是错误的。虽然胖子从体态上看,显得有些许的臃肿与富态,但是只要选择合适的衣服,就能够展示出不同的效果。下面就和小编一起来看看胖子穿什么衣服好看,新一代洛神EM2R,调音工艺提升颜值惊艳,还有妹子最爱的樱花粉近期收到了几款耳塞,其中也包括一些新品牌。这些新品给我的感觉不再死磕音质,也慢慢开始在外观设计上下功夫。我一直觉得,作为一款优秀的耳塞,不仅要有出色的调音,外观也同样重要。能把这两红米K50SUltra惊艳颜值亮相,红米K40价崩残忍让路,惊喜不断7月18日,根据相关消息,红米还将在今年下半年发布一款超级杯产品,预计为红米K50S系列,包括红米K50SUltra。作为小米12SUltra的直接竞争对手,该机的硬件配置不亚于小法源寺的丁香,惊艳了北京的四月草长莺飞,丝绦拂堤四月确是人间最美的模样。繁花深处,法源寺的丁香正悄悄惊艳一场春光。作为元明清三朝古都,北京市内和郊外的寺庙众多,法源寺算是其中最为古老的佛寺之一。寺始建于唐贞观十谷爱凌又双得奖了,身着白色鱼尾礼服,优雅凸显谷爱凌又双叒叕得奖了!身着白色鱼尾礼服,优雅凸显近日,20212022影响世界华人盛典,谷爱凌得奖了,冬奥会为国夺金后,她,再次红了7月15日,谷爱凌参加晚宴的造型图曝光。照片中,WWE在斯蒂芬妮带领下创新里程碑,大公主真要复兴恶劣态度时期?斯蒂芬妮麦克曼今天在社交媒体上宣布,WWE达到了一个新的里程碑。斯蒂芬妮麦克曼最近被任命为临时首席执行官和主席的职位后,她的父亲,文斯麦克曼暂时辞去职位,因为WWE董事会调查他与前目前拍照最好看的4款手机,影像实力可胜任单反,拍照党必备您在阅读前请点击上面的关注二字,后续会第一时间为您提供更多有价值的相关内容,感谢您的支持。由于手机携带方便,所以很多人喜欢使用手机拍照,最近几年手机在影像方面的发展非常迅速,手机的50岁的吴越,离开陈建斌17年之后,坚持嫁给自己,父亲是最大依靠我的前半生热播时,沉寂多年的吴越,因为将老小三凌玲的角色,遭受了不少骂名。因为角色演绎得太过成功,观众入戏太深,她的微博下出现不少恶评,纷纷将剧中对凌玲小三行为的厌恶,化作利刃刺向TVB视帝评选24年,再看15位视帝,有人实至名归,有人成水帝1997年是香港翻天覆地的一年。这一年,香港回到了祖国母亲的怀抱,一家人终于团聚。这一年,TVB也推出了万千星辉颁奖典礼,开始每年评选视帝和视后。虽然姗姗来迟,可是好饭不怕晚,迅速赌王女儿机场被男友新娘式牵手超腻歪,打扮清凉,窦骁偶像包袱重这个季节穿衣肯定是首选露肤型的,一来这类款式可以提供很好的穿衣舒适度,其次就是利用小面积的露肤,可以让整个造型更加的吸睛亮眼,尤其是对于女性来说,每每到了夏季,穿衣都是挑选露脐装,幸福到万家人物太鲜活了从来没有追一部戏追得那么紧过,这部剧真太可了。女主何幸福人设没得说,哼哧哼哧的不是在讨说法就是在讨说法的路上,温柔坚定又有力量。唯独四十万土地补偿款中三十五万给小叔买房,她眉头都不