2

我有很多不同格式的视频文件(主要是 avi)。例如,一些相关行来自ffprobe

  Duration: 02:27:14.70, start: 0.000000, bitrate: 664 kb/s
    Stream #0.0: Video: mpeg4, yuv420p, 608x256 [PAR 1:1 DAR 19:8], 23.98 tbr, 23.98 tbn, 23.98 tbc
    Stream #0.1: Audio: mp3, 44100 Hz, stereo, s16, 96 kb/s

  Duration: 00:20:51.84, start: 0.000000, bitrate: 3286 kb/s
    Stream #0.0: Video: mpeg4, yuv420p, 640x480 [PAR 1:1 DAR 4:3], 25 tbr, 25 tbn, 25 tbc
    Stream #0.1: Audio: mp3, 48000 Hz, stereo, s16, 128 kb/s

  Duration: 01:26:01.84, start: 0.000000, bitrate: 845 kb/s
    Stream #0.0: Video: mpeg4, yuv420p, 704x544 [PAR 1:1 DAR 22:17], 25 fps, 25 tbr, 25 tbn, 30k tbc
    Stream #0.1: Audio: mp3, 44100 Hz, stereo, s16, 128 kb/s

  Duration: 01:42:25.68, start: 0.000000, bitrate: 952 kb/s
    Stream #0.0: Video: h264 (High), yuv420p, 600x244 [PAR 1:1 DAR 150:61], 25 fps, 25 tbr, 25 tbn, 50 tbc
    Stream #0.1: Audio: mp3, 48000 Hz, stereo, s16, 112 kb/s

如您所见,比特率、视频大小、编解码器各不相同。想要编写一个脚本(bash,perl),将它们转换为带有ffmpeg.

通过谷歌搜索,我发现了许多不同的 ffmpeg 配置文件,但所有配置文件都是“静态的”,例如将视频转换为相同的分辨率,这可能不是正确的方法,因为我有许多不同的视频分辨率和许多不同的比特率。(这也适用于音频)。

我能够编写脚本 - 但需要一个基本问题的帮助。

我需要有关如何根据ffmpeg上述ffprobe结果计算参数值的算法帮助。例如,当有 704x544 和 845kb/s 的视频以及另一个尺寸较小的 640x480 但比特率为 3200kb/s 的视频时 - 如何计算ffmpeg脚本中的“正确值”?

为所需设备转码视频的正确算法/逻辑是什么?(在我的情况下是 iPhone)

如果有人关心,我已经用“非自由”编解码器重新编译了 ffmpeg,并且也有 mencoder(来自 mplayer 包)。

第二:在 avi 容器中已经有许多 mpeg4 格式的视频。如何确定“最快”的转换配置文件?意味着一个配置文件,其中ffmpeg只会进行不太可能的计算,因此可能会保持原样:mpeg4 格式、大小、比特率和“仅”会改变容器格式。这可能吗?

我读了很多ffmpegSO 问题,但没有找到答案 - 也许我错过了一些东西。有人可以指点我一些好的文件吗?

4

1 回答 1

0

您是否尝试使用gstreamer?如果是这样,您可以运行命令行 gst-launch 来自动解码任何输入文件,然后调整大小为您需要的任何格式,然后重新编码并重新复用到 mov 文件中。确切的行取决于音频的存在/不存在,以及用于编写 .mov 文件的具体编解码器。

重新编码 XYZ -> ABC.mov 的示例,没有音频,用于 320x240 调整大小和 h263 编码:

gst-launch   filesrc location=XYZ ! decodebin2 ! ffmpegcolorspace ! videoscale add-borders=true ! video/x-raw-yuv, width=320, height=240 ! ffmpegcolorspace ! ffenc_h263 ! qtmux ! filesink location=ABC.mov
于 2012-09-28T13:10:48.910 回答