C ++에서 FFmpeg로 원시 파일을 오디오 파일 (.wav)로 변환하려면 어떻게해야합니까?

모하마드 레자 카시

내 C ++ 응용 프로그램에서 다른 샘플 속도로 mp4 형식을 wav 형식으로 변환하고 싶습니다. 우선 C ++에서 ffmpeg로 mp4 파일에서 오디오를 추출한 다음 원시 파일로 변환했지만 원시 파일을 다른 샘플 속도로 wav 파일로 변환하는 방법을 모릅니다. 어떻게 해결할 수 있습니까?

 #include "ffmpeg.h"
    int decode_packet(int *got_frame, int cached)
    {
        int ret = 0;
        int decoded = pkt.size;
        *got_frame = 0;
        if (pkt.stream_index == video_stream_idx) {
            /* decode video frame */
            ret = avcodec_decode_video2(video_dec_ctx, frame, got_frame, &pkt);
            if (ret < 0) {
    //            fprintf(stderr, "Error decoding video frame (%s)\n", av_err2str(ret));
                return ret;
            }
            if (*got_frame) {
                if (frame->width != width || frame->height != height ||
                    frame->format != pix_fmt) {
                    /* To handle this change, one could call av_image_alloc again and
                     * decode the following frames into another rawvideo file. */
    //                fprintf(stderr, "Error: Width, height and pixel format have to be "
    //                        "constant in a rawvideo file, but the width, height or "
    //                        "pixel format of the input video changed:\n"
    //                        "old: width = %d, height = %d, format = %s\n"
    //                        "new: width = %d, height = %d, format = %s\n",
    //                        width, height, av_get_pix_fmt_name(pix_fmt),
    //                        frame->width, frame->height,
    //                        av_get_pix_fmt_name(frame->format));
                    return -1;
                }
                printf("video_frame%s n:%d coded_n:%d\n",
                       cached ? "(cached)" : "",
                       video_frame_count++, frame->coded_picture_number);
                /* copy decoded frame to destination buffer:
                 * this is required since rawvideo expects non aligned data */
                av_image_copy(video_dst_data, video_dst_linesize,
                              (const uint8_t **)(frame->data), frame->linesize,
                              pix_fmt, width, height);
                /* write to rawvideo file */
                fwrite(video_dst_data[0], 1, video_dst_bufsize, video_dst_file);
            }
        } else if (pkt.stream_index == audio_stream_idx) {
            /* decode audio frame */
            ret = avcodec_decode_audio4(audio_dec_ctx, frame, got_frame, &pkt);
            if (ret < 0) {
    //            fprintf(stderr, "Error decoding audio frame (%s)\n", av_err2str(ret));
                return ret;
            }
            /* Some audio decoders decode only part of the packet, and have to be
             * called again with the remainder of the packet data.
             * Sample: fate-suite/lossless-audio/luckynight-partial.shn
             * Also, some decoders might over-read the packet. */
            decoded = FFMIN(ret, pkt.size);
            if (*got_frame) {
                size_t unpadded_linesize = frame->nb_samples * av_get_bytes_per_sample((AVSampleFormat)frame->format);
    //            printf("audio_frame%s n:%d nb_samples:%d pts:%s\n",
    //                   cached ? "(cached)" : "",
    //                   audio_frame_count++, frame->nb_samples,
    //                   av_ts2timestr(frame->pts, &audio_dec_ctx->time_base));
                /* Write the raw audio data samples of the first plane. This works
                 * fine for packed formats (e.g. AV_SAMPLE_FMT_S16). However,
                 * most audio decoders output planar audio, which uses a separate
                 * plane of audio samples for each channel (e.g. AV_SAMPLE_FMT_S16P).
                 * In other words, this code will write only the first audio channel
                 * in these cases.
                 * You should use libswresample or libavfilter to convert the frame
                 * to packed data. */
    //            fwrite(frame->extended_data[0], 1, unpadded_linesize, audio_dst_file);
                //encode function
                encode(cOut, frame, &pktout, audio_dst_file);


    //            av_init_packet(&pktout);
    //            pktout.data = NULL; // packet data will be allocated by the encoder
    //            pktout.size = 0;
    //            /* encode the samples */
    //            ret = avcodec_encode_audio2(cOut, &pktout, frame, &got_outputOut);
    //            if (ret < 0) {
    //                fprintf(stderr, "Error encoding audio frame\n");
    //                exit(1);
    //            }
    //            if (got_outputOut) {
    //                fwrite(pktout.data, 1, pktout.size, audio_dst_file);
    //                av_free_packet(&pktout);
    //            }

            }
        }
        /* If we use frame reference counting, we own the data and need
         * to de-reference it when we don't use it anymore */
        if (*got_frame && refcount)
            av_frame_unref(frame);
        return decoded;
    }
BrianChen

먼저 Libswresample사용 하여 오디오 데이터를 리샘플링 해야합니다 .

그런 다음 wav 형식으로 오디오 원시 데이터를 저장할 수 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

오디오 파일을 폴더에서 여러 오디오 WAV 파일로 분할하려면 어떻게해야합니까?

분류에서Dev

wav 파일에서 원시 오디오를 얻으려면 어떻게해야합니까?

분류에서Dev

mpg123을 사용하여 .mov 비디오에서 .wav 파일로 오디오를 추출하려면 어떻게해야합니까?

분류에서Dev

ESQL / C 파일을 C 파일로 간단히 변환하려면 어떻게해야합니까? (임베디드-SQL / C 파일을 C 파일로)?

분류에서Dev

python으로 .wav에서 오디오의 원시 데이터 파일을 어떻게 변환 할 수 있습니까?

분류에서Dev

Deno fetch API를 사용하여 파일을 서버에 게시하거나 파일을 RedableStream으로 변환하려면 어떻게해야합니까?

분류에서Dev

+ 오버로드가 다른 파일 C ++에서 인식되도록하려면 어떻게해야합니까?

분류에서Dev

Android에서 pcap 파일을 txt 파일로 변환하려면 어떻게해야합니까?

분류에서Dev

Windows 7에서 디렉토리 안팎으로 파일을 교환하려면 어떻게해야합니까?

분류에서Dev

Xubuntu 13.04에서 .jar 파일을 실행 파일로 표시하려면 어떻게해야합니까?

분류에서Dev

Xubuntu 13.04에서 .jar 파일을 실행 파일로 표시하려면 어떻게해야합니까?

분류에서Dev

업로드 된 파일을 즉시 변환하고 세일 내에서 Amazon S3로 직접 스트리밍하려면 어떻게해야합니까?

분류에서Dev

GitHub에서 원시 텍스트 파일을 영구적으로 보려면 어떻게해야합니까?

분류에서Dev

ffmpeg javascript를 사용하여 wav 오디오 파일에서 pcm 오디오 파일로 변환

분류에서Dev

두 개의 오디오 트랙을 AVI 파일로 병합하려면 어떻게해야합니까?

분류에서Dev

gpg로 요청 게시물에서 파일을 암호화하려면 어떻게해야합니까?

분류에서Dev

Ubuntu C / C ++에서 현재 IANA 시간대 이름을 UTC 오프셋으로 변환하려면 어떻게해야합니까?

분류에서Dev

알파벳 색인을 C의 Ascii 코드로 다시 변환하려면 어떻게해야합니까?

분류에서Dev

three.js 편집기에서 시작시 CTM 파일을로드하려면 어떻게해야합니까?

분류에서Dev

C #에서 잠긴 파일을 강제로 삭제하려면 어떻게해야합니까?

분류에서Dev

s3를 저장소로 사용하여 django에서 미디어 파일을 자동으로 표시하려면 어떻게해야합니까?

분류에서Dev

디렉토리에서 모든 파일을 크기별로 정렬하려면 어떻게해야합니까?

분류에서Dev

Django에서 임시 파일을 다운로드하려면 어떻게해야합니까?

분류에서Dev

ffmpeg 오디오 변환 m4a에서 wav로-파일 크기 부풀림

분류에서Dev

오디오의 특정 부분에 대해서만 ffmpeg로 파형 이미지를 생성하려면 어떻게해야합니까?

분류에서Dev

Postman에서 파일을 업로드하려면 어떻게해야합니까?

분류에서Dev

C #에서 SaveFileDialog를 사용하여 바이트 배열을 디스크에 png 파일로 저장하려면 어떻게해야합니까?

분류에서Dev

ODT 파일을 PDF로 변환하려면 어떻게해야합니까?

분류에서Dev

종속성을 명시 적으로 요구하지 않고 Rspec에서 순서 종속 지원 파일을로드하려면 어떻게해야합니까?

Related 관련 기사

  1. 1

    오디오 파일을 폴더에서 여러 오디오 WAV 파일로 분할하려면 어떻게해야합니까?

  2. 2

    wav 파일에서 원시 오디오를 얻으려면 어떻게해야합니까?

  3. 3

    mpg123을 사용하여 .mov 비디오에서 .wav 파일로 오디오를 추출하려면 어떻게해야합니까?

  4. 4

    ESQL / C 파일을 C 파일로 간단히 변환하려면 어떻게해야합니까? (임베디드-SQL / C 파일을 C 파일로)?

  5. 5

    python으로 .wav에서 오디오의 원시 데이터 파일을 어떻게 변환 할 수 있습니까?

  6. 6

    Deno fetch API를 사용하여 파일을 서버에 게시하거나 파일을 RedableStream으로 변환하려면 어떻게해야합니까?

  7. 7

    + 오버로드가 다른 파일 C ++에서 인식되도록하려면 어떻게해야합니까?

  8. 8

    Android에서 pcap 파일을 txt 파일로 변환하려면 어떻게해야합니까?

  9. 9

    Windows 7에서 디렉토리 안팎으로 파일을 교환하려면 어떻게해야합니까?

  10. 10

    Xubuntu 13.04에서 .jar 파일을 실행 파일로 표시하려면 어떻게해야합니까?

  11. 11

    Xubuntu 13.04에서 .jar 파일을 실행 파일로 표시하려면 어떻게해야합니까?

  12. 12

    업로드 된 파일을 즉시 변환하고 세일 내에서 Amazon S3로 직접 스트리밍하려면 어떻게해야합니까?

  13. 13

    GitHub에서 원시 텍스트 파일을 영구적으로 보려면 어떻게해야합니까?

  14. 14

    ffmpeg javascript를 사용하여 wav 오디오 파일에서 pcm 오디오 파일로 변환

  15. 15

    두 개의 오디오 트랙을 AVI 파일로 병합하려면 어떻게해야합니까?

  16. 16

    gpg로 요청 게시물에서 파일을 암호화하려면 어떻게해야합니까?

  17. 17

    Ubuntu C / C ++에서 현재 IANA 시간대 이름을 UTC 오프셋으로 변환하려면 어떻게해야합니까?

  18. 18

    알파벳 색인을 C의 Ascii 코드로 다시 변환하려면 어떻게해야합니까?

  19. 19

    three.js 편집기에서 시작시 CTM 파일을로드하려면 어떻게해야합니까?

  20. 20

    C #에서 잠긴 파일을 강제로 삭제하려면 어떻게해야합니까?

  21. 21

    s3를 저장소로 사용하여 django에서 미디어 파일을 자동으로 표시하려면 어떻게해야합니까?

  22. 22

    디렉토리에서 모든 파일을 크기별로 정렬하려면 어떻게해야합니까?

  23. 23

    Django에서 임시 파일을 다운로드하려면 어떻게해야합니까?

  24. 24

    ffmpeg 오디오 변환 m4a에서 wav로-파일 크기 부풀림

  25. 25

    오디오의 특정 부분에 대해서만 ffmpeg로 파형 이미지를 생성하려면 어떻게해야합니까?

  26. 26

    Postman에서 파일을 업로드하려면 어떻게해야합니까?

  27. 27

    C #에서 SaveFileDialog를 사용하여 바이트 배열을 디스크에 png 파일로 저장하려면 어떻게해야합니까?

  28. 28

    ODT 파일을 PDF로 변환하려면 어떻게해야합니까?

  29. 29

    종속성을 명시 적으로 요구하지 않고 Rspec에서 순서 종속 지원 파일을로드하려면 어떻게해야합니까?

뜨겁다태그

보관