gpt4 book ai didi

video - FFmpeg 分割大文件

转载 作者:行者123 更新时间:2023-12-04 23:01:55 24 4
gpt4 key购买 nike

我需要将一个大的视频文件快速拆分成多个片段,并且没有错误的文件。基本思想是,我有一个 2GB 的视频文件,我想将其更改为多种格式。我读过一些编码器在编码为不同格式时不能使用超过 1 个核心。因此,我有了将大文件(非常快)拆分为 4/8 部分的想法,具体取决于我在各个服务器上可用的内核数量。将每个片段重新编码为新格式,并使用这些格式按顺序显示视频。

所以

测试文件.mp4

变成

  • testfile_piece_1.mp4
  • testfile_piece_2.mp4
  • testfile_piece_3.mp4
  • testfile_piece_4.mp4

  • 然后可以单独转换这些。

    解决方案不应该是特定格式的。但是我发现 mp4 文件存在问题。

    我已经尝试过下面的命令,它运行得非常好而且速度很快,但创建的文件有错误。
    ffmpeg -i testfile.mp4 -ss 00:00:00 -t 00:20:00 -c copy testfile_piece_1.mp4

    当我在 VLC 上播放 testfile_piece_1.mp4 时,它工作正常。将拆分文件转换为不同高度和宽度的 mp4 文件时会出现问题。我会收到类似于“找不到 moov atom”的错误

    我尝试添加 -movflags faststart没有运气

    然后我遇到了这个图书馆 https://code.google.com/archive/p/moovrelocator/这解决了 moov 问题,但随后我会收到关于 aac 的错误“打开输出流 #0.0 的编码器时出错 - 可能参数不正确,例如 bit_rate、rate、width 或 height”

    拆分文件的另一种方法是无用的,但涉及重新编码文件。对于较小的文件大小来说还不错,但 2GB 的文件可能需要几天才能完成。

    有没有办法快速拆分 largr 文件而不会产生有错误的文件?我已经为此工作了好几天,但没有运气。

    用于评论的控制台输出 - FFmpeg splitting large files
    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/usr/share/nginx/html/uploads/testfile01.mp4':
    Metadata:
    major_brand : isom
    minor_version : 512
    compatible_brands: isomiso2avc1mp41
    encoder : Lavf56.36.100
    Duration: 00:05:02.08, start: 302.120000, bitrate: 3254 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709) , 1920x1080 [SAR 1:1 DAR 16:9], 3252 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (de fault)
    Metadata:
    handler_name : VideoHandler
    [libx264 @ 0x165ffc0] width not divisible by 2 (853x480)
    Output #0, mp4, to '/usr/share/nginx/html/uploads/testfile01_480.mp4':
    Metadata:
    major_brand : isom
    minor_version : 512
    compatible_brands: isomiso2avc1mp41
    encoder : Lavf56.36.100
    Stream #0:0(und): Video: h264, none, q=2-31, 128 kb/s, SAR 2560:2559 DAR 0:0 , 25 fps (default)
    Metadata:
    handler_name : VideoHandler
    encoder : Lavc56.41.100 libx264
    Stream mapping:
    Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
    Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height

    控制台输出 2
    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/usr/share/nginx/html/uploads/testfile.mp4':
    Metadata:
    major_brand : dash
    minor_version : 0
    compatible_brands: iso6avc1mp41
    creation_time : 2016-01-24 04:26:37
    Duration: 01:15:58.08, start: 0.000000, bitrate: 3163 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1920x1080 [SAR 1:1 DAR 16:9], 3161 kb/s, 25 fps, 25 tbr, 90k tbn, 50 tbc (default)
    Metadata:
    creation_time : 2016-01-24 04:26:37
    handler_name : VideoHandler
    [segment @ 0x1197060] Codec for stream 0 does not use global headers but container format requires global headers
    [mp4 @ 0x11512a0] Codec for stream 0 does not use global headers but container format requires global headers
    Output #0, segment, to '/usr/share/nginx/html/uploads/testfile%02d.mp4':
    Metadata:
    major_brand : dash
    minor_version : 0
    compatible_brands: iso6avc1mp41
    encoder : Lavf56.36.100
    Stream #0:0(und): Video: h264 (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 3161 kb/s, 25 fps, 25 tbr, 12800 tbn, 25 tbc (default)
    Metadata:
    creation_time : 2016-01-24 04:26:37
    handler_name : VideoHandler
    Stream mapping:
    Stream #0:0 -> #0:0 (copy)
    Press [q] to stop, [?] for help
    [mp4 @ 0x11512a0] Codec for stream 0 does not use global headers but container format requires global headers
    [mp4 @ 0x11512a0] Codec for stream 0 does not use global headers but container format requires global headers
    [mp4 @ 0x11512a0] Codec for stream 0 does not use global headers but container format requires global headers
    [mp4 @ 0x11512a0] Codec for stream 0 does not use global headers but container format requires global headers
    [mp4 @ 0x11512a0] Codec for stream 0 does not use global headers but container format requires global headers
    [mp4 @ 0x11512a0] Codec for stream 0 does not use global headers but container format requires global headers
    [mp4 @ 0x11512a0] Codec for stream 0 does not use global headers but container format requires global headers
    [mp4 @ 0x11512a0] Codec for stream 0 does not use global headers but container format requires global headers
    [mp4 @ 0x11512a0] Codec for stream 0 does not use global headers but container format requires global headers
    [mp4 @ 0x11512a0] Codec for stream 0 does not use global headers but container format requires global headers
    [mp4 @ 0x11512a0] Codec for stream 0 does not use global headers but container format requires global headers
    [mp4 @ 0x11512a0] Codec for stream 0 does not use global headers but container format requires global headers
    [mp4 @ 0x11512a0] Codec for stream 0 does not use global headers but container format requires global headers
    [mp4 @ 0x11512a0] Codec for stream 0 does not use global headers but container format requires global headers
    [mp4 @ 0x11512a0] Codec for stream 0 does not use global headers but container format requires global headers

    最佳答案

    使用段复用器将输入分成段:

    ffmpeg -i testfile.mp4 -c copy -f segment -segment_time 1200 testfile_piece_%02d.mp4

    这将在关键帧处拆分源,因此片段可能不完全是 1200 秒长。并且时间戳不会重置,因此一些玩家将无法播放第二段和后面的段。如果需要可玩性,请插入 -reset_timestamps 1 .

    并行编码后,可以先创建一个文本文件 seg.txt来拼接生成的段。像这样
    file 'encoded_testfile_piece_00.mp4'
    file 'encoded_testfile_piece_01.mp4'
    file 'encoded_testfile_piece_02.mp4'
    file 'encoded_testfile_piece_03.mp4'

    然后运行
    ffmpeg -f concat -i seg.txt -c copy -fflags +genpts encoded_full.mp4

    关于video - FFmpeg 分割大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63903839/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com