Skip to content

Commit

Permalink
Revert switch to mpegts format and audio default
Browse files Browse the repository at this point in the history
  • Loading branch information
blakeblackshear committed Oct 23, 2021
1 parent c1132e6 commit 4cf55ad
Show file tree
Hide file tree
Showing 5 changed files with 12 additions and 45 deletions.
4 changes: 2 additions & 2 deletions docs/docs/configuration/camera_specific.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ Note that mjpeg cameras require encoding the video into h264 for recording, and

```yaml
output_args:
record: -f segment -segment_time 10 -segment_format ts -reset_timestamps 1 -strftime 1 -c:v libx264
rtmp: -c:v libx264 -f flv
record: -f segment -segment_time 10 -segment_format mp4 -reset_timestamps 1 -strftime 1 -c:v libx264 -an
rtmp: -c:v libx264 -an -f flv
```

### RTMP Cameras
Expand Down
2 changes: 1 addition & 1 deletion docs/docs/configuration/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ ffmpeg:
# Optional: output args for detect streams (default: shown below)
detect: -f rawvideo -pix_fmt yuv420p
# Optional: output args for record streams (default: shown below)
record: -f segment -segment_time 10 -segment_format ts -reset_timestamps 1 -strftime 1 -c copy
record: -f segment -segment_time 10 -segment_format mp4 -reset_timestamps 1 -strftime 1 -c copy -an
# Optional: output args for rtmp streams (default: shown below)
rtmp: -c copy -f flv

Expand Down
2 changes: 1 addition & 1 deletion docs/docs/faqs.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ A solid green image means that frigate has not received any frames from ffmpeg.

### How can I get sound or audio in my recordings?

The recommended audio codec is `aac`. Not all audio codecs are supported by RTMP, so you may need to re-encode your audio with `-c:a aac`. The default ffmpeg args are shown [here](configuration/index#full-configuration-reference).
By default, Frigate removes audio from recordings to reduce the likelihood of failing for invalid data. If you would like to include audio, you need to override the output args to remove `-an` for where you want to include audio. The recommended audio codec is `aac`. Not all audio codecs are supported by RTMP, so you may need to re-encode your audio with `-c:a aac`. The default ffmpeg args are shown [here](configuration/index#full-configuration-reference).

### My mjpeg stream or snapshots look green and crazy

Expand Down
12 changes: 3 additions & 9 deletions frigate/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -298,13 +298,14 @@ class BirdseyeConfig(FrigateBaseModel):
"-segment_time",
"10",
"-segment_format",
"ts",
"mp4",
"-reset_timestamps",
"1",
"-strftime",
"1",
"-c",
"copy",
"-an",
]


Expand Down Expand Up @@ -564,16 +565,9 @@ def _get_ffmpeg_cmd(self, ffmpeg_input: CameraInput):
else self.ffmpeg.output_args.record.split(" ")
)

# backwards compatibility check for segment_format change from mp4 to ts
record_args = (
" ".join(record_args)
.replace("-segment_format mp4", "-segment_format ts")
.split(" ")
)

ffmpeg_output_args = (
record_args
+ [f"{os.path.join(CACHE_DIR, self.name)}-%Y%m%d%H%M%S.ts"]
+ [f"{os.path.join(CACHE_DIR, self.name)}-%Y%m%d%H%M%S.mp4"]
+ ffmpeg_output_args
)

Expand Down
37 changes: 5 additions & 32 deletions frigate/record.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,9 @@ def move_files(self):
recordings = [
d
for d in os.listdir(CACHE_DIR)
if os.path.isfile(os.path.join(CACHE_DIR, d)) and d.endswith(".ts")
if os.path.isfile(os.path.join(CACHE_DIR, d))
and d.endswith(".mp4")
and not d.startswith("clip_")
]

files_in_use = []
Expand Down Expand Up @@ -111,38 +113,9 @@ def move_files(self):
file_name = f"{start_time.strftime('%M.%S.mp4')}"
file_path = os.path.join(directory, file_name)

cache_path_mp4 = f"{cache_path[:-2]}mp4"

ffmpeg_cmd = [
"ffmpeg",
"-hide_banner",
"-y",
"-i",
cache_path,
"-c",
"copy",
"-movflags",
"+faststart",
cache_path_mp4,
]

p = sp.run(
ffmpeg_cmd,
encoding="ascii",
capture_output=True,
)

Path(cache_path).unlink(missing_ok=True)

if p.returncode != 0:
logger.error(f"Unable to convert {cache_path} to {file_path}")
logger.error(p.stderr)
Path(cache_path_mp4).unlink(missing_ok=True)
continue

# copy then delete is required when recordings are stored on some network drives
shutil.copyfile(cache_path_mp4, file_path)
Path(cache_path_mp4).unlink(missing_ok=True)
shutil.copyfile(cache_path, file_path)
os.remove(cache_path)

rand_id = "".join(
random.choices(string.ascii_lowercase + string.digits, k=6)
Expand Down

0 comments on commit 4cf55ad

Please sign in to comment.