当前位置: 首页 > 知识库问答 >
问题:

FFMPEG:用一个命令进行concat和编码

国兴文
2023-03-14

我想用concat解复用而不是concat协议得到结果,因为在脚本中自动化要困难得多

你知道是否可以用concat解复用来归档这个结果?多谢!

马西莫

for f in ./*.mp4; do echo "file '$f'" >> list.txt; done

ffmpeg -f concat -safe 0 -y -i list.txt -i ../logo/logo.png -c:a aac -b:a 384k -ar 48000 -ac 2 -af aresample=async=1000 -c:v libx264 -x264opts keyint=50:min-keyint=50:no-scenecut -bf 0 -r 25 -b:v 4800k -maxrate 4800k -bufsize 3000k -profile:v main -crf 22 -filter_complex "[0:v][1:v]overlay=main_w-overlay_w-10:10,scale=1920:1080,setsar=1" ../buffer/1080set.mp4

frame=9745 fps=13 q=27.0 size=186368kb时间=00:19:02.29比特率=1336.5kbits/

超过1000帧重复

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '1.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    creation_time   : 2016-02-27T22:25:49.000000Z
    encoder         : HandBrake 0.10.5 2016021100
  Duration: 00:06:29.87, start: 0.000000, bitrate: 3447 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 768x432, 3282 kb/s, 25 fps, 25 tbr, 90k tbn, 180k tbc (default)
    Metadata:
      creation_time   : 2016-02-27T22:25:49.000000Z
      handler_name    : VideoHandler
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 159 kb/s (default)
    Metadata:
      creation_time   : 2016-02-27T22:25:49.000000Z
      handler_name    : Stereo

Input #1, mov,mp4,m4a,3gp,3g2,mj2, from '2.mp4':
  Metadata:
    major_brand     : M4V 
    minor_version   : 1
    compatible_brands: M4V mp42isom
    creation_time   : 2016-02-27T18:52:37.000000Z
  Duration: 00:07:16.93, start: 0.000000, bitrate: 1184 kb/s
    Stream #1:0(eng): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, smpte170m), 768x432, 991 kb/s, 25 fps, 25 tbr, 25k tbn, 50 tbc (default)
    Metadata:
      creation_time   : 2016-02-27T18:52:37.000000Z
      handler_name    : Mainconcept MP4 Video Media Handler
      encoder         : AVC Coding
    Stream #1:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 189 kb/s (default)
    Metadata:
      creation_time   : 2016-02-27T18:52:37.000000Z
      handler_name    : Mainconcept MP4 Sound Media Handler

Input #2, mov,mp4,m4a,3gp,3g2,mj2, from '3.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: mp42mp41
    creation_time   : 2017-06-27T17:58:17.000000Z
  Duration: 00:05:05.05, start: 0.000000, bitrate: 2622 kb/s
    Stream #2:0(eng): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, smpte170m), 768x432, 2301 kb/s, 25 fps, 25 tbr, 25k tbn, 50 tbc (default)
    Metadata:
      creation_time   : 2017-06-27T17:58:17.000000Z
      handler_name    : Alias Data Handler
      encoder         : AVC Coding
    Stream #2:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 317 kb/s (default)
    Metadata:
      creation_time   : 2017-06-27T17:58:17.000000Z
      handler_name    : Alias Data Handler

Input #3, mov,mp4,m4a,3gp,3g2,mj2, from '4.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: mp42mp41
    creation_time   : 2017-06-27T17:53:32.000000Z
  Duration: 00:06:47.36, start: 0.000000, bitrate: 3144 kb/s
    Stream #3:0(eng): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, smpte170m), 768x432, 2819 kb/s, 25 fps, 25 tbr, 25k tbn, 50 tbc (default)
    Metadata:
      creation_time   : 2017-06-27T17:53:32.000000Z
      handler_name    : Alias Data Handler
      encoder         : AVC Coding
    Stream #3:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 317 kb/s (default)
    Metadata:
      creation_time   : 2017-06-27T17:53:32.000000Z
      handler_name    : Alias Data Handler

共有1个答案

欧阳炜
2023-03-14

concat demuxer需要所有输入具有相同的格式、流的数量、流的类型、流的顺序(或使用exact_stream_id)、时基、帧速率、音频采样速率、音频通道布局,并且还建议具有相同的宽度和高度。

在您的示例中,第一个输入的时基(tbn)与其余输入不同。您可以对此输入进行预处理,使其与其他输入一致:

ffmpeg -i 1.mp4 -c copy -video_track_timescale 25k 1_reset.mp4

然后使用concat Demuxer运行命令。

 类似资料:
  • 我有两个flac音频文件,我需要用不同的时间码剪切它们,然后用一个命令行将它们与ffmpeg连接起来。有办法吗?我做了类似的事情,但效果不太好,输出文件的时间戳都搞乱了(不是从00:00开始输出flac,而是从59:90开始输出!!)而且这个命令行速度非常慢,而且它只在unix系统上工作。。。希望有人能帮助我

  • 例如,如果我的音频文件A.mp3是40秒,我需要预置20秒的静默,而不需要重新编码。 我的想法是在相同的CBR和我的音频采样率(44100和40kbps)下有一个60秒的长静默mp3(silence.mp3)。然后我需要“修剪”这个文件,并适当地与音频文件(a.mp3)连接/连接。 我有一个linux脚本计算预置所需的秒数,我尝试使用以下filter_complex表达式:

  • 我想将ffmpeg输出到一个rtmp流。同时,我想通过我的程序处理H264流。我已经尝试了"ffmpeg-f dshow-i video="Webcam C110"-vcodec libx264-f te-map 0: v"xx.mkv|-" 但不起作用。

  • 是否可以从Dockerfile构建映像并使用单个命令运行它 有一个命令来构建Dockerfile,还有来运行映像。 有没有这两个命令的任何组合,使它更容易构建和运行只有一个命令?

  • 我是android编程的新手,这是一种抽象,我对ndk不太了解,但如果我是对的,有很多带有java包装的ffmpeg库可以直接使用。我可以将它们导入到我的项目中,但不知道如何使用它们通过它们执行ffmpeg命令。您能给我推荐任何特定的库,以及如何使用它们来执行ffmpeg命令吗?

  • 但是,一旦我们更改命令(更改位置fontfile=with text= 我得到以下错误 [Parsed_drawtext_0@02d88a80]无法加载字体“C”:无法找到匹配的字体