如何使FFmpeg使用输出编解码器和pix_fmt与输入相同

时间:2014-08-18 04:04:29

标签: video ffmpeg

我正在尝试编写一个批处理shell脚本,用于调整视频,这些视频是不可预测的编解码器和容器。 我预计调整大小的视频应该与原始视频大致相同,但图像大小除外。这意味着在mov容器中使用png编解码器的视频应该使用png编解码器而不是h264输出。

但我意识到只保持扩展名相同是不够的。 FFmpeg倾向于使用与扩展名相关联的默认编码器,而不是尝试与输入保持相同。

是否有任何魔法参数会告诉FFmpeg尝试使用输入编解码器而不是按输出文件名猜测?

提前两次运行FFmpeg以获取信息将是我的最后选择,因为它会使我的脚本更加复杂。

1 个答案:

答案 0 :(得分:0)

使用ffprobe获取编解码器,然后在ffmpeg命令中指定它们,伪代码类似于:

output = parse_json( `ffprobe -v quiet -show_streams -print_format json output.mp4` )
stream_args = ""
for stream in output['streams']:
    stream_args += " -codec:0:" + stream['index'] + " " + stream['codec_name']

ffmpeg_cmd = "ffmpeg -i input.mp4 " + stream_args + " output.mp4