重复使用转码输出以使用 AvConv 生成多个文件

重复使用转码输出以使用 AvConv 生成多个文件

我正在尝试查找有关如何将文件转码为多个输出的信息一枪,但我似乎做不到。我发现的大多数结果都描述了相反的情况:将多个文件合并为一个。

情况如下:

我有一个 IP 网络摄像头,可以进行“转储”或原始捕获(尽管我不喜欢说“原始”,因为它可能会与 .raw 格式混淆),它由两个流组成:H264 视频和 PCM 音频。

我需要将“raw/dump”捕获转码为三个 MP4 文件,其中两个带有音频和视频(H264+AAC),第三个只带有 AAC 音频;更具体地说:

  1. 与原始文件分辨率相同的文件,确保其以 30 fps 运行,具有 128kbps 的 aac 音频并且像素格式为 yuv420p(“转储”的视频流的像素格式为 yuvj420p,这使得该流无法直接在 Chrome 中播放……至少目前如此)。

  2. 具有与上述相同功能但分辨率只有一半的文件。

  3. 仅包含 AAC 音频的文件。

我有命令可以让第一个文件运行得很好(尽管有人对此有任何评论,但如果我也能提出意见,我将不胜感激):

    /usr/bin/avconv "/home/borrajax/Videos/original.dump" \
    -acodec libvo_aacenc -ac 1 -ab 128k -ar 44100 \
    -vcodec libx264 -preset fast -r 30 -pix_fmt yuv420p \
    "/home/borrajax/Videos/transcoded.mp4"

也许我可以保存一些选项,但问题是相机的配置可以修改,所以我需要确保生成的 .mp4 具有我需要的格式(这就是我指定这么多的原因)

我的猜测是,这可能是一个好主意(我说“可能”是因为我对视频编码了解不多,尝试一次性转码这三个文件,然后重新使用转码后的数据以节省时间。

例如:分辨率为原始视频一半的视频将具有与“大”视频完全相同的音频,因此无需再次转码。显然,音频文件也是如此。不应该需要转码三次。此外,也许(在这里,我不知道哪种方法更好)我还可以重复使用视频流。由于我需要两个与原始视频具有不同 fps 和像素格式的视频,因此可能值得仅转码一次(就像我在上面的命令中已经做的那样),然后获取已经具有 30fps 和 yuv420p 像素格式的视频流,并将其分辨率降低一半。

我想总结一下是个好主意......如何使用 avconv 链接(管道?)多个输出,并对每个输出应用不同的选项?

使用:

  • Ubuntu 12.04 LTS
  • avconv 版本 0.8.5-4:0.8.5-0ubuntu0.12.04.1

答案1

可能最有效的、不重复劳动的方法是使用一个脚本来执行多项操作,然后将结果混合在一起以制作最终文件。

例如:

  1. 将音频从原始文件转码为 AAC 生成 audio.aac

    avconv -i <input> -c:a libfaac -vn audio.aac
    
  2. 将视频从原始分辨率转码为 temp-full-vid.mp4 中的全分辨率

    avconv -i <input> -c:v libx264 -pix_fmt yuv420p -preset fast -r 30 -an temp-full-vid.mp4
    
  3. 将视频从原始分辨率转码为 temp-half-vid.mp4 中的一半分辨率

    avconv -i <input> -c:v libx264 -pix_fmt yuv420p -preset fast -r 30 -filter:v scale=-1:ih/2 -an temp-half-vid.mp4
    
  4. 将 temp-full-vid.mp4 和 audio.aac 合并为 full.mp4

    avconv -i temp-full-vid.mp4 -i audio.aac -c copy -map 0 -map 1 full.mp4
    
  5. 将 temp-half-vid.mp4 和 audio.aac 合并为 half.mp4

    avconv -i temp-half-vid.mp4 -i audio.aac -c copy -map 0 -map 1 half.mp4
    
  6. 删除 temp-full-vid.mp4 和 temp-half-vid.mp4

这样您就得到了所需的 3 个文件 full.mp4、half.mp4 和 audio.aac,无需不必要地重新进行转码。

相关内容